Sylvia Taylor [Tue, 9 Jul 2019 12:51:55 +0000 (12:51 +0000)]
[aarch64]: redefine aes patterns
This first patch removes aarch64 usage of the aese/aesmc and aesd/aesimc
fusions (i.e. aes fusion) implemented in the scheduler due to unpredictable
behaviour observed in cases such as:
- when register allocation goes bad (e.g. extra movs)
- aes operations with xor and zeroed keys among interleaved operations
A more stable version should be provided by instead doing the aes fusion
during the combine pass. Since the aese and aesd patterns have been
rewritten as encapsulating a xor operation, the existing combine fusion
patterns have also been updated. The purpose is to simplify the need of
having additional combine patterns for cases like the ones below:
For AESE (though it also applies to AESD as both have a xor operation):
data = data ^ key;
data = vaeseq_u8(data, zero);
---
eor v1.16b, v0.16b, v1.16b
aese v1.16b, v2.16b
Should mean and generate the same as:
data = vaeseq_u8(data, key);
---
aese v1.16b, v0.16b
2019-07-09 Sylvia Taylor <sylvia.taylor@arm.com>
* config/aarch64/aarch64-simd.md
(aarch64_crypto_aes<aes_op>v16qi): Redefine pattern with xor.
(aarch64_crypto_aes<aesmc_op>v16qi): Remove attribute enabled.
(*aarch64_crypto_aes<aes_op>v16qi_xor_combine): Remove both.
(*aarch64_crypto_aese_fused,
*aarch64_crypto_aesd_fused): Update to new definition.
* config/aarch64/aarch64.c
(aarch_macro_fusion_pair_p): Remove aese/aesmc fusion check.
* gcc.target/aarch64/crypto-fuse-1.c: Remove.
* gcc.target/aarch64/crypto-fuse-2.c: Remove.
* gcc.target/aarch64/aes-fuse-1.c: New testcase.
* gcc.target/aarch64/aes-fuse-2.c: New testcase.
From-SVN: r273304
Christophe Lyon [Tue, 9 Jul 2019 12:26:21 +0000 (12:26 +0000)]
[ARM][testsuite] Fix address of sg stubs in CMSE tests
2019-07-09 Christophe Lyon <christophe.lyon@linaro.org>
* gcc.target/arm/cmse/bitfield-1.c: Fix address of .gnu.sgstubs
section.
* gcc.target/arm/cmse/bitfield-2.c: Likewise.
* gcc.target/arm/cmse/bitfield-3.c: Likewise.
* gcc.target/arm/cmse/struct-1.c: Likewise.
From-SVN: r273303
Richard Biener [Tue, 9 Jul 2019 12:22:10 +0000 (12:22 +0000)]
gimple-match.h (gimple_match_op::resimplify): New.
2019-07-09 Richard Biener <rguenther@suse.de>
* gimple-match.h (gimple_match_op::resimplify): New.
(gimple_resimplify1, gimple_resimplify2, gimple_resimplify3,
gimple_resimplify4, gimple_resimplify5): Remove.
* gimple-match-head.c (gimple_resimplify1, gimple_resimplify2,
gimple_resimplify3, gimple_resimplify4, gimple_resimplify5):
Make static.
(gimple_match_op::resimplify): New.
* tree-ssa-sccvn.c (vn_nary_build_or_lookup_1): Valueize
according to availability. Use gimple_match_op::resimplify.
From-SVN: r273302
Eric Botcazou [Tue, 9 Jul 2019 09:58:51 +0000 (09:58 +0000)]
* ira-emit.c (emit_moves): Skip DEBUG_INSNs when setting the location.
From-SVN: r273297
Sylvia Taylor [Tue, 9 Jul 2019 09:28:09 +0000 (09:28 +0000)]
[arm]: redefine aes patterns
This patch removes the arch-common aese/aesmc and aesd/aesimc fusions
(i.e. aes fusion) implemented in the scheduling phase through the
aarch_crypto_can_dual function. The reason is due to observing
undesired behaviour in cases such as:
- when register allocation goes bad (e.g. extra movs)
- aes operations with xor and zeroed keys among interleaved operations
A more stable version should be provided by instead doing the aes fusion
during the combine pass. As such, new combine patterns have been added to
enable this.
The second change is the aese and aesd patterns have been rewritten as
encapsulating a xor operation. The purpose is to simplify the need of
having additional combine patterns for cases like the ones below:
For AESE (though it also applies to AESD as both have a xor operation):
data = data ^ key;
data = vaeseq_u8(data, zero);
---
veor q1, q0, q1
aese.8 q1, q9
Should mean and generate the same as:
data = vaeseq_u8(data, key);
---
aese.8 q1, q0
2019-07-09 Sylvia Taylor <sylvia.taylor@arm.com>
* config/arm/crypto.md:
(crypto_<crypto_pattern>): Redefine aese/aesd pattern with xor.
(crypto_<crypto_pattern>): Remove attribute enabled for aesmc.
(crypto_<crypto_pattern>): Split CRYPTO_BINARY into 2 patterns.
(*aarch32_crypto_aese_fused, *aarch32_crypto_aesd_fused): New.
* config/arm/arm.c
(aarch_macro_fusion_pair_p): Remove aes/aesmc fusion check.
* config/arm/aarch-common-protos.h
(aarch_crypto_can_dual_issue): Remove.
* config/arm/aarch-common.c
(aarch_crypto_can_dual_issue): Likewise.
* config/arm/exynos-m1.md: Remove aese/aesmc fusion.
* config/arm/cortex-a53.md: Likewise.
* config/arm/cortex-a57.md: Likewise.
* config/arm/iterators.md:
(CRYPTO_BINARY): Redefine.
(CRYPTO_UNARY): Removed.
(CRYPTO_AES, CRYPTO_AESMC): New.
* gcc.target/arm/aes-fuse-1.c: New.
* gcc.target/arm/aes-fuse-2.c: New.
* gcc.target/arm/aes_xor_combine.c: New.
From-SVN: r273296
Martin Liska [Tue, 9 Jul 2019 09:22:30 +0000 (11:22 +0200)]
Document and test __builtin_expect_with_probability.
2019-07-09 Martin Liska <mliska@suse.cz>
* doc/extend.texi: Document influence on loop
optimizers.
2019-07-09 Martin Liska <mliska@suse.cz>
* gcc.dg/predict-17.c: Test loop optimizer assumption
about loop iterations.
From-SVN: r273295
Richard Biener [Tue, 9 Jul 2019 08:04:37 +0000 (08:04 +0000)]
tree-ssa-sccvn.c (struct vn_walk_cb_data): Add orig_ref member.
2019-07-09 Richard Biener <rguenther@suse.de>
* tree-ssa-sccvn.c (struct vn_walk_cb_data): Add orig_ref member.
(vn_reference_lookup_3): If the main ref has no access path recorded
but orig_ref has use it to do access-path based disambiguation.
(vn_reference_lookup_pieces): Adjust.
(vn_reference_lookup): Pass down original ref if we valueized.
* gcc.dg/tree-ssa/alias-access-path-1.c: Scan fre1 dump.
* gcc.dg/tree-ssa/alias-access-path-2.c: Likewise.
* gcc.dg/tree-ssa/alias-access-path-8.c: Likewise.
From-SVN: r273294
Ed Schonberg [Tue, 9 Jul 2019 07:55:38 +0000 (07:55 +0000)]
[Ada] Access to uninitialized memory by predicate check
This patch fixes an exception or erroneous execution, when the
declaration for an object of a composite type that has a dynanic
predicate is initialized with an aggregate that requires expansion into
individual components. Prior to this patch the predicate check for the
object appeared before intialization was performed, thus accessing
uninitialized memory.
2019-07-09 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): If the object type
is a composite type that has a dynamic predicate and, the
expression in the declaration is an aggregate, the generated
predicate check must appear after the expanded code for the
aggregate, which will appear after the rewritten object
declarastion.
gcc/testsuite/
* gnat.dg/predicate10.adb, gnat.dg/predicate10_pkg.adb,
gnat.dg/predicate10_pkg.ads: New testcase.
From-SVN: r273293
Justin Squirek [Tue, 9 Jul 2019 07:55:33 +0000 (07:55 +0000)]
[Ada] Crash on 'Img attribute
This patch fixes and issue whereby applying 'Img to a constant
enumerated character type would result in a compiler crash when
assertions are enabled and infinite recursion when they are not.
2019-07-09 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_eval.adb (Expr_Value_E): Add conditional to correctly
handle constant enumerated character types.
gcc/testsuite/
* gnat.dg/image1.adb: New testcase.
From-SVN: r273292
Eric Botcazou [Tue, 9 Jul 2019 07:55:28 +0000 (07:55 +0000)]
[Ada] System.OS_Interface: fix Critical_Section.SpinCount type
2019-07-09 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* libgnarl/s-osinte__mingw.ads (CRITICAL_SECTION): Use proper
type for SpinCount component.
From-SVN: r273291
Justin Squirek [Tue, 9 Jul 2019 07:55:22 +0000 (07:55 +0000)]
[Ada] Warning needed on anonymous access type allocators
This patch enhances the compiler to add an optional warning for
allocators of anonymous access types due to the somewhat confusing
runtime accessibility checks that they generate. For more details see RM
3.10.2 sections 14/3, 14.1/3, and 14.2/3.
These warnings can now be enabled with -gnatw_a, disabled with -gnatw_A
and are part of the "all warnings" flag -gnatwa.
------------
-- Source --
------------
-- main.adb
procedure Main is
type Int_Ptr is access all Integer;
Ptr_Obj : Int_Ptr;
Ptr_Not_Null_Obj : not null Int_Ptr := new Integer;
Ptr_Anon_Acc_Obj : not null access Integer :=
new Integer; -- WARNING
procedure Update_Ptr (Item : access Integer) is
begin
Ptr_Obj := Int_Ptr (Item); -- RUNTIME ERROR
end;
procedure Update_Ptr_With_Anonymous_Allocator is
Item : access Integer := new Integer;
begin
Update_Ptr (Item);
end;
type Rec_With_Coextension_A (Disc : access Integer)
is null record;
type Rec_With_Coextension_B (Disc : access Integer) is record
Comp : Integer;
end record;
Obj : Rec_With_Coextension_A :=
(Disc => new Integer'(32)); -- WARNING
procedure Test_Param (Param : access Integer) is
begin
null;
end;
function Test_Simple_Return return access Integer is
begin
return new Integer; -- WARNING
end;
function Test_Coextension_Return_A return Rec_With_Coextension_A is
begin
return (Disc => new Integer); -- WARNING
end;
function Test_Coextension_Return_B return Rec_With_Coextension_B is
begin
return (new Integer, 32); -- WARNING
end;
begin
Test_Param (new Integer); -- WARNING
Test_Param (Param => new Integer); -- WARNING
Update_Ptr_With_Anonymous_Allocator;
end;
-----------------
-- Compilation --
-----------------
$ gnatmake -q -gnatw_a main.adb
$ rm *.ali
$ gnatmake -q -gnatwa -gnatw_A main.adb
$ rm *.ali
$ gnatmake -q -gnatwa main.adb
$ main
main.adb:8:06: warning: use of an anonymous access type allocator
main.adb:16:32: warning: use of an anonymous access type allocator
main.adb:29:15: warning: use of an anonymous access type allocator
main.adb:38:14: warning: use of an anonymous access type allocator
main.adb:43:23: warning: coextension will not be deallocated when
its associated owner is deallocated
main.adb:43:23: warning: use of an anonymous access type allocator
main.adb:48:15: warning: coextension will not be deallocated when
its associated owner is deallocated
main.adb:48:15: warning: use of an anonymous access type allocator
main.adb:52:16: warning: use of an anonymous access type allocator
main.adb:53:25: warning: use of an anonymous access type allocator
main.adb:5:04: warning: variable "Ptr_Obj" is assigned but never read
main.adb:6:04: warning: variable "Ptr_Not_Null_Obj" is not referenced
main.adb:7:04: warning: variable "Ptr_Anon_Acc_Obj" is not referenced
main.adb:16:07: warning: "Item" is not modified, could be declared constant
main.adb:28:04: warning: variable "Obj" is not referenced
main.adb:36:13: warning: function "Test_Simple_Return" is not referenced
main.adb:41:13: warning: function "Test_Coextension_Return_A" is not referenced
main.adb:43:23: warning: coextension will not be deallocated when its
associated owner is deallocated
main.adb:46:13: warning: function "Test_Coextension_Return_B" is not referenced
main.adb:48:15: warning: coextension will not be deallocated when its
associated owner is deallocated
main.adb:5:04: warning: variable "Ptr_Obj" is assigned but never read
main.adb:6:04: warning: variable "Ptr_Not_Null_Obj" is not referenced
main.adb:7:04: warning: variable "Ptr_Anon_Acc_Obj" is not referenced
main.adb:8:06: warning: use of an anonymous access type allocator
main.adb:16:07: warning: "Item" is not modified, could be declared constant
main.adb:16:32: warning: use of an anonymous access type allocator
main.adb:28:04: warning: variable "Obj" is not referenced
main.adb:29:15: warning: use of an anonymous access type allocator
main.adb:36:13: warning: function "Test_Simple_Return" is not referenced
main.adb:38:14: warning: use of an anonymous access type allocator
main.adb:41:13: warning: function "Test_Coextension_Return_A" is not referenced
main.adb:43:23: warning: coextension will not be deallocated when its
associated owner is deallocated
main.adb:43:23: warning: use of an anonymous access type allocator
main.adb:46:13: warning: function "Test_Coextension_Return_B" is not referenced
main.adb:48:15: warning: coextension will not be deallocated when its
associated owner is deallocated
main.adb:48:15: warning: use of an anonymous access type allocator
main.adb:52:16: warning: use of an anonymous access type allocator
main.adb:53:25: warning: use of an anonymous access type allocator
raised PROGRAM_ERROR : main.adb:12 accessibility check failed
2019-07-09 Justin Squirek <squirek@adacore.com>
gcc/ada/
* exp_ch4.adb (Expand_N_Allocator): Add conditional to detect
the presence of anoymous access type allocators and issue a
warning if the appropriate warning flag is enabled.
* warnsw.ads: Add new warning flag for anonymous allocators
* warnsw.adb (All_Warnings, Restore_Warnings, Save_Warnings,
Set_Underscore_Warning_Switch): Register new flags.
(WA_Warnings): Register new flag as an "all warnings" switch
* usage.adb,
doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document new warning switches -gnatw_a and -gnatw_A.
* gnat_ugn.texi: Regenerate.
From-SVN: r273290
Ed Schonberg [Tue, 9 Jul 2019 07:55:17 +0000 (07:55 +0000)]
[Ada] Crash/infinite loop on program with multiple visibility errors
This patch fixes the behavior of the compiler on a program with multiple
visibility errors. Previous to this fix the compiler would either crash
or enter an infinite loop on a declaration for the formal in a
subprogram declaration, when the parameter type was given by a selected
component that does not denote an entity. This patch also specializes
the error message when a local overloadable name has a homonym that is a
child package, which may containt an otherwise hidden interpreatation.
No simple reproducer.
2019-07-09 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch4.adb (Diagnose_Call): Improve error recovery when a
local subprogram name hides a possible candidate name declared
in a child package in the context of the current unit.
* sem_ch6.adb (Process_Formals): Protect against malformed
formal types when the parameter type does not denote an entity.
From-SVN: r273289
Hristian Kirtchev [Tue, 9 Jul 2019 07:55:12 +0000 (07:55 +0000)]
[Ada] Elaboration order v4.0 and generic instantiations
This patch updates the library graph augmentation mechanism of the
elaboration order v4.0 to emulate a particular behavior of the v3.0
scheme involving generic instantiations. If a unit without any
elaboration code instantiates a generic without any elaboration code,
the invocation edge from the instance to the generic body is not
considered for library graph augmentation.
------------
-- Source --
------------
-- gen_pack1.ads
generic
type Element_Type is private;
package Gen_Pack1 is
procedure Read;
end Gen_Pack1;
-- gen_pack1.adb
with Types1;
package body Gen_Pack1 is
procedure Read is null;
end Gen_Pack1;
-- types1.ads
with Gen_Pack1;
package Types1 is
procedure Read;
package Optional_Numbers is new Gen_Pack1 (Positive);
end Types1;
-- main1.adb
with Types1;
procedure Main1 is
begin
Types1.Optional_Numbers.Read;
end Main1;
-----------------
-- Compilation --
-----------------
$ gnatmake -q main1.adb
2019-07-09 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo-augmentors.adb (Visit_Elaboration_Root): Do not start a
DFS from an elaboration root whose corresponding unit lacks
elaboration code. This behavior mimics that of the old
elaboration order mechanism.
* bindo-graphs.adb (Find_All_Cycles_Through_Vertex): Move the
vertex tracing within the functional branches of the routine.
This prevents spurious trace output.
(Has_No_Elaboration_Code): New routine.
(Trace_Cycle, Trace_Edge): Update the various Ids to use the
"standard" trace format.
* bindo-graphs.ads (Has_No_Elaboration_Code): New routine.
* bindo-units.ads, bindo-units.adb (Has_No_Elaboration_Code):
New routine.
From-SVN: r273288
Piotr Trojanek [Tue, 9 Jul 2019 07:55:06 +0000 (07:55 +0000)]
[Ada] Reformat comments
Replace ". " (i.e. a period followed by two spaces) with ". "; this is
meant to avoid distraction when reading comments, except for the license
section, where apparently this makes the formating nicer. Some comments
have been refilled, in particular those that could fit into fewer lines.
Also, some occurences of this patter in code has also been removed, e.g.
in "J in 1 .. 3".
2019-07-09 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* ali.ads, bindo-graphs.adb, bindo-validators.adb, clean.adb,
doc/gnat_ugn/elaboration_order_handling_in_gnat.rst, einfo.ads,
exp_aggr.adb, exp_ch13.adb, exp_ch4.adb, exp_ch5.adb,
exp_ch6.adb, exp_ch7.adb, exp_ch9.adb, exp_pakd.adb,
fname-uf.ads, gnatlink.adb, inline.adb, lib.ads, make.adb,
namet.ads, opt.ads, par-ch4.adb, par-ch6.adb, par-labl.adb,
prep.adb, sem_aggr.adb, sem_ch13.adb, sem_ch4.adb, sem_ch5.adb,
sem_ch6.adb, sem_ch6.ads, sem_ch7.adb, sem_ch8.adb, sem_dim.adb,
sem_disp.adb, sem_prag.adb, sem_res.adb, sem_warn.adb,
sinfo.ads: Replace ". " with ". ". Minor reformatting and typo
corrections.
* gnat_ugn.texi: Generate.
From-SVN: r273287
Hristian Kirtchev [Tue, 9 Jul 2019 07:55:00 +0000 (07:55 +0000)]
[Ada] Task-related circularities in Elaboration order v4.0
This patch adds another suggestion to the elaboration order diagnostics.
An elaboration circularity involving a task activation may be resolved
through pragma Restrictions (No_Entry_Calls_In_Elaboration_Code).
------------
-- Source --
------------
-- no_entry_calls.txt
pragma Restrictions (No_Entry_Calls_In_Elaboration_Code);
-- a.ads
package A is
task type Task_Typ is
entry Start;
end Task_Typ;
procedure Proc;
end A;
-- a.adb
with B;
package body A is
task body Task_Typ is
begin
accept Start;
B.Proc;
end Task_Typ;
Elab : Task_Typ;
procedure Proc is null;
end A;
-- b.ads
package B is
procedure Proc;
end B;
-- b.adb
with A;
package body B is
procedure Proc is
begin
A.Proc;
end Proc;
end B;
-- main.adb
with A;
-- +--> A spec B spec
-- | ^ ^ ^
-- | | with | |
-- | sbb | +----------------+ | sbb
-- | | | |
-- | | | Invocation |
-- | A body ------------> B body
-- | ^ | |
-- | | Invocation | |
-- | +------------------+ |
-- | |
-- | Invocation |
-- +---------------------------+
--
-- The cycle is:
--
-- A body --> A body
procedure Main is begin null; end Main;
----------------------------
-- Compilation and output --
----------------------------
$ gnatmake -f -q main.adb -gnatd_F
$ gnatmake -f -q main.adb -gnatec=no_entry_calls.txt
error: Elaboration circularity detected
info:
info: Reason:
info:
info: unit "a (body)" depends on its own elaboration
info:
info: Circularity:
info:
info: unit "a (body)" invokes a construct of unit "a (body)" at
elaboration time
info: path 1:
info: elaboration of unit "a (body)"
info: activation of local task declared at "a.ads":2:14
info: call to subprogram "proc" declared at "b.ads":2:14
info: call to subprogram "proc" declared at "a.ads":6:14
info:
info: Suggestions:
info:
info: use pragma Restrictions (No_Entry_Calls_In_Elaboration_Code)
info: use the dynamic elaboration model (compiler switch -gnatE)
info:
gnatmake: *** bind failed.
2019-07-09 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo.ads: Move type Precedence_Kind from the private to the
visible part of the unit.
* bindo-augmentors.adb: Remove the use of global data as it is
bad practice.
(Augment_Library_Graph): Update the parameter profile.
(Is_Visited, Set_Is_Visited): Remove.
(Visit_Elaboration_Root, Visit_Elaboration_Roots): Update the
parameter profile and comment on usage.
(Visit_Vertex): Likewise. Also keep track of which invocation
edge activates a task.
* bindo-augmentors.ads (Augment_Library_Graph): Update the
parameter profile and comment on usage.
* bindo-builders.adb (Create_Forced_Edge,
Create_Spec_And_Body_Edge, Create_With_Edge): Update the call to
Add_Edge.
* bindo-diagnostics.adb: Add with end use clauses for Restrict
and Rident.
(Output_Dynamic_Model_Suggestions): Remove.
(Output_Invocation_Related_Suggestions): New routine.
(Output_Suggestions): Output all invocation-related suggestions
together.
* bindo-elaborators.adb: Remove types Comparator_Ptr and
Predicate_Ptr.
(Find_Best_Vertex): Update the parameter profile.
* bindo-graphs.adb (Activates_Task): New routine.
(Add_Body_Before_Spec_Edge): Update the call to
Add_Edge_With_Return.
(Add_Edge): Update the parameter profile and the call to
Add_Edge_With_Return.
(Add_Edge_With_Return): Update the parameter profile and comment
on usage.
(At_Least_One_Edge_Satisfies): New routine.
(Contains_Elaborate_All_Edge): Reimplement.
(Contains_Static_Successor_Edge, Contains_Task_Activation): New
routine.
(Contains_Weak_Static_Successor): Remove.
(Is_Static_Successor_Edge): New routine.
* bindo-graphs.ads: Add types LGE_Predicate_Ptr,
LGV_Comparator_Ptr, and LGV_Predicate_Ptr. Update type
Library_Graph_Edge_Attributes to capture whether an invocation
edge activates a task. Update the value of
No_Library_Graph_Edge_Attributes.
(Activates_Task): Update the parameter profile and comment on
usage.
(Contains_Static_Successor_Edge, Contains_Task_Activation): New
routines.
(Contains_Weak_Static_Successor): Remove.
* doc/gnat_ugn/elaboration_order_handling_in_gnat.rst:
Update the documentation to reflect the new task-related advice.
* gnat_ugn.texi: Regenerate.
From-SVN: r273286
Piotr Trojanek [Tue, 9 Jul 2019 07:54:55 +0000 (07:54 +0000)]
[Ada] Exp_Util: minor refactoring
2019-07-09 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* exp_util.adb (Containing_Package_With_Ext_Axioms): Replace
low-level Ekind test with a high-level wrapper.
From-SVN: r273285
Arnaud Charlet [Tue, 9 Jul 2019 07:54:50 +0000 (07:54 +0000)]
[Ada] Disable calls to Abort defer/undefer when ZCX_By_Default
2019-07-09 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* libgnat/s-memory.adb: Disable calls to Abort defer/undefer
when ZCX_By_Default.
From-SVN: r273284
Javier Miranda [Tue, 9 Jul 2019 07:54:45 +0000 (07:54 +0000)]
[Ada] Missing error on generic type with representation clause
The compiler does not report an error on a generic type that has a
representation clause when its ultimate parent is not a generic formal.
2019-07-09 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_ch13.adb (Rep_Item_Too_Early): Representation clauses are
not allowed for a derivation of a generic type. Extend the
current test to check that none of the parents is a generic
type.
gcc/testsuite/
* gnat.dg/rep_clause8.adb: New testcase.
From-SVN: r273283
Hristian Kirtchev [Tue, 9 Jul 2019 07:54:40 +0000 (07:54 +0000)]
[Ada] Minor reformatting
2019-07-09 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_ch9.adb, exp_util.adb, repinfo.adb, sem_ch12.adb,
sem_prag.adb, sem_res.adb, sem_spark.adb, sem_util.adb: Minor
reformatting.
From-SVN: r273282
Ed Schonberg [Tue, 9 Jul 2019 07:54:35 +0000 (07:54 +0000)]
[Ada] Wrong resolution of equality operator with overloaded operand
This patch fixes a code generation error on an equality operation one of
whose operands is an overloaded call, and several equality operators are
visible. The resolution would succes but in some cases the wrong entity
was lwfton the equality node, leading to expansion with the wrong
interpretation. If the equality operation is the operand of a negation,
the resolution of the negation must make direct use of the equality
resolution,
2019-07-09 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Equality_Op): If the node was overloaded,
set properly the entity to which the node has been resolved. The
original entity is the first one found during analysis, and is
not necessarily the resolved one.
(Resolve_Op_Not): If the argument of negation is an overloaded
equality operation, call its resolution directly given that the
context type does not participate in overload resolution.
gcc/testsuite/
* gnat.dg/equal7.adb, gnat.dg/equal7_pkg.adb,
gnat.dg/equal7_pkg.ads: New testcase.
From-SVN: r273281
Hristian Kirtchev [Tue, 9 Jul 2019 07:54:29 +0000 (07:54 +0000)]
[Ada] Elaboration order v4.0 activation
This patch enables the elaboration order v4.0 as the default elaboration
order in GNATbind. The previous v3.0 elaboration order is now referred
to as the "legacy elaboration order mechanism" and is available using
binder switch -H.
2019-07-09 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo.adb: Remove with and use clauses for Debug. Add with
and use clauses for Opt.
(Find_Elaboration_Order): Enable the v4.0 elaboration order. The
v3.0 mechanism is now available under binder switch -H.
* bindusg.adb (Display): Enable switch -H.
* debug.adb: Free compiler switch -gnatd_G. Free binder switch
-d_N.
* sem_elab.adb: Update the section on switches to remove
-gnatd_G.
(Invocation_Graph_Recording_OK): The invocation graph is now
unconditionally recorded in ALI files.
* switch-b.adb (Scan_Binder_Switches): Scan switch -H.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Update the documentation on compiler switches related to
elaboration. Update the documentation on binder switches to
include switch -H.
* doc/gnat_ugn/elaboration_order_handling_in_gnat.rst: Update
the documentation on elaboration order handling in GNAT.
* gnat_ugn.texi: Regenerate.
From-SVN: r273280
Eric Botcazou [Tue, 9 Jul 2019 07:54:24 +0000 (07:54 +0000)]
[Ada] Missing escape of the double quote in JSON output
In Ada, the name of operators contains a pair of double quotes, which
need to be properly escaped when the name appears in the JSON output of
-gnatR.
The change also ensures that formal parameters are not listed in the
layout information, since this information is not back-annotated for
them.
2019-07-09 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.adb (List_Entities): Disregard formals altogether.
(List_Name): Properly escape the double quote in the JSON
output.
From-SVN: r273279
Javier Miranda [Tue, 9 Jul 2019 07:54:19 +0000 (07:54 +0000)]
[Ada] Missing runtime range checks with -gnatVa
Under validity checking mode the compiler may silently skip generating
code to perform runtime range checks.
2019-07-09 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_util.adb (Remove_Side_Effects): Preserve the
Do_Range_Check flag.
gcc/testsuite/
* gnat.dg/range_check3.adb, gnat.dg/range_check3_pkg.adb,
gnat.dg/range_check3_pkg.ads: New testcase.
From-SVN: r273278
Yannick Moy [Tue, 9 Jul 2019 07:54:14 +0000 (07:54 +0000)]
[Ada] Sinfo: refine comment for Do_Range_Check
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* sinfo.ads: Refine comment for Do_Range_Check.
From-SVN: r273277
Yannick Moy [Tue, 9 Jul 2019 07:54:10 +0000 (07:54 +0000)]
[Ada] Expand Enum_Rep attribute reference in GNATprove mode
In the special GNATprove mode for proof of programs, expand the Enum_Rep
attribute reference so that a suitable static integer is in the AST
where required by the rest of analysis.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Expand
attribute reference on Enum_Rep.
From-SVN: r273276
Ed Schonberg [Tue, 9 Jul 2019 07:54:05 +0000 (07:54 +0000)]
[Ada] Spurious error when instance of generic is used as formal package
This patch removes a spurious bug on the use of the current instance of
a generic package G as the actual in a nested instantiation of a generic
unit GU that has a formal package whose generic_package name is G. This
is only legal if G has no generic formal part, and the formal package
declaration is declared with a box or without a formal_paxkage_actual
part.
2019-07-09 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch12.adb (Instantiate_Formal_Package): Handle properly the
case where the actual for a formal package in an instance is the
current instance of an enclosing generic package.
(Check_Formal_Packages): If the formal package declaration is
box-initialized or lacks associations altogether, no internal
instance was created to verify conformance, and there is no
validating package to remove from tree.
gcc/testsuite/
* gnat.dg/generic_inst5.adb, gnat.dg/generic_inst6.adb,
gnat.dg/generic_inst6_g1-c.adb, gnat.dg/generic_inst6_g1-c.ads,
gnat.dg/generic_inst6_g1.ads, gnat.dg/generic_inst6_i1.ads,
gnat.dg/generic_inst6_i2.ads, gnat.dg/generic_inst6_x.ads: New
testcases.
From-SVN: r273275
Yannick Moy [Tue, 9 Jul 2019 07:54:00 +0000 (07:54 +0000)]
[Ada] Prevent inconsistent state for inlining in GNATprove
In GNATprove mode, subprograms with a body to inline should have been
filtered in Analyze_Subprogram_Body_Helper to match the conditions for
inlining subprograms in GNATprove. Prevent a call to Set_Body_To_Inline
in GNATprove mode that did not go through this filtering.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* freeze.adb (Build_Renamed_Body): Do not set body to inline in
GNATprove mode.
From-SVN: r273274
Yannick Moy [Tue, 9 Jul 2019 07:53:55 +0000 (07:53 +0000)]
[Ada] Expand type of static expressions in GNATprove mode
In the special mode for GNATprove, expand the type of static expressions
like done during compilation, to both get suitable legality checks and
increase the precision of the formal analysis.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* exp_util.adb (Expand_Subtype_From_Expr): Still expand the type
of static expressions in GNATprove_Mode.
* sem_ch3.adb (Analyze_Object_Declaration): Remove obsolete
special case for GNATprove_Mode.
From-SVN: r273273
Piotr Trojanek [Tue, 9 Jul 2019 07:53:50 +0000 (07:53 +0000)]
[Ada] Reword "wild card" to "wildcard"
2019-07-09 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* doc/gnat_rm/the_gnat_library.rst,
doc/gnat_ugn/building_executable_programs_with_gnat.rst,
erroutc.adb, libgnat/g-comlin.adb, libgnat/g-comlin.ads,
libgnat/g-regexp.ads, libgnat/g-regpat.ads,
libgnat/g-spipat.ads, libgnat/s-os_lib.ads,
libgnat/s-regexp.ads: Reword "wild card" to "wildcard".
* gnat_rm.texi, gnat_ugn.texi: Regenerate.
From-SVN: r273272
Yannick Moy [Tue, 9 Jul 2019 07:53:45 +0000 (07:53 +0000)]
[Ada] Handle implicit moves in SPARK ownership pointer support
Allocator expressions and sub-expressions of (extension) aggregates are
implicitly the source of assignments in Ada. Thus, they should be moved
when of a deep type when checking ownership rules in SPARK.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_spark.adb (Check_Expression): Handle correctly implicit
assignments as part of allocators and (extension) aggregates.
(Get_Root_Object): Adapt for new path expressions.
(Is_Path_Expression): Return True for (extension) aggregate.
From-SVN: r273271
Piotr Trojanek [Tue, 9 Jul 2019 07:53:40 +0000 (07:53 +0000)]
[Ada] Einfo: fix a typo
2019-07-09 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* einfo.ads: Fix a typo.
From-SVN: r273270
Ed Schonberg [Tue, 9 Jul 2019 07:53:35 +0000 (07:53 +0000)]
[Ada] Fix scopes for local variables in task/protected bodies
No impact on compilation with GCC.
2019-07-09 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_util.adb (Scope_Within_Or_Same): Handle properly task
bodies and protected bodies, so that local variables within have
their proper scopes after these constructs have been rewritten
during expansion. This patch resembles but is not identical to
the code in Scope_Within.
From-SVN: r273269
Arnaud Charlet [Tue, 9 Jul 2019 07:53:30 +0000 (07:53 +0000)]
[Ada] Set Dynamic_Elaboration_Checks to True in CodePeer mode
2019-07-09 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* gnat1drv.adb (Adjust_Global_Switches): Set
Dynamic_Elaboration_Checks to True in CodePeer mode.
From-SVN: r273268
Yannick Moy [Tue, 9 Jul 2019 07:53:26 +0000 (07:53 +0000)]
[Ada] Issue error on illegal ownership in SPARK
Check for declaration of global variables prior to use in the ownership
checking for SPARK.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_spark.adb (Get_Perm_Or_Tree): Issue an error when
encountering unknown global variable.
From-SVN: r273267
Yannick Moy [Tue, 9 Jul 2019 07:53:21 +0000 (07:53 +0000)]
[Ada] Fix ownership checking for pointers in SPARK
Checking of the readable status of sub-expressions occurring in the
target path of an assignment should occur before the right-hand-side is
moved or borrowed or observed.
There is no impact on compilation.
2019-07-09 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_spark.adb (Check_Expression): Change signature to take an
Extended_Checking_Mode, for handling read permission checking of
sub-expressions in an assignment.
(Check_Parameter_Or_Global): Adapt to new behavior of
Check_Expression for mode Assign.
(Check_Safe_Pointers): Do not analyze generic bodies.
(Check_Assignment): Separate checking of the target of an
assignment.
From-SVN: r273266
Eric Botcazou [Tue, 9 Jul 2019 07:53:16 +0000 (07:53 +0000)]
[Ada] Make -gnatRj output strictly conforming JSON
This changes the -gnatRj output from a concatenation of entities to an
array of entities, thus making it strictly conforming JSON and easier to
be parsed by means of GNATColl or Python.
2019-07-09 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.ads (JSON format): Adjust.
* repinfo.adb (Need_Blank_Line): Rename to...
(Need_Separator): ...this.
(Blank_Line): Rename to...
(Write_Separator): ...this and add JSON specific handling.
(List_Array_Info): Adjust to above renaming.
(List_Object_Info): Likewise.
(List_Record_Info): Likewise.
(List_Subprogram_Info): Likewise.
(List_Type_Info): Likewise.
(List_Entities): Do not set Need_Blank_Line.
(List_Rep_Info): Set Need_Separator and add JSON specific
handling. Output a single JSON stream in the normal case.
From-SVN: r273265
Arnaud Charlet [Tue, 9 Jul 2019 07:53:11 +0000 (07:53 +0000)]
[Ada] Update -fdump-ada-spec documentation
2019-07-09 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* doc/gnat_ugn/the_gnat_compilation_model.rst: Update doc on
-fdump-ada-spec now that we generate Ada 2012.
* gnat_ugn.texi: Regenerate.
From-SVN: r273264
Martin Liska [Tue, 9 Jul 2019 07:41:39 +0000 (09:41 +0200)]
Remove usage of ZSTD_CLEVEL_DEFAULT define.
2019-07-09 Martin Liska <mliska@suse.cz>
* lto-compress.c (lto_normalized_zstd_level): Do not use
ZSTD_CLEVEL_DEFAULT as it is not default in old releases
of libzstd. One can use 0 as a default compression level.
From-SVN: r273263
Martin Liska [Tue, 9 Jul 2019 07:41:19 +0000 (09:41 +0200)]
Enhance documentation of -fprofile-note option.
2019-07-09 Martin Liska <mliska@suse.cz>
* doc/invoke.texi: Add link from -fprofile-dir option.
Use better wording for 'gcno filename'.
From-SVN: r273262
Martin Sebor [Tue, 9 Jul 2019 04:15:42 +0000 (04:15 +0000)]
PR middle-end/71924 - missing -Wreturn-local-addr returning alloca result
PR middle-end/71924 - missing -Wreturn-local-addr returning alloca result
PR middle-end/90549 - missing -Wreturn-local-addr maybe returning an address of a local array plus offset
gcc/ChangeLog:
PR middle-end/71924
PR middle-end/90549
* gimple-ssa-isolate-paths.c (isolate_path): Add attribute. Update
comment.
(args_loc_t): New type.
(args_loc_t, locmap_t): same.
(diag_returned_locals): New function.
(is_addr_local): Same.
(handle_return_addr_local_phi_arg, warn_return_addr_local): Same.
(find_implicit_erroneous_behavior): Call warn_return_addr_local_phi_arg.
(find_explicit_erroneous_behavior): Call warn_return_addr_local.
gcc/testsuite/ChangeLog:
PR middle-end/71924
PR middle-end/90549
* gcc.c-torture/execute/return-addr.c: New test.
* gcc.dg/Wreturn-local-addr-2.c: New test.
* gcc.dg/Wreturn-local-addr-4.c: New test.
* gcc.dg/Wreturn-local-addr-5.c: New test.
* gcc.dg/Wreturn-local-addr-6.c: New test.
* gcc.dg/Wreturn-local-addr-7.c: New test.
* gcc.dg/Wreturn-local-addr-8.c: New test.
* gcc.dg/Wreturn-local-addr-9.c: New test.
* gcc.dg/Wreturn-local-addr-10.c: New test.
* gcc.dg/Walloca-4.c: Handle expected warnings.
* gcc.dg/pr41551.c: Same.
* gcc.dg/pr59523.c: Same.
* gcc.dg/tree-ssa/pr88775-2.c: Same.
* gcc.dg/tree-ssa/alias-37.c: Same.
* gcc.dg/winline-7.c: Same.
From-SVN: r273261
GCC Administrator [Tue, 9 Jul 2019 00:16:23 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273260
Jakub Jelinek [Mon, 8 Jul 2019 22:11:59 +0000 (00:11 +0200)]
tree-vect-stmts.c (scan_operand_equal_p): Look through MEM_REF with SSA_NAME address of POINTER_PLUS_EXPR.
* tree-vect-stmts.c (scan_operand_equal_p): Look through MEM_REF
with SSA_NAME address of POINTER_PLUS_EXPR. Handle MULT_EXPR
and casts in offset when different, both through gimple stmts
and through trees. Rewritten using loops to minimize code duplication
for each operand.
* g++.dg/vect/simd-6.cc: Replace xfail with target x86.
* g++.dg/vect/simd-9.cc: Likewise.
* testsuite/libgomp.c++/scan-13.C: Replace xfail with target x86.
* testsuite/libgomp.c++/scan-16.C: Likewise.
From-SVN: r273249
Jakub Jelinek [Mon, 8 Jul 2019 22:08:27 +0000 (00:08 +0200)]
re PR c++/91110 (ICE: tree check: expected class 'type', have 'exceptional' (error_mark) in cp_omp_mappable_type_1, at cp/decl2.c:1421)
PR c++/91110
* decl2.c (cp_omp_mappable_type_1): Don't emit any note for
error_mark_node type.
* g++.dg/gomp/pr91110.C: New test.
From-SVN: r273248
Eric Botcazou [Mon, 8 Jul 2019 21:37:33 +0000 (21:37 +0000)]
emit-rtl.c (set_insn_locations): New function moved from...
* emit-rtl.c (set_insn_locations): New function moved from...
* function.c (set_insn_locations): ...here.
* ira-emit.c (emit_moves): Propagate location of the first instruction
to the inserted move instructions.
* reg-stack.c (compensate_edge): Set the location if the sequence is
inserted on the edge.
* rtl.h (set_insn_locations): Declare.
From-SVN: r273247
Segher Boessenkool [Mon, 8 Jul 2019 21:14:33 +0000 (23:14 +0200)]
rs6000: Ignore GFXOPT (and GPOPT) for choosing machine
The function rs6000_machine_from_flags chooses what .machine string to
used based on the rs6000_isa_flags flags. For that it checks for each
ISA level if something for its ISA_*_MASKS is selected.
This does not work for GFXOPT and GPOPT: these are set as flags in
ISA_2_5_MASKS_SERVER, but they aren't actually new there, they just
are not selected by default for older ISAs (they were optional).
This patch makes OPTION_MASK_PPC_GFXOPT and OPTION_MASK_PPC_GPOPT not
influence the .machine selection.
* config/rs6000/rs6000.c (rs6000_machine_from_flags): Ignore
OPTION_MASK_PPC_GFXOPT and OPTION_MASK_PPC_GPOPT for selecting the
.machine string.
From-SVN: r273246
Segher Boessenkool [Mon, 8 Jul 2019 20:38:46 +0000 (22:38 +0200)]
rs6000: Add testcase for PR88233
This testcase tests that with -mcpu=power8 we do not generate any
mtvsr* instructions, and we do the copy with {l,st}xvd2x.
gcc/testsuite/
PR rtl-optimization/88233
* gcc.target/powerpc/pr88233.c: New testcase.
From-SVN: r273245
Segher Boessenkool [Mon, 8 Jul 2019 17:35:12 +0000 (19:35 +0200)]
subreg: Add -fsplit-wide-types-early (PR88233)
Currently the second lower-subreg pass is run right before RA. This
is much too late to be very useful. At least for targets that do not
have RTL patterns for operations on multi-register modes it is a lot
better to split patterns earlier, before combine and all related
passes.
This adds an option -fsplit-wide-types-early that does that, and
enables it by default for rs6000.
PR rtl-optimization/88233
* common.opt (fsplit-wide-types-early): New option.
* common/config/rs6000/rs6000-common.c
(rs6000_option_optimization_table): Add OPT_fsplit_wide_types_early for
OPT_LEVELS_ALL.
* doc/invoke.texi (Optimization Options): Add -fsplit-wide-types-early.
* lower-subreg.c (pass_lower_subreg2::gate): Add test for
flag_split_wide_types_early.
(pass_data_lower_subreg3): New.
(pass_lower_subreg3): New.
(make_pass_lower_subreg3): New.
* passes.def (pass_lower_subreg2): Move after the loop passes.
(pass_lower_subreg3): New, inserted where pass_lower_subreg2 was.
* tree-pass.h (make_pass_lower_subreg2): Move up, to its new place in
the pass pipeline; its previous place is taken by ...
(make_pass_lower_subreg3): ... this.
From-SVN: r273240
Wilco Dijkstra [Mon, 8 Jul 2019 17:02:35 +0000 (17:02 +0000)]
Turn of ipa-ra in builtins test (PR91059)
The gcc.c-torture/execute/builtins/lib directory contains a reimplementation
of many C library string functions, which causes non-trivial register allocation
bugs with LTO and static linked libraries. To fix this long-standing test
issue, turn off ipa-ra which avoids the register corruption across calls. All
builtin torture tests now pass on aarch64-none-elf. Committed as obvious.
testsuite/
PR testsuite/91059
PR testsuite/78529
* gcc.c-torture/execute/builtins/builtins.exp: Add -fno-ipa-ra.
From-SVN: r273238
Robin Dapp [Mon, 8 Jul 2019 14:42:49 +0000 (14:42 +0000)]
S/390: Define shift_truncation_mask.
Define s390_shift_truncation_mask to allow the optabs optimization
sh = (64 - sh)
-> sh = -sh
for a rotation operation.
gcc/ChangeLog:
2019-07-08 Robin Dapp <rdapp@linux.ibm.com>
* config/s390/s390.c (s390_shift_truncation_mask): Define.
(TARGET_SHIFT_TRUNCATION_MASK): Define.
gcc/testsuite/ChangeLog:
2019-07-08 Robin Dapp <rdapp@linux.ibm.com>
* gcc.target/s390/rotate-truncation-mask.c: New test.
From-SVN: r273237
Robin Dapp [Mon, 8 Jul 2019 14:40:48 +0000 (14:40 +0000)]
S/390: Rework shift count handling.
Add s390_valid_shift_count to determine the validity of a
shift-count operand. This is used to replace increasingly
complex substitutions that should have allowed address-style
shift-count handling, an and mask as well as no-op subregs
on the operand.
gcc/ChangeLog:
2019-07-08 Robin Dapp <rdapp@linux.ibm.com>
* config/s390/constraints.md: Add new jsc constraint.
* config/s390/predicates.md: New predicates.
* config/s390/s390-protos.h (s390_valid_shift_count): New function.
* config/s390/s390.c (s390_valid_shift_count): New function.
(print_shift_count_operand): Use s390_valid_shift_count.
(print_operand): Likewise.
* config/s390/s390.md: Use new predicate.
* config/s390/subst.md: Remove addr_style_op and masked_op substs.
* config/s390/vector.md: Use new predicate.
2019-07-08 Robin Dapp <rdapp@linux.ibm.com>
* gcc.target/s390/combine-rotate-modulo.c: New test.
* gcc.target/s390/combine-shift-rotate-add-mod.c: New test.
* gcc.target/s390/vector/combine-shift-vec.c: New test.
From-SVN: r273236
Kito Cheng [Mon, 8 Jul 2019 13:21:21 +0000 (13:21 +0000)]
MAINTAINERS (Write After Approval): Remove myself, already listed in RISC-V port maitainer.
2019-07-08 Kito Cheng <kito.cheng@sifive.com>
* MAINTAINERS (Write After Approval): Remove myself, already listed in
RISC-V port maitainer.
From-SVN: r273235
Richard Biener [Mon, 8 Jul 2019 11:46:26 +0000 (11:46 +0000)]
re PR tree-optimization/91108 (Fails to pun through unions)
2019-07-08 Richard Biener <rguenther@suse.de>
PR tree-optimization/91108
* tree-ssa-sccvn.c: Include builtins.h.
(vn_reference_lookup_3): Use only alignment constraints to
verify same-valued store disambiguation.
* gcc.dg/tree-ssa/ssa-fre-61.c: Adjust back.
* gcc.dg/tree-ssa/ssa-fre-78.c: New testcase.
From-SVN: r273232
Joern Rennecke [Mon, 8 Jul 2019 11:17:22 +0000 (11:17 +0000)]
Avoid clash with system header declaration.
* testsuite/gcc.dg/vect/slp-reduc-sad.c (uint32_t):
Remove unused declaration.
From-SVN: r273231
Jim Wilson [Mon, 8 Jul 2019 10:47:42 +0000 (03:47 -0700)]
RISC-V: Fix splitter for 32-bit AND on 64-bit target.
Fixes github.com/riscv/riscv-gcc issue #161. We were accidentally using
BITS_PER_WORD to compute shift counts when we should have been using the
bitsize of the operand modes. This was wrong when we had an SImode shift
and a 64-bit target.
Andrew Waterman <andrew@sifive.com>
gcc/
* config/riscv/riscv.md (lshrsi3_zero_extend_3+1): Use operands[1]
bitsize instead of BITS_PER_WORD.
gcc/testsuite/
* gcc.target/riscv/shift-shift-2.c: Add one more test.
From-SVN: r273230
Martin Liska [Mon, 8 Jul 2019 09:53:02 +0000 (11:53 +0200)]
Revert r254460 (collect2 LTO for AIX).
2019-07-08 Martin Liska <mliska@suse.cz>
* collect2.c (defined): Revert to before r254460.
(scan_prog_file): Revert to before r254460.
From-SVN: r273229
Paolo Carlini [Mon, 8 Jul 2019 09:51:07 +0000 (09:51 +0000)]
re PR c++/65143 ([C++11] missing devirtualization for virtual base in "final" classes)
2019-07-08 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/65143
* g++.dg/tree-ssa/final2.C: New.
* g++.dg/tree-ssa/final3.C: Likewise.
From-SVN: r273228
Kito Cheng [Mon, 8 Jul 2019 09:16:08 +0000 (09:16 +0000)]
MAINTAINERS (Write After Approval): Fix the list sorted by surname.
2019-07-08 Kito Cheng <kito.cheng@sifive.com>
* MAINTAINERS (Write After Approval): Fix the list sorted by surname.
From-SVN: r273227
Eric Botcazou [Mon, 8 Jul 2019 08:15:05 +0000 (08:15 +0000)]
[Ada] Small overhaul in Repinfo unit
This creates a List_Type_Info procedure to deal with type entities other
than arrays and records at top level and a List_Common_Type_Info
procedure to handle the common part between them. No functional
changes.
2019-07-08 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.adb (List_Common_Type_Info): New procedure extracted
from...
(List_Type_Info): ...here. Call it for the common information,
start with a blank line and output the linker section at the
end, if any.
(List_Mechanisms): Rename to...
(List_Subprogram_Info): ...this.
(List_Array_Info): Call List_Common_Type_Info.
(List_Entities): Adjust to above change and renaming.
(List_Record_Info): Call List_Common_Type_Info.
From-SVN: r273226
Dmitriy Anisimkov [Mon, 8 Jul 2019 08:14:59 +0000 (08:14 +0000)]
[Ada] GNAT.Serial_Communications: simplify the Serial_Port structure
2019-07-08 Dmitriy Anisimkov <anisimko@adacore.com>
gcc/ada/
* libgnat/g-sercom.ads
(Serial_Port_Descriptor): New type.
(Serial_Port): Add a comment, make it hold a
Serial_Port_Descriptor.
(To_Ada, To_C): New procedures.
(Port_Data, Port_Data_Access): Remove types.
* libgnat/g-sercom.adb (To_Ada): New stub.
* libgnat/g-sercom__linux.adb, libgnat/g-sercom__mingw.adb:
Update implementations accordingly.
* s-oscons-tmplt.c: Bind Serial_Port_Descriptor to
System.Win32.HANDLE on Windows, and to Interfaces.C.int on
Linux. Add "Interfaces.C." prefix for other basic integer type
bindings.
* xoscons.adb (Output_Info): Remove the "Interfaces.C." prefix
for subtypes generation.
From-SVN: r273225
Arnaud Charlet [Mon, 8 Jul 2019 08:14:55 +0000 (08:14 +0000)]
[Ada] GNAT RM: Update documentation on No_Exceptions restriction
2019-07-08 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
Update documentation on No_Exceptions restriction.
* gnat_rm.texi: Regenerate.
From-SVN: r273224
Dmitriy Anisimkov [Mon, 8 Jul 2019 08:14:50 +0000 (08:14 +0000)]
[Ada] Os_Lib: do not call __gnat_kill for Invalid_Pid
2019-07-08 Dmitriy Anisimkov <anisimko@adacore.com>
gcc/ada/
* libgnat/s-os_lib.adb: Do not call __gnat_kill for Invalid_Pid.
From-SVN: r273223
Piotr Trojanek [Mon, 8 Jul 2019 08:14:46 +0000 (08:14 +0000)]
[Ada] Remove dead code from Enclosing_Package_Or_Subprogram routine
Calls to Scope always return unique entities, i.e. package/subprogram
and not their bodies, so there is no need to expect them.
Cleanup only; semantics unaffected. (This routine was only used in CCG
and GNATprove backends anyway.)
2019-07-08 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem_util.adb (Enclosing_Package_Or_Subprogram): Do not expect
package and subprogram bodies.
From-SVN: r273222
Bob Duff [Mon, 8 Jul 2019 08:14:41 +0000 (08:14 +0000)]
[Ada] Remove documentation of ignored GNATpp switch
2019-07-08 Bob Duff <duff@adacore.com>
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Remove documentation
of ignored GNATpp switch.
From-SVN: r273221
Hristian Kirtchev [Mon, 8 Jul 2019 08:14:36 +0000 (08:14 +0000)]
[Ada] In-place initialization for Initialize_Scalars
Update the documentation of pragma Initialize_Scalars in the GNAT
Reference Manual.
2019-07-08 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst:
Update the documentation of pragma Initialize_Scalars.
* gnat_rm.texi: Regenerate.
From-SVN: r273220
Javier Miranda [Mon, 8 Jul 2019 08:14:32 +0000 (08:14 +0000)]
[Ada] Wrong evaluation of membership test
The code generated by the compiler erroneously evaluates to True
membership tests when their left operand is a a class-wide interface
object and the right operand is a tagged type that implements such
interface type.
2019-07-08 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_ch4.adb (Tagged_Membership): Fix regression silently
introduced in r260738 that erroneouslusy causes the evaluation
to True of the membership test when the left operand of the
membership test is a class-wide interface object and the right
operand is a type that implements such interface type.
gcc/testsuite/
* gnat.dg/interface10.adb: New testcase.
From-SVN: r273219
Hristian Kirtchev [Mon, 8 Jul 2019 08:14:27 +0000 (08:14 +0000)]
[Ada] Assertion failure on validity check for Address
This patch corrects the verification of 'Address clauses to avoid
processing a clause where the prefix of the attribute is a generic
formal object.
2019-07-08 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not
register an address clause when its prefix denotes a generic
formal object.
gcc/testsuite/
* gnat.dg/addr13.adb, gnat.dg/addr13.ads: New testcase.
From-SVN: r273218
Hristian Kirtchev [Mon, 8 Jul 2019 08:14:22 +0000 (08:14 +0000)]
[Ada] Diagnostics for Elaboration order v4.0
This patch adds a missing case to the output of cycle diagnostics here a
transition from an Elaborate_Body pair may reach a destination which is
in the context of an active Elaborate_All.
2019-07-08 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo-diagnostics.adb (Diagnose_Cycle): Capture the presence
of an Elaborate_All edge before iterating over the edges of the
cycle.
(Output_Elaborate_Body_Transition): Update the parameter profile
and the comment on usage. Add a missing case where the edge is
within the context of an Elaborate_All.
(Output_Transition): Update the call to
Output_Elaborate_Body_Transition.
* bindo-graphs.ads, bindo-graphs.adb
(Contains_Elaborate_All_Edge): New routine.
From-SVN: r273217
Piotr Trojanek [Mon, 8 Jul 2019 08:14:15 +0000 (08:14 +0000)]
[Ada] Set dummy Etype for the fake __HEAP entity in GNATprove
GNATprove represents reads and writes via pointers as operations on a
fake __HEAP entity. This entity already had various properties set to
dummy values (e.g. Scope set to Standard_Standard), so that it can be
processed like other entities without crashing and not special-cased
everywhere. Now it also has a dummy Etype, so it can be processed with
Is_Single_Concurrent_Object.
The modified code is only executed by GNATprove; frontend is not
affected.
2019-07-08 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* lib-xref-spark_specific.adb (Create_Heap): Set dummy Etype for
the fake __HEAP entity.
From-SVN: r273216
Daniel Mercier [Mon, 8 Jul 2019 08:14:11 +0000 (08:14 +0000)]
[Ada] Suppress warnings on memory representation in CodePeer mode
2019-07-08 Daniel Mercier <mercier@adacore.com>
gcc/ada/
* gnat1drv.adb: Suppress warnings on memory representation in
CodePeer compiler mode.
From-SVN: r273215
Nicolas Roche [Mon, 8 Jul 2019 08:14:06 +0000 (08:14 +0000)]
[Ada] Remove dependency on Win32 GDI (Graphical Interface)
CommandLineToArgvW drags a dependency on SHELL32.DLL and thus GDI32.DLL.
By loading GDI32.DLL some default GDI objects are allocated. On some
Windows versions this cause the use of a lock on the graphical interface
during process termination. This can impact parallelism significantly as
termination of processes is serialized.
2019-07-08 Nicolas Roche <roche@adacore.com>
gcc/ada/
* rtinit.c (__gnat_runtime_initialize): Remove dependency on
CommandLineToArgvW.
From-SVN: r273214
Doug Rupp [Mon, 8 Jul 2019 08:14:01 +0000 (08:14 +0000)]
[Ada] New port for x86_64-vx7
2019-07-08 Doug Rupp <rupp@adacore.com>
gcc/ada/
* Makefile.rtl: Handle vxworks7r2 in x86_64 and x86 vxworks7.
From-SVN: r273213
Dmitriy Anisimkov [Mon, 8 Jul 2019 08:13:57 +0000 (08:13 +0000)]
[Ada] Use g-sercom__linux.adb for all Linuxes
2019-07-08 Dmitriy Anisimkov <anisimko@adacore.com>
gcc/ada/
* Makefile.rtl: Use g-sercom__linux.adb for all linuxes.
From-SVN: r273212
Yannick Moy [Mon, 8 Jul 2019 08:13:52 +0000 (08:13 +0000)]
[Ada] Do not erase precise type on fixed-point real literal
Real literals of fixed-point type are expected to keep their precise
fixed-point type in GNATprove. This is now correctly enforced.
There is no impact on compilation.
2019-07-08 Yannick Moy <moy@adacore.com>
gcc/ada/
* expander.adb (Expand): Do not reset Analyzed flag always.
* sem_eval.adb (Fold_Ureal): Mark node as analyzed.
From-SVN: r273211
Ed Schonberg [Mon, 8 Jul 2019 08:13:48 +0000 (08:13 +0000)]
[Ada] Crash on timed entry call with a delay given by a type conversion
This patch fixes a compiler crash in the compiler on a timed entry call
whose delay expression is a type conversion, when FLoat_Overflow checks
are enabled.
2019-07-08 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch9.adb (Expand_N_Timed_Entry_Call): Do not insert twice
the assignment statement that computes the delay value, to
prevent improper tree sharing when the value is a type
conversion and Float_Overflow checks are enabled.
gcc/testsuite/
* gnat.dg/entry1.adb, gnat.dg/entry1.ads: New testcase.
From-SVN: r273210
Hristian Kirtchev [Mon, 8 Jul 2019 08:13:43 +0000 (08:13 +0000)]
[Ada] New algorithm for Elaboration order v4.0
This patch introduces several changes to the new elaboration order
mechanism:
* The concept of "strong" and "weak" edges is introduced. Strong
edges are the byproduct of language-defined relations between
units, such as with clauses. Weak edges are the byproduct of
specilative invocations at elaboration time, which may or may not
take place depending on control flow.
* The elaboration order algorithm has been heavily modified to make
use of the strong and weak edges, and operate on units compiled
with different elaboration models.
* The elaboration order algorithm employs the following logic:
- Maintain two sets of vertices, one for all elaborable
vertices, and one for all waiting vertices.
- Pick the best elaborable vertex, and elaborate its component.
- If no such elaborable vertex is available, pick the best
weakly elaborable vertex whose unit has been compiled with the
dynamic model, and elaborate its component.
- If no such weakly elaborable vertex is available, then either
all vertices were already elaborated, or the graph contains a
cycle.
The elaboration of a component employs the same logic, with an
added step where all successors of some predecessor currently being
elaborated are notified that they have one fewer predecessor to
wait on. This may cause certain successors to become elaborable, in
which case they are moved from the set of waiting vertices to the
set of elaborable vertices.
* Three new GNATbind debug switches are introduced, -d_a, -d_b, and
-d_e, to eliminate the effects of pragmas Elaborate_All,
Elaborate_Body, and Elaborate respectively.
* The section on terminology is updated to include new entries.
2019-07-08 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo.adb: Update the section on terminology to include new
concepts. Update the section on switches to include new
entries.
* bindo.ads: Add type Precedence_Kind.
* bindo-builders.adb: Add with and use clauses for Debug and
Bindo.Validators. Add use clauses for
Bindo.Validators.Invocation_Graph_Validators and
Bindo.Validators.Library_Graph_Validators.
(Build_Invocation_Graph): Validate the graph immediately after
it was built.
(Build_Library_Graph): Update the parameter profile. The
creation of the graph is now elaboration model-agnostic.
Validate the graph immediately after it was built.
(Create_With_Edge): Create regular with edges for Elaborate and
Elaborate_All edges when the appropriate debug switches are in
effect.
* bindo-builders.ads (Build_Library_Graph): Update the parameter
profile.
* bindo-diagnostics.adb (Diagnose_Cycle): Track the presence of
an Elaborate_All edge throughout the inspection of the cycle's
edges.
(Output_Dynamic_Model_Suggestions): Output the suggestion only
when the cycle contains at least one weak edge where the
successor was statically elaborated.
(Output_Elaborate_Body_Transition, Output_Forced_Transition,
Output_With_Transition): Update the assertions.
* bindo-elaborators.adb: Remove use clauses for
Bindo.Validators.Invocation_Graph_Validators and
Bindo.Validators.Library_Graph_Validators. Remove strings
Add_To_All_Candidates_Msg and Add_To_Comp_Candidates_Msg.
Remove type String_Ptr.
(Add_Vertex, Add_Vertex_If_Elaborable, Create_All_Candidates_Set
Create_Component_Candidates_Set): Remove.
(Create_Component_Vertex_Sets, Create_Vertex_Sets): New routine.
(Elaborate_Component): Update the parameter profile and the
comment on usage. Reimplement the elaboration of a component.
The algorithm will now attempt to elaborate as many vertices
possible. If this is not possible, and a weakly elaborable
vertex is available use unit was compiled using the dynamic
model, the algorithm will elaborate it.
(Elaborate_Library_Graph): Reimplement the elaboration of the
graph. The algorithm will now attempt to elaborate as many
vertices along with their components as possible. If this is not
possible, and a weakly elaborable vertex is available use unit
was compiled using the dynamic model, the algorithm will
elaborate it along with its component.
(Elaborate_Units): Merge with the functionality of
Elaborate_Units_Common.
(Elaborate_Units_Common, Elaborate_Units_Dynamic,
Elaborate_Units_Static): Remove.
(Elaborate_Vertex): Update the parameter profile and the comment
on usage. Reimplemented.
(Find_Best_Candidate): Remove.
(Find_Best_Elaborable_Vertex, Find_Best_Vertex,
Find_Best_Weakly_Elaborable_Vertex, Has_Elaborable_Body,
Insert_Elaborable_Successor, Insert_Vertex): New routines.
(Is_Better_Candidate): Remove.
(Is_Better_Elaborable_Vertex,
Is_Better_Weakly_Elaborable_Vertex,
Is_Suitable_Elaborable_Vertex,
Is_Suitable_Weakly_Elaborable_Vertex): New routines.
(Trace_Candidate_Vertices): Remove.
(Trace_Component): Output the number of strong and weak
predecessors.
(Trace_Unelaborated_Vertices): Remove.
(Trace_Vertex): Output the number of strong and weak
predecessors.
(Trace_Vertices): New routine.
(Update_Successor, Update_Successors): Update the parameter
profile and the comment on usage.
* bindo-graphs.adb: Remove type Precedence_Kind.
(Add_Edge_With_Return): Update the increment of pending
predecessors.
(Add_Vertex): Provide default values for strong and weak
predecessors.
(Complementary_Vertex): Move the initial declaration to the
spec. Update the parameter profile and the comment on usage.
(Contains_Weak_Static_Successor): New routine.
(Create): Update the parameter profile. The creation of the
graph is now elaboration model-agnostic.
(Decrement_Pending_Predecessors): Update the parameter profile
and the comment on usage. Reimplemented.
(Delete_Edge): Update the decrement of pending predecesors.
(Has_Elaborate_Body): Do not treat a vertex as being subject to
Elaborate_Body when a debug switch is in effect.
(Increment_Pending_Predecessors): Update the parameter profile
and the comment on usage. Reimplemented.
(Is_Elaborable_Component): Reimplemented.
(Is_Elaborable_Vertex): Move the initial declaration to the
spec. Reimplemented.
(Is_Elaborate_Body_Pair): New routine.
(Is_Dynamically_Elaborated): Update the parameter profile.
Reimplemented.
(Is_Weakly_Elaborable_Vertex): New routine.
(Pending_Predecessors): Removed.
(Pending_Predecessors_For_Elaboration,
Pending_Strong_Predecessors, Pending_Weak_Predecessors,
Update_Pending_Predecessors): New routines.
(Update_Pending_Predecessors_Of_Components): Update the
increment of pending predecessors.
* bindo-graphs.ads: Update the components of type
Component_Attributes. Update the components of type
Library_Graph_Attributes. Update the components of type
Library_Graph_Vertex_Attributes. Update the initialization of
No_Component_Attributes. Update the initialization of
No_Library_Graph_Vertex_Attributes.
(Complementary_Vertex, Contains_Weak_Static_Successor): New
routines.
(Create): Update the parameter profile and the comment on usage.
(Decrement_Pending_Predecessors, Is_Dynamically_Elaborated):
Update the parameter profile and the comment on usage.
(Is_Elaborate_Body_Pair, Is_Weakly_Elaborable_Vertex): New
routines.
(Pending_Predecessors): Removed.
(Pending_Predecessors_For_Elaboration,
Pending_Strong_Predecessors, Pending_Weak_Predecessors): New
routines.
* bindo-writers.adb (Write_Components): Moved from the spec.
(Write_Component): Output the strong and weak predecessors.
(Write_Library_Graph): Output the components as part of the
graph.
(Write_Library_Graph_Vertex): Output the strong and weak
predecessors.
* bindo-writers.ads (Write_Components): Moved to the body.
* debug.adb: Add and document new GNATbind switches -d_a, -d_b,
-d_e.
* bindo-validators.adb: Minor reformattings.
From-SVN: r273209
Bob Duff [Mon, 8 Jul 2019 08:13:38 +0000 (08:13 +0000)]
[Ada] More data rates supported on Linux
This patch adds additional data rates to the GNAT.Serial_Communications
package (Linux version).
2019-07-08 Bob Duff <duff@adacore.com>
gcc/ada/
* libgnat/g-sercom.ads, libgnat/g-sercom__linux.adb (Data_Rate):
Support additional data rates.
From-SVN: r273208
Olivier Hainque [Mon, 8 Jul 2019 08:13:34 +0000 (08:13 +0000)]
[Ada] Arrange not to set DECL_ARTIFICIAL on elab procs
Unlike, say, clones created internally by the compiler, elab procs
materialize specific user code and flagging them artificial now takes
elab code away from gcov's analysis, a regression compared to previous
releases.
On the testcase below:
package Gcov_Q is
function F (X : Integer) return Integer is (X + 1);
end;
with Gcov_Q;
package Gcov_P is
Y : Integer := Gcov_Q.F (X => 1);
end;
with Gcov_P;
procedure Gcov_Test is
begin
if Gcov_P.Y /= 2 then
raise Program_Error;
end if;
end;
After compiling with:
gnatmake -f -g gcov_test.adb \
-cargs -ftest-coverage -fprofile-arcs \
-largs -fprofile-generate
and executing with
./gcov_test
We expect
gcov gcov_p
to produce a gcov_p.ads.gcov report.
2019-07-08 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* gcc-interface/trans.c (Compilation_Unit_to_gnu): Don't request
DECL_ARTIFICIAL_P on elab proc declarations.
From-SVN: r273207
Eric Botcazou [Mon, 8 Jul 2019 08:13:30 +0000 (08:13 +0000)]
[Ada] Fix crash on extension of private type with -gnatRj
This fixes a crash (or an assertion failure) during the processing done
for -gnatRj on the declaration of an extension of a private type.
Generally speaking, extension declarations are delicate in this context
because the front-end does not duplicate the structure of the parent
type, so the processing required to output the structural layout needs
to go up to the declaration of the parent type, which may or may not be
available or usable.
The change also makes the processing more robust by falling back to the
flat layout if the declaration of the parent type cannot be processed.
2019-07-08 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* repinfo.adb (List_Record_Info): Declare Incomplete_Layout and
Not_In_Extended_Main local exceptions.
(List_Structural_Record_Layout): For an extension, raise the
former if the parent subtype has not been built and the latter
if it is not declared in the main source unit. Fall back to the
flat layout if either exception has been raised.
From-SVN: r273206
Ed Schonberg [Mon, 8 Jul 2019 08:13:25 +0000 (08:13 +0000)]
[Ada] Semantics of Delete for fixed strings
This patch corrects a bug in the implementation of Delete in an unusual
boundary case: the RM describes the semantics of Delete as equivalent to
that of Replace_String with a null argument. As a result, deleting a
null string that starts past the end of its argument is a noop and must
not raise Index_Error.
2019-07-08 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* libgnat/a-strfix.adb (Delete): The RM describes the semantics
of Delete as equivalent to that of Replace_String with a null
argument. As a result, deleting a null string that starts past
the end of its argument is a noop and must not raise
Index_Error.
gcc/testsuite/
* gnat.dg/fixed_delete.adb: New testcase.
From-SVN: r273205
Javier Miranda [Mon, 8 Jul 2019 08:13:20 +0000 (08:13 +0000)]
[Ada] Crash in interface derivation with null primitive
The frontend crashes processing the derivation of a tagged type whose
ultimate ancestor is an interface type I1 that has a null primitive,
implements another interface I2 derived from I2, and does not override
the null primitive.
2019-07-08 Javier Miranda <miranda@adacore.com>
gcc/ada/
* exp_disp.adb (Register_Primitive): When registering a
primitive in the secondary dispatch table, handle primitive
inherited through several levels of type derivation (required to
properly handle inherited 'null' primitive).
gcc/testsuite/
* gnat.dg/interface9.adb, gnat.dg/interface9_root-child.ads,
gnat.dg/interface9_root.ads: New testcase.
From-SVN: r273204
Bob Duff [Mon, 8 Jul 2019 08:13:16 +0000 (08:13 +0000)]
[Ada] Document handling of preprocessor directives in GNATpp
2019-07-08 Bob Duff <duff@adacore.com>
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Document handling of
preprocessor directives in GNATpp.
From-SVN: r273203
Javier Miranda [Mon, 8 Jul 2019 08:13:11 +0000 (08:13 +0000)]
[Ada] Code reorganization
This patch performs a code reorganization of the implementation of
pragma Compile_Time_Error. No functional change.
No test required.
2019-07-08 Javier Miranda <miranda@adacore.com>
gcc/ada/
* gnat1drv.adb (Post_Compilation_Validation_Checks:
Validate_Compile_Time_Warning_Errors is now located in sem_prag
(instead of sem_ch13).
* sem_ch13.ads (Validate_Compile_Time_Warning_Error,
Validate_Compile_Time_Warning_Errors): Move to sem_prag.
* sem_ch13.adb
(Compile_Time_Warnings_Errors): Move to sem_prag.
(Initialize): Remove initialization of table
Compile_Time_Warning_Errors.
(Validate_Compile_Time_Warning_Error,
Validate_Compile_Time_Warning_Errors): Move to sem_prag.
* sem_prag.ads (Validate_Compile_Time_Warning_Errors): New
procedure.
* sem_prag.adb (Initialize): Initialize table
Compile_Time_Warning_Errors.
From-SVN: r273202
Ed Schonberg [Mon, 8 Jul 2019 08:13:04 +0000 (08:13 +0000)]
[Ada] Crash on named actual in postcondition for generic subprogram
This patch fixes a crash on compiling the postcondtion for a generic
subprogram, when the postcondition is a call with both positional and
named parameter associations.
2019-07-08 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch13.adb (Analyze_Aspect_Specifications): For a
pre/postcondition of a generic subprogram declaration, do not
use Relocate_Node on the aspect expression to construct the
corresponding attribute specification, to prevent tree anomalies
when the expression is a call with named actual parameters.
gcc/testsuite/
* gnat.dg/predicate9.adb: New testcase.
From-SVN: r273201
Javier Miranda [Mon, 8 Jul 2019 08:13:00 +0000 (08:13 +0000)]
[Ada] Spurious error reported by pragma Compile_Time_Error
The compiler may trigger spurious errors on pragmas Compile_Time_Error
and Compile_Time_Warning when their boolean expression computes the size
of a type. After this patch the following test compiles fine.
with Interfaces; use Interfaces;
package Types is
type Arr is array (1 .. 6) of Unsigned_8
with Size => 48,
Alignment => 1;
type Rec is record
Comp_1 : Unsigned_32;
Comp_2 : Unsigned_16;
end record
with Size => 48,
Alignment => 1;
end Types;
with Types; use Types;
package Main is
pragma Compile_Time_Error
(Arr'Size = 12, "ERROR: Arr'Size is 48, not 12");
pragma Compile_Time_Error
(Arr'Size = 48, "OK: Arr");
pragma Compile_Time_Error
(Arr'Size /= 48, "ERROR: Arr'Size is 48");
pragma Compile_Time_Error
(Rec'Size = 34, "ERROR: Rec'Size is 48, not 34");
pragma Compile_Time_Error
(Rec'Size = 48, "OK: Rec");
pragma Compile_Time_Error
(Rec'Size /= 48, "ERROR: Rec'Size is 48");
end Main;
Command: gcc -c main.ads
Output: main.ads:7:07: OK: Arr
main.ads:14:07: OK: Rec
2019-07-08 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_attr.adb (Analyze_Attribute [Attribute_Size]): For pragmas
used to report user defined compile time warning or errors
handle 'Size for types with known static RM size.
From-SVN: r273200
Justin Squirek [Mon, 8 Jul 2019 08:12:55 +0000 (08:12 +0000)]
[Ada] Crash on Image and Value attributes
This patch fixes an issue whereby the creation of an enumeration within
package where Default_Scalar_Storage_Order is in effect may lead to a
crash when the attributes Image or Value are applied to objects of said
type or the type directly.
2019-07-08 Justin Squirek <squirek@adacore.com>
gcc/ada/
* exp_imgv.adb (Build_Enumeration_Image_Tables): Default SSO for
the building of image tables.
(Expand_Image_Attribute): Minor cleanup.
gcc/testsuite/
* gnat.dg/sso16.adb: New testcase.
From-SVN: r273199
Dmitriy Anisimkov [Mon, 8 Jul 2019 08:12:51 +0000 (08:12 +0000)]
[Ada] GNAT.Sockets: remove default level in Get/Set_Socket_Option
2019-07-08 Dmitriy Anisimkov <anisimko@adacore.com>
gcc/ada/
* libgnat/g-socket.ads, libgnat/g-socket.adb: Improve
documentation.
(Get_Socket_Option, Set_Socket_Option): Remove default value for
the Level formal.
From-SVN: r273198
Ed Schonberg [Mon, 8 Jul 2019 08:12:46 +0000 (08:12 +0000)]
[Ada] Spurious visibility error on dynamic_predicate aspect in generic
This patch fixes a spurious error when verifying that the visibility of
the expression of an aspect has not changed between the freeze point of
the entity to which it applies, and the end of the enclosing declarative
part. If the entity is a composite type its components must be made
directly visible for the analysis of the expression. In a generic
context this must be done explicitly at the end of the declarative part.
2019-07-08 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): For an
unanalized aspect in a generic context that has not been
analyzed yet, if the aspect applies to a type, place the type on
the scope stack to make its components visible, before checking
conformance with the version of the expression analyzed at the
freeze point.
gcc/testsuite/
* gnat.dg/predicate8.adb, gnat.dg/predicate8_pkg.adb,
gnat.dg/predicate8_pkg.ads: New testcase.
From-SVN: r273197
Kito Cheng [Mon, 8 Jul 2019 07:31:21 +0000 (07:31 +0000)]
Add myself to MAINTAINERS (Write After Approval)
From-SVN: r273195
Richard Biener [Mon, 8 Jul 2019 07:09:24 +0000 (07:09 +0000)]
re PR tree-optimization/83518 (Missing optimization: useless instructions should be dropped)
2019-07-08 Richard Biener <rguenther@suse.de>
PR tree-optimization/83518
* tree-ssa-sccvn.c: Include splay-tree.h.
(struct pd_range, struct pd_data): New.
(struct vn_walk_cb_data): Add data to track partial definitions.
(vn_walk_cb_data::~vn_walk_cb_data): New.
(vn_walk_cb_data::push_partial_def): New.
(pd_tree_alloc, pd_tree_dealloc, pd_range_compare): New.
(vn_reference_lookup_2): When partial defs are registered give up.
(vn_reference_lookup_3): Track partial defs for memset and
constructor zeroing and for defs from constants.
* gcc.dg/tree-ssa/ssa-fre-73.c: New testcase.
* gcc.dg/tree-ssa/ssa-fre-74.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-75.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-76.c: Likewise.
* g++.dg/tree-ssa/pr83518.C: Likewise.
From-SVN: r273194
Richard Sandiford [Mon, 8 Jul 2019 06:21:11 +0000 (06:21 +0000)]
Add a build config for bootstrapping at -Og
Although BOOT_CFLAGS can be used to bootstrap with -Og, having a
dedicated build config is sometimes more convenient.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
config/
* bootstrap-Og.mk: New file.
gcc/
* doc/install.texi (bootstrap-Og): Document.
From-SVN: r273193
Richard Sandiford [Mon, 8 Jul 2019 06:21:05 +0000 (06:21 +0000)]
Make guality.h handle Yama restricted ptrace mode
guality.exp is silently skipped on Linux systems with
kernel.yama.ptrace_scope=1 because gdb fails to attach to the
sanity check test. This patch uses PR_SET_PTRACER (where available)
to avoid this.
prctl was apparently added in Linux 2.1.57, so I don't think we
need any tests other than __linux for the #include.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
gcc/testsuite/
* gcc.dg/guality/guality.h: Include <sys/prctl.h> on Linux targets.
(main): Use PR_SET_PTRACER where available.
From-SVN: r273192
Richard Sandiford [Mon, 8 Jul 2019 06:20:55 +0000 (06:20 +0000)]
[riscv] Fix ambiguous .md attribute uses
This patch is part of a series that fixes ambiguous attribute
uses in .md files, i.e. cases in which attributes didn't use
<ITER:ATTR> to specify an iterator, and in which <ATTR> could
have different values depending on the iterator chosen.
No behavioural change -- produces the same code as before.
2019-07-08 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/riscv/pic.md (*local_pic_load_s<mode>)
(*local_pic_load_u<mode>): Explicitly specify the mode iterator
referenced by <mode>, giving...
(*local_pic_load_s<SUBX:mode>, *local_pic_load_u<SUBX:mode>): ...these.
* config/riscv/riscv.md (*sge<u>_<X:mode><GPR:mode>)
(*slt<u>_<X:mode><GPR:mode>, *sle<u>_<X:mode><GPR:mode>): Explicitly
use <X:MODE> for the mode attribute.
From-SVN: r273191
GCC Administrator [Mon, 8 Jul 2019 00:16:22 +0000 (00:16 +0000)]
Daily bump.
From-SVN: r273190
Jeff Law [Sun, 7 Jul 2019 18:42:45 +0000 (12:42 -0600)]
re PR tree-optimization/91090 (A suspicious code in tree-ssa-dom.c)
PR tree-optimization/91090
* tree-ssa-dom.c (simplify_stmt_for_jump_threading): Fix logic error
in handling of ranges to simplify switch statements.
From-SVN: r273184
Segher Boessenkool [Sun, 7 Jul 2019 16:37:36 +0000 (18:37 +0200)]
rs6000: Delete Ffre
It is unused.
* config/rs6000/rs6000.md (Ffre): Delete.
From-SVN: r273182
Iain Sandoe [Sun, 7 Jul 2019 16:34:15 +0000 (16:34 +0000)]
[Darwin] Make a final check on PIC options.
Final check on PCI options; for Darwin these are not dependent on the PIE
ones, although PIE does require PIC to support it. Specifically, for Darwin,
"fPIC fno-PIE" should result in the same as "-fno-PIE -fPIC".
2019-07-07 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_override_options): Make a final check on PIC
options.
From-SVN: r273181
Iain Sandoe [Sun, 7 Jul 2019 16:29:32 +0000 (16:29 +0000)]
[Darwin] Don't jam symbol stubs on for kernel code.
For PPC Darwin, we need the JBSR long jump code to be enabled when generating
kernel code. Now we have that handled in rs6000.c, we can drop the conflated
setting in the common code. Symbol stubs are not generated for any X86 case.
2019-07-07 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_override_options): Don't jam symbol stubs
on for kernel code.
From-SVN: r273180
Paul Thomas [Sun, 7 Jul 2019 10:53:37 +0000 (10:53 +0000)]
re PR fortran/91077 (Wrong indexing when using a pointer)
2019-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91077
* trans-array.c (gfc_conv_scalarized_array_ref) Delete code
that gave symbol backend decl for subref arrays and deferred
length variables.
2019-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/91077
* gfortran.dg/pointer_array_11.f90 : New test.
From-SVN: r273176
Richard Sandiford [Sun, 7 Jul 2019 09:49:24 +0000 (09:49 +0000)]
PR91068: Fix MIPS fallout from IRA matched operand changes
PR91068 is a case in which we have (ignoring non-LRA alternatives):
[(set (match_operand:SI 0 "register_operand" "=l,d?")
(plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d,d")
(match_operand:SI 2 "register_operand" "d,d"))
(match_operand:SI 3 "register_operand" "0,d")))
(clobber (match_scratch:SI 4 "=X,l"))
(clobber (match_scratch:SI 5 "=X,&d"))]
where the first alternative is one instruction but the second is two.
This is very similar to the case that my recent IRA patches were
supposed to help. The crucial difference is that the cheap
alternative requires a single-register class while the expensive
alternative uses general registers.
This makes a difference when one of operand 0 or 3 can naturally be
allocated to LO but the other can't. If IRA makes that allocation,
both alternatives require one reload of equal cost and so the first
alternative clearly wins.
However, if we say that tying operands 0 and 3 saves the cost of a full
move, then all other things being equal, IRA will prefer to allocate
both registers to the same GPR. The registers will then naturally
fit the second alternative.
This has a more drastic effect in the MIPS case than it should because
using the GPR alternative is much more expensive there than it appears
to the RA. But that's really a separate problem and something we were
able to live with before my IRA patch.
What makes tying less useful here is the fact that the tied register is
a single-register class. I think in those circumstances it's better not
to use tied operands at all and instead use "l" for the inputs.
Allocating the input to LO, and allocating the output to LO, then depend
naturally on class costs. If we decide to allocate at least one of them
to LO, we'll use the cheap alternative, otherwise we'll (correctly) use
the expensive alternative. This effectively restores the situation
before my IRA patch, but this time making the preference on the input
register more explicit.
I originally wrote the patterns in the early days of IRA, and certainly
well before LRA. I think they were largely influened by reload rather
than RA proper (see the comment above *mul_acc_si, which is all about
the reload behaviour). LRA copes with the two-"l" case just fine.
The patch may well cause problems for -mno-lra, but I think we should
cull that option anyway.
2019-07-07 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR target/91068
* config/mips/mips.md (*mul_acc_si, *mul_acc_si_r3900, *macc)
(*msac, *msac_using_macc, *mul_sub_si): Use "l" for input operands
instead of matching them to "l" output operands.
From-SVN: r273175
Richard Sandiford [Sun, 7 Jul 2019 09:49:14 +0000 (09:49 +0000)]
Fix uninitialised use in mips_split_move
While testing the fix for PR91068, I hit an rtl checking failure
while building newlib. mips_split_move was decomposing an address that
happened to be symbolic and then tried to access the REGNO of the base
register field, which wasn't initialised but which by chance pointed to
valid memory.
2019-07-07 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* config/mips/mips.c (mips_split_move): Zero-initialize addr
and check whether addr.reg is nonnull before using it.
From-SVN: r273174