Yannick Moy [Thu, 17 Feb 2022 07:58:30 +0000 (08:58 +0100)]
[Ada] Adapt body of formal sets and maps for SPARK
Remove violations of SPARK rules, to prepare for the proof of hashed
sets and maps:
- Make the type of hash tables not tagged, so that it will be possible
to mark the type of nodes as having relaxed initialization.
- Remove comparison of addresses as check or optimization: as a check,
it is not necessary in SPARK as the caller cannot pass in aliased
parameters in such cases; as an optimization, it is not possible in
SPARK code.
- Avoid aliasing when inserting a node in the hash table. The code for
insertion in sets and maps was explicitly aliasing a global for the
container and a parameter for its hash table component, both being
written. Rewrite the code to pass only the hash table as parameter.
- Insert constants for subtype constraints, which cannot depend on
variables in SPARK code.
- Use procedures instead of functions when side-effects are expected.
- Rename variables whose value is only written through calls and not
read, using Unused prefix, so that flow analysis does not warn about
it.
gcc/ada/
* libgnat/a-cfhama.adb (Generic_Allocate): Retype to avoid
aliasing.
(Assign, Move): Remove address comparison.
(Include): Insert constants for subtype constraints.
(Insert): Rewrite to avoid aliasing and function with side-effects.
* libgnat/a-cfhase.adb (Generic_Allocate): Retype to avoid
aliasing.
(Assign, Move): Remove address comparison.
(Difference, Intersection, Is_Subset, Overlap,
Symmetric_Difference, Union): Remove address comparison. Insert
constants for subtype constraints.
(Insert): Rewrite to avoid aliasing and function with
side-effects.
* libgnat/a-chtgfk.adb (Checked_Equivalent_Keys, Checked_Index,
Delete_Key_Sans_Free, Find, Generic_Replace_Element, Index):
Type for hash tables not tagged anymore.
(Generic_Conditional_Insert): New_Node generic formal is a
procedure taking the hash table as first parameter now, to avoid
aliasing in the caller.
* libgnat/a-chtgfk.ads: Same.
* libgnat/a-chtgfo.adb (Checked_Index, Clear,
Delete_Node_At_Index, Delete_Node_Sans_Free, First, Free,
Generic_Allocate, Generic_Iteration, Generic_Read,
Generic_Write, Index, Next): Type for hash tables not tagged
anymore.
(Generic_Equal): Removed tagged. Remove address comparison.
* libgnat/a-chtgfo.ads: Same.
* libgnat/a-cohata.ads (Hash_Table_Type): Remove tagged.
Yannick Moy [Wed, 16 Feb 2022 12:56:50 +0000 (13:56 +0100)]
[Ada] Remove dependency on tampering checks and controlled types for formal
Formal hashed sets and maps are now using a different type of hash table
that does not require controlled types. This is possible because formal
containers do not rely on tampering checks, as cursors do not hold a
pointer to a single matching container, but are logical indexes that can
be used with multiple containers.
For simplicity of the package organisation, and symmetry with other
versions of containers, add a formal version of hashed types in the
shared Ada.Containers.Hash_Tables unit. This unit should be specialized
to only include the formal version of hash tables for runtimes that
do not support controlled types (so that the dependency on
Ada.Containers.Helpers can be removed).
The new versions of units for generic keys and operations are modified
versions of the units for bounded containers, with all tampering checks
removed (they were no-op in formal containers). A declaration of
constant Checks is added at the start of the body, as these units cannot
use the version in Ada.Containers.Helpers.
gcc/ada/
* Makefile.rtl: Add new files.
* libgnat/a-cfhama.adb: Use formal version of hash tables.
* libgnat/a-cfhama.ads: Same.
* libgnat/a-cfhase.adb: Same.
* libgnat/a-cfhase.ads: Same.
* libgnat/a-chtgfk.adb: New unit for formal containers, modified
version of Generic_Bounded_Keys.
* libgnat/a-chtgfk.ads: Same.
* libgnat/a-chtgfo.adb: New unit for formal containers, modified
version of Generic_Bounded_Operations.
* libgnat/a-chtgfo.ads: Same.
* libgnat/a-cohata.ads (Generic_Formal_Hash_Table_Types): Third
version of the type for hash tables, equivalent to the bounded
version without tampering checks.
Javier Miranda [Sun, 27 Feb 2022 11:42:46 +0000 (11:42 +0000)]
[Ada] Ada ABI change when building with assertions
Compiling with and without assertions enabled the name of some generated
symbols differ; this is an issue when using pre-built libraries.
gcc/ada/
* freeze.adb (Check_Inherited_Conditions): Dispatch table
wrappers must be placed in the list of entities of their scope
at the same place of their wrapped primitive. This is required
for private types since these wrappers are built when their full
tagged type declaration is frozen but they may override a
primitive defined in the public part of the package (and it is
important to maintain the wrapper in the list of public entities
of the package to ensure their correct visibility).
Johannes Kanig [Thu, 24 Feb 2022 10:47:47 +0000 (19:47 +0900)]
[Ada] Take into account GNSA_ROOT env var for prefix
The GNSA_ROOT environment variable can be used to indicate to the
compiler how to find the runtime directory.
gcc/ada/
* osint.ads, osint.adb (Relocate_Path): If the GNSA_ROOT
environment variable is set, we use that as the prefix, instead
of computing the prefix from the executable location.
Steve Baird [Wed, 9 Feb 2022 01:43:14 +0000 (17:43 -0800)]
[Ada] Implement late initialization rules for type extensions
Default initialization of a record object is required to initialize any
components that "require late initialization" after other components.
This includes the case of a type extension; "late initialization"
components of the parent type are required to be initialized after
non-late-init extension components. This is implemented by generalizing
the use of an existing init proc parameter. Previously, the init proc
for a tagged type took a Boolean parameter indicating whether or not to
initialize the Tag component. With this change, this parameter can now
take on any of four values indicating whether to perform
1) Full initialization (including the tag component).
2) Full initialization except for the tag component.
3) Early (non-tag) initialization only.
4) Late (non-tag) initialization only.
With this change, the init proc for a type extension has the option of
performing the early and late portions of the parent's initialization
via two separate calls to the parent type's init proc.
gcc/ada/
* exp_ch3.ads (Build_Intialization_Call): Add new formal
parameter, Init_Control_Actual, with default value. Clients
outside of package Exp_Ch3 are unaffected.
* exp_ch3.adb (Initialization_Control): new package; support for
this 4-valued parameter. The existing Requires_Late_Init
function is moved into this new package.
(Build_Initialization_Call): Add new formal parameter for
subprogram body, use this new formal parameter in generating an
init proc call.
(Build_Record_Init_Proc): Replace Set_Tag Boolean formal
parameter with 4-valued Init_Control_Formal. Wrap if-statements
with appropriate conditions around tag initialization, early
initialization, and late initialization statements.
* exp_util.adb (Build_Task_Image_Decl): Avoid problem with
duplicate declarations when an init proc for a type extension
calls the parent type's init proc twice.
Ed Schonberg [Tue, 15 Feb 2022 14:38:42 +0000 (15:38 +0100)]
[Ada] Handle IN iterator for class-wide derived object of iterator type
The compiler currently rejects iterating on an interface type derived
from an iterator type.
See Ada RM 5.5.1(6/3) and 5.5.2(3/3).
gcc/ada/
* sem_ch5.adb (Analyze_Iterator_Specification): Fix Typ in the
case of a class-wide derived iterator.
Yannick Moy [Wed, 23 Feb 2022 11:58:42 +0000 (12:58 +0100)]
[Ada] Facilitate proof of Overwrite in bounded strings library
Consistently use >= operator in both the code and contracts of
function/procedure Overwrite, to facilitate proof, instead of the strict
inequality > sometimes, as only New_Item remains in the result in the
case of equal size too.
gcc/ada/
* libgnat/a-strbou.ads (Overwrite): Switch to >= operator in
contracts.
* libgnat/a-strsup.adb (Super_Overwrite): Switch to >= operator
in code of procedure (function already uses it).
* libgnat/a-strsup.ads (Super_Overwrite): Switch to >= operator
in contracts.
Etienne Servais [Wed, 23 Feb 2022 10:44:42 +0000 (11:44 +0100)]
[Ada] Fix code example on representation clause
The column is superfluous, component names are missing.
gcc/ada/
* doc/gnat_rm/representation_clauses_and_pragmas.rst: Fix code
snippet.
* gnat_rm.texi: Regenerate.
Eric Botcazou [Sat, 19 Feb 2022 11:30:47 +0000 (12:30 +0100)]
[Ada] Do not overwrite limited view of result type
This removes obsolete code that overwrites a limited view present as the
result type of a function during the tentative analysis of prefixed
views for function calls involving tagged types. The original view is
necessary for the code generator to break the circularity present in
this setup.
The change also adds a couple of guards for the illegal case where the
limited view is the only view available when the function is invoked.
gcc/ada/
* aspects.adb (Find_Value_Of_Aspect): Add guard.
* sem_ch4.adb (Complete_Object_Operation): Remove obsolete code.
* sem_ch5.adb (Has_Sec_Stack_Default_Iterator): Add guard.
Javier Miranda [Tue, 15 Feb 2022 18:39:42 +0000 (18:39 +0000)]
[Ada] Wrong address for class-wide interface access conversion
The compiler generates wrong code on instantiations of package
Address_To_Access_Conversions when the generic formal is a class-wide
interface type; this causes wrong dispatching calls when the
access-to-class-wide-interface object returned by To_Pointer is used to
dispatch a call.
gcc/ada/
* exp_attr.adb (Expand_N_Attribute_Reference): The expansion of
'Address in a call to an instantiation of the implicit
subprogram To_Pointer with a class-wide interface type target
requires adding an implicit type conversion to force
displacement of the "this" pointer.
Javier Miranda [Sun, 6 Feb 2022 11:23:53 +0000 (11:23 +0000)]
[Ada] Crash in task body reference to discriminant
The compiler may crash processing the successor or predecessor of a task
type discrete discriminant.
gcc/ada/
* sem_attr.adb (Resolve_Attribute): Ensure that attribute
expressions are resolved at this stage; required for preanalyzed
references to discriminants since their resolution (and
expansion) will take care of updating their Entity attribute to
reference their discriminal.
Justin Squirek [Mon, 31 Jan 2022 21:51:38 +0000 (21:51 +0000)]
[Ada] Improve expected type error messages
This patch improves error messages concerning type mismatches by
printing the actual expected type in more cases instead of the expected
type's first subtype.
gcc/ada/
* sem_util.adb (Wrong_Type): Avoid using the first subtype of
the expected type in error messages when the expected type is
not internally generated.
Alexandre Oliva [Wed, 9 Feb 2022 09:25:13 +0000 (06:25 -0300)]
[Ada] Document control flow redundancy
Add documentation about -fharden-control-flow-redundancy.
gcc/ada/
* doc/gnat_rm/security_hardening_features.rst: Add subsection on
Control Flow Redundancy.
* gnat_rm.texi: Regenerate.
Eric Botcazou [Thu, 17 Feb 2022 17:20:01 +0000 (18:20 +0100)]
[Ada] Fix compiler crash on FOR iteration scheme over container
The front-end drops a freeze node on the floor because it puts the node
into the Condition_Actions of an N_Iteration_Scheme of a FOR loop.
gcc/ada/
* exp_util.adb (Insert_Actions) <N_Iteration_Scheme>: Check that
it is a WHILE iteration scheme before using Condition_Actions.
Piotr Trojanek [Wed, 9 Feb 2022 21:32:19 +0000 (22:32 +0100)]
[Ada] Remove obsolete uses of Unchecked_Conversion from Ada 83
Similar to a recent removal of obsolete uses of Unchecked_Deallocation.
In Ada 83 the Unchecked_Conversion was a top-level unit; since Ada 95 it
is an obsolete renaming of Ada.Unchecked_Conversion. GNAT doesn't warn
yet about uses of these obsolete renamings, but it still seems better to
avoid them.
gcc/ada/
* atree.adb, gen_il-gen.adb, osint.adb, set_targ.adb,
sinput.adb, table.adb, treepr.adb, types.ads: Replace uses of
Unchecked_Conversion in the compiler itself.
* libgnarl/a-reatim.adb, libgnarl/s-osinte__gnu.ads,
libgnarl/s-osinte__kfreebsd-gnu.ads, libgnat/a-coboho.adb,
libgnat/a-stuten.ads, libgnat/s-putima.adb: Likewise in the
runtime.
* doc/gnat_ugn/gnat_and_program_execution.rst: Likewise in
documentation.
* gnat_ugn.texi: Regenerate.
Piotr Trojanek [Wed, 9 Feb 2022 12:01:11 +0000 (13:01 +0100)]
[Ada] Remove obsolete uses of Unchecked_Deallocation from Ada 83
In Ada 83 the Unchecked_Deallocation was a top-level unit; since Ada 95
it is an obsolete renaming of Ada.Unchecked_Deallocation. GNAT doesn't
yet warn about uses of these obsolete renamings, but it still seems
better to avoid them.
Cleanup before adding a new instance of Unchecked_Deallocation.
Offending occurrences found with grep.
gcc/ada/
* butil.adb, sem.adb, sinput.adb, types.ads, xref_lib.adb:
Replace uses of Unchecked_Deallocation with
Ada.Unchecked_Deallocation.
* doc/gnat_ugn/gnat_and_program_execution.rst: Likewise for the
documentation; fix casing of GNAT.IO.
* gnat_ugn.texi: Regenerate.
Marc Poulhiès [Tue, 15 Feb 2022 14:12:38 +0000 (15:12 +0100)]
[Ada] Fix the Ada 2022 iterated component association RM reference
Fix the error message pointing to the Ada reference section on mixed
iterated component association being forbidden. Remove useless loop.
gcc/ada/
* sem_aggr.adb (Resolve_Array_Aggregate): Fix ARM reference.
Remove useless loop.
Etienne Servais [Wed, 16 Feb 2022 17:49:01 +0000 (18:49 +0100)]
[Ada] Fix typo on "that"
gcc/ada/
* sem_ch3.adb (Analyze_Subtype_Declaration): Fix typo in
comment.
Justin Squirek [Wed, 15 Dec 2021 14:27:23 +0000 (14:27 +0000)]
[Ada] Spurious access error in function returning type with access discriminant
This patch fixes an issue in the compiler whereby incorrect
accessibility checks were generated in functions returning types with
unconstrained access discriminants when the value supplied for the
discriminant is a formal parameter.
More specifically, accessibility checks for return statements featuring
a result type having access discriminants were incorrectly being
performed against the level of the function declaration instead of the
level of the master of the call.
gcc/ada/
* sem_ch6.adb (Check_Return_Construct_Accessibility): Modify
generation of run-time accessibility checks to account for cases
where Extra_Accessibility_Of_Result should be used versus the
level of the enclosing subprogram. Use original node to avoid
checking against expanded code. Disable check generation for
tagged type case.
(Is_Formal_Of_Current_Function): Added to encompass a predicate
used within Check_Return_Construct_Accessibility to test if an
associated expression is related to a relevant formal.
* sem_util.adb, sem_util.ads (Enclosing_Subprogram): Modified to
accept Node_Or_Entity_Id.
(Innermost_Master_Scope_Depth): Calculate level based on the
subprogram of a return statement instead of the one returned by
Current_Subprogram.
(Needs_Result_Accessibility_Level): Remove
Disable_Coextension_Cases constant, and disable the tagged type
case for performance reasons.
Piotr Trojanek [Wed, 16 Feb 2022 11:13:57 +0000 (12:13 +0100)]
[Ada] Accept effectively volatile components in actuals
In SPARK we forbid names that are effectively volatile for reading if
they occur in actual subprogram parameters. We wrongly rejected
references to components, which are not names in Ada.
gcc/ada/
* sem_res.adb (Flag_Effectively_Volatile_Objects): Ignore
component and discriminant identifiers.
Piotr Trojanek [Wed, 16 Feb 2022 09:15:12 +0000 (10:15 +0100)]
[Ada] Remove redundant guard in checks for volatile actuals
When flagging names of volatile objects occurring in actual parameters
we guard against identifiers without entity. This is redundant, because
earlier in the resolution of actual parameters we already guard against
actuals with Any_Type.
Code cleanup related to handling of volatile components; behaviour is
unaffected.
gcc/ada/
* sem_res.adb (Flag_Effectively_Volatile_Objects): Remove
redundant guard.
Justin Squirek [Mon, 14 Feb 2022 20:51:49 +0000 (20:51 +0000)]
[Ada] Ineffective use type clause warnings cause compile time crash
This patch corrects an error in the compiler whereby the presence of a
generic instance featuring a use type clause at library level may cause
a crash at compile time when warnings for ineffective use clauses are
enabled and the type in question is already use visible.
gcc/ada/
* sem_ch8.adb (Determine_Package_Scope): Created to centralize
the calculation of which package a given use clause belongs to.
(Most_Descendant_Use_Clause): Modified to call
Determine_Package_Scope.
* sem_util.adb, sem_util.ads (Enclosing_Package): Modified to
handle both entity and node ids.
Christophe Lyon [Fri, 6 May 2022 17:30:51 +0000 (18:30 +0100)]
testsuite: Make AArch64 attributes_7.c generate unique report lines.
This test is executed in both C and C++ modes, lines 98 and 100 pass
in C++ and are xfail in C.
This results in similar lines in gcc.sum and g++.sum, differing by the
PASS or XFAIL prefix, which confuses compare_test: it reports these
tests twice, as "now fail, but worked before" and "now work, but
didn't before". To make the diagnostic different betweek C and C++, I
use $tool in the dg-error comment field.
2022-05-13 Christophe Lyon <christophe.lyon@arm.com>
gcc/testsuite/
* gcc.target/aarch64/sve/acle/general/attributes_7.c: Make
diagnostic unique.
Richard Biener [Thu, 12 May 2022 06:24:12 +0000 (08:24 +0200)]
Make gimple_build main workers more flexible
The following makes the main gimple_build API take a
gimple_stmt_iterator, whether to insert before or after and
an iterator update argument to make it more convenient to use
in certain situations (see the tree-vect-generic.cc hunks for
an example). It also makes the case we insert into the IL
somewhat distinct from inserting into a standalone sequence in
that it simplifies built expressions the same way as inserting
and calling fold_stmt (..., follow_all_ssa_edges) would. When
inserting into a standalone sequence we restrict simplification
to defs within the currently building sequence.
The patch only amends the tree_code gimple_build API, I will
followup with converting the rest as well. The patch got larger
than intended because the template forwarders now use gsi_last
which introduces a dependency on gimple-iterator.h requiring
mass #include re-org across the tree. There are two frontend
specific files including gimple-fold.h just for some padding
clearing stuff - I've removed the include and instead moved
the declarations to fold-const.h (but not the implementations).
Otherwise I'd have to include half of the middle-end headers in
those files which I didn't much like.
2022-05-12 Richard Biener <rguenther@suse.de>
gcc/cp/
* constexpr.cc: Remove gimple-fold.h include.
gcc/c-family/
* c-omp.cc: Remove gimple-fold.h include.
gcc/analyzer/
* supergraph.cc: Re-order gimple-fold.h include.
gcc/
* gimple-fold.cc (gimple_build): Adjust for new
main API.
* gimple-fold.h (gimple_build): New main APIs with
iterator, insert direction and iterator update.
(gimple_build): New forwarder template.
(clear_padding_type_may_have_padding_p): Remove.
(clear_type_padding_in_mask): Likewise.
(arith_overflowed_p): Likewise.
* fold-const.h (clear_padding_type_may_have_padding_p): Declare.
(clear_type_padding_in_mask): Likewise.
(arith_overflowed_p): Likewise.
* tree-vect-generic.cc (gimplify_build3): Use main gimple_build API.
(gimplify_build2): Likewise.
(gimplify_build1): Likewise.
* ubsan.cc (ubsan_expand_ptr_ifn): Likewise, avoid extra
compare stmt.
* gengtype.cc (open_base_files): Re-order includes.
* builtins.cc: Re-order gimple-fold.h include.
* calls.cc: Likewise.
* cgraphbuild.cc: Likewise.
* cgraphunit.cc: Likewise.
* config/rs6000/rs6000-builtin.cc: Likewise.
* config/rs6000/rs6000-call.cc: Likewise.
* config/rs6000/rs6000.cc: Likewise.
* config/s390/s390.cc: Likewise.
* expr.cc: Likewise.
* fold-const.cc: Likewise.
* function-tests.cc: Likewise.
* gimple-match-head.cc: Likewise.
* gimple-range-fold.cc: Likewise.
* gimple-ssa-evrp-analyze.cc: Likewise.
* gimple-ssa-evrp.cc: Likewise.
* gimple-ssa-sprintf.cc: Likewise.
* gimple-ssa-warn-access.cc: Likewise.
* gimplify.cc: Likewise.
* graphite-isl-ast-to-gimple.cc: Likewise.
* ipa-cp.cc: Likewise.
* ipa-devirt.cc: Likewise.
* ipa-prop.cc: Likewise.
* omp-low.cc: Likewise.
* pointer-query.cc: Likewise.
* range-op.cc: Likewise.
* tree-cfg.cc: Likewise.
* tree-if-conv.cc: Likewise.
* tree-inline.cc: Likewise.
* tree-object-size.cc: Likewise.
* tree-ssa-ccp.cc: Likewise.
* tree-ssa-dom.cc: Likewise.
* tree-ssa-forwprop.cc: Likewise.
* tree-ssa-ifcombine.cc: Likewise.
* tree-ssa-loop-ivcanon.cc: Likewise.
* tree-ssa-math-opts.cc: Likewise.
* tree-ssa-pre.cc: Likewise.
* tree-ssa-propagate.cc: Likewise.
* tree-ssa-reassoc.cc: Likewise.
* tree-ssa-sccvn.cc: Likewise.
* tree-ssa-strlen.cc: Likewise.
* tree-ssa.cc: Likewise.
* value-pointer-equiv.cc: Likewise.
* vr-values.cc: Likewise.
gcc/testsuite/
* gcc.dg/plugin/diagnostic_group_plugin.c: Reorder or remove
gimple-fold.h include.
* gcc.dg/plugin/diagnostic_plugin_show_trees.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_inlining.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_metadata.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_paths.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c:
Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c: Likewise.
* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c:
Likewise.
* gcc.dg/plugin/finish_unit_plugin.c: Likewise.
* gcc.dg/plugin/ggcplug.c: Likewise.
* gcc.dg/plugin/must_tail_call_plugin.c: Likewise.
* gcc.dg/plugin/one_time_plugin.c: Likewise.
* gcc.dg/plugin/selfassign.c: Likewise.
* gcc.dg/plugin/start_unit_plugin.c: Likewise.
* g++.dg/plugin/selfassign.c: Likewise.
Alexandre Oliva [Wed, 11 May 2022 07:27:42 +0000 (04:27 -0300)]
[PR105455] Set edge probabilities when hardening conditionals
When turning unconditional edges into conditional, as in
gimple-harden-conditionals.cc:insert_check_and_trap, the newly-created
edge's probability comes out uninitialized, while the previously
unconditional edge's probability is presumably
profile_probability::always.
Mixing initialized and uninitialized probabilities before expand
breaks predict.cc:force_edge_cold: the initialized probability may end
up copied to a REG_BR_PROB note in a conditional branch insn, but if
force_edge_cold is called on that edge, it will find another edge with
uninitialized probability and assume the note is absent. Later on,
rtl_verify_edges complains that the note does not match the
probability modified by force_edge_cold in the edge.
This patch sets probabilities for edges affected by hardening of
conditionals, both the newly-created edges to trap blocks and the
previously-unconditional edges, so that the former are considered
never taken, while the latter are confirmed as always taken.
for gcc/ChangeLog
PR rtl-optimization/105455
* gimple-harden-conditionals.cc (insert_check_and_trap): Set
probabilities for newly-conditional edges.
for gcc/testsuite/ChangeLog
PR rtl-optimization/105455
* gcc.dg/pr105455.c: New.
liuhongt [Fri, 8 Apr 2022 03:26:46 +0000 (11:26 +0800)]
Strip of a vector load which is only used partially.
Optimize
_4 = VEC_PERM_EXPR <_1, _1, { 4, 5, 6, 7, 4, 5, 6, 7 }>;
_5 = BIT_FIELD_REF <_4, 128, 0>;
to
_5 = BIT_FIELD_REF <_1, 128, 128>;
gcc/ChangeLog:
PR tree-optimization/102583
* tree-ssa-forwprop.cc (simplify_bitfield_ref): Extended to a
contiguous stride in the VEC_PERM_EXPR.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr102583.c: New test.
* gcc.target/i386/pr92645-2.c: Adjust testcase.
* gcc.target/i386/pr92645-3.c: Ditto.
GCC Administrator [Fri, 13 May 2022 00:16:30 +0000 (00:16 +0000)]
Daily bump.
Patrick Palka [Thu, 12 May 2022 20:52:06 +0000 (16:52 -0400)]
c++: tighten TMPL_ARGS_LEVEL macro
This patch makes TMPL_ARGS_LEVEL verify the level argument is valid when
the one-dimensional vector case. Doing so uncovered a couple of latent
issues: in try_class_unification, we weren't correctly copying targs
when it's two-dimensional, and in unify_pack_expansion it seems an
inequality test needs to be reversed. This patch fixes both issues, and
in passing makes the former function free the temporary copy of targs.
gcc/cp/ChangeLog:
* cp-tree.h (TMPL_ARGS_LEVEL): Assert LEVEL is 1 when
TMPL_ARGS_HAVE_MULTIPLE_LEVELS is false.
* pt.cc (try_class_unification): Correctly copy multidimensional
targs. Free the copy of targs.
(unify_pack_expansion): Fix level comparison.
David Edelsohn [Thu, 12 May 2022 18:47:35 +0000 (14:47 -0400)]
testsuite: PPC vector double requires VSX
pr101168.C uses __vector double, which requires VSX, not just Altivec.
This patch invokes the testcase with the -mvsx option.
* g++.target/powerpc/pr101168.C: Require VSX.
Jonathan Wakely [Thu, 12 May 2022 16:37:33 +0000 (17:37 +0100)]
libstdc++: Remove whitespace before preprocessor directives
These are harmless, but also unnecessary and inconsistent (and their
removal was requested by PR libstdc++/17632).
libstdc++-v3/ChangeLog:
* config/locale/dragonfly/numeric_members.cc: Remove whitespace.
* config/locale/gnu/numeric_members.cc: Likewise.
* include/bits/locale_facets_nonio.h: Likewise.
* libsupc++/typeinfo: Likewise.
Thomas Schwinge [Thu, 5 May 2022 21:01:36 +0000 (23:01 +0200)]
Refactor '-ldl' handling for libgomp proper and plugins
Instead of implicit global 'LIBS="-ldl $LIBS"' via 'AC_CHECK_LIB', make
'-ldl' explicit for libgomp proper, and clean up 'PLUGIN_GCN_LIBS',
'PLUGIN_NVPTX_LIBS' accordingly.
libgomp/
* Makefile.am (libgomp_la_LIBADD): Initialize.
* plugin/configfrag.ac (DL_LIBS): New.
(PLUGIN_GCN_LIBS): Remove.
(PLUGIN_NVPTX_LIBS): Don't set in the 'PLUGIN_NVPTX_DYNAMIC' case.
* plugin/Makefrag.am (libgomp_la_LIBADD)
(libgomp_plugin_gcn_la_LIBADD): Consider '$(DL_LIBS)'.
(libgomp_plugin_nvptx_la_LIBADD) <PLUGIN_NVPTX_DYNAMIC>: Likewise.
* Makefile.in: Regenerate.
* config.h.in: Likewise.
* configure: Likewise.
* testsuite/Makefile.in: Likewise.
Richard Biener [Thu, 12 May 2022 12:03:32 +0000 (14:03 +0200)]
rtl-optimization/105577 - RTL DSE and non-call EH
When one of the first two stages of DSE removes a throwing stmt
we have to purge dead EH edges before the DF re-analyze fires off
a fast DCE since that cannot cope with the situation.
2022-05-12 Richard Biener <rguenther@suse.de>
PR rtl-optimization/105577
* dse.cc (rest_of_handle_dse): Make sure to purge dead EH
edges before running fast DCE via df_analyze.
Piotr Trojanek [Wed, 16 Feb 2022 12:01:36 +0000 (13:01 +0100)]
[Ada] Skip postponed validation checks with compilation errors
If there are compilation errors then gigi doesn't backannotate the AST
with sizes, alignment, etc. The postponed compilation validation checks
can then easily crash or give spurious errors. We now just skip them.
gcc/ada/
* gnat1drv.adb (Gnat1drv): Skip postponed checks when there are
errors.
Arnaud Charlet [Wed, 16 Feb 2022 11:23:24 +0000 (11:23 +0000)]
[Ada] Fix URL in doc
gcc/ada/
* doc/gnat_ugn/the_gnat_compilation_model.rst: Fix URL.
* gnat_ugn.texi: Regenerate.
Bob Duff [Mon, 14 Feb 2022 21:00:55 +0000 (16:00 -0500)]
[Ada] Restore double quotes in debug printouts
A previous change in "Make debug printouts more robust" accidentally
removed double quotes around identifiers in debug printouts. This patch
restores those. So for example, we have:
Prev_Entity = Node #10 N_Defining_Identifier "foo" (Entity_Id=795)
and not:
Prev_Entity = Node #10 N_Defining_Identifier foo (Entity_Id=795)
This affects the output of -gnatdt, and certain calls normally done from
gdb.
gcc/ada/
* namet.ads, namet.adb (Write_Name_For_Debug): Add Quote
parameter to allow conditional addition of quotes. Note that
some calls to Write_Name_For_Debug, for example for file names,
shouldn't have quotes, as in some_package.adb:123:45.
* treepr.adb (Print_Name): Add double quotes around the name
using the above Quote parameters.
Piotr Trojanek [Wed, 16 Feb 2022 09:00:02 +0000 (10:00 +0100)]
[Ada] Reuse collective subtype for comparison operators where possible
Replace membership alternatives with N_Op_Compare. Code cleanup;
semantics is unaffected.
gcc/ada/
* sem_res.adb (Resolve_Actuals): Simplify with N_Op_Compare.
* sem_util.adb (Replace_Null_Operand,
Null_To_Null_Address_Convert_OK): Likewise.
Piotr Trojanek [Tue, 15 Feb 2022 16:59:10 +0000 (17:59 +0100)]
[Ada] Remove unreferenced Is_Selector_Name routine
Function Is_Selector_Name was added in 1995 while experimenting with
default expressions in record declarations. This experiment was
abandoned after one day and this routine was never used since then.
gcc/ada/
* sem_util.ads (Is_Selector_Name): Remove spec.
* sem_util.adb (Is_Selector_Name): Remove body.
Arnaud Charlet [Mon, 14 Feb 2022 08:19:50 +0000 (03:19 -0500)]
[Ada] Add more dummy names in Sem_Warn.Has_Junk_Name
To sync the names used in CodePeer (and SPARK) when filtering out
warnings on e.g. unused variables.
gcc/ada/
* sem_warn.adb (Has_Junk_Name): Add more dummy names.
Piotr Trojanek [Fri, 11 Feb 2022 13:31:39 +0000 (14:31 +0100)]
[Ada] Fix warning about generic subprograms withed but not referenced
For warnings about unreferenced entities and unused WITH clauses we
typically exclude references outside of the extended main source unit.
However, we include references to variables of formal private types to
warn in the instance if the corresponding type is not a fully
initialized type.
This special case was unnecessarily applied to references to other
entities of formal private types. In particular, we applied it to the
references to generic functions, where the full initialization of the
formal private type doesn't matter.
As an extreme example, this special case was unnecessarily applied to
"pragma Pure (Unchecked_Conversion)" in the runtime unit.
gcc/ada/
* lib-xref.adb (Generate_Reference): Fix comment and implement
it precisely.
Piotr Trojanek [Fri, 11 Feb 2022 09:40:32 +0000 (10:40 +0100)]
[Ada] Fix warning about generic subprograms withed but not instantiated
The compiler should warn when a generic subprogram unit is withed but
not instantiated by the current main unit. This warning relies on flag
Is_Instantiated, which was wrongly set when the generic unit was also
withed and instantiated by some other unit.
This change merely reverts a fix done 20 years ago, which worked around
some spurious warning emitted with inlining enabled. Now the
Is_Instantiated flag is set similarly for generic subprograms and
generic packages.
gcc/ada/
* atree.adb, atree.ads: Move WITH clause from spec to body; to
prevent new warnings stopping the bootstrap.
* fmap.adb, fname-sf.adb, libgnat/a-direct.adb,
libgnat/s-bignum.adb: Remove unnecessary WITH clauses; to
prevent new warnings stopping the bootstrap.
* sem_ch12.adb (Analyze_Subprogram_Instantiation): Only set
Is_Instantiated flag when the instance is in the extended main
source unit.
Yannick Moy [Fri, 11 Feb 2022 08:02:42 +0000 (09:02 +0100)]
[Ada] Remove useless pragma Warnings Off from runtime units
GNAT does not issue a warning anymore on a postcondition of True (used
here to prevent inining inside GNATprove for proof).
gcc/ada/
* libgnat/s-valuei.ads: Remove pragma Warnings Off.
* libgnat/s-valueu.ads: Same.
* libgnat/s-valuti.ads: Same.
Yannick Moy [Thu, 10 Feb 2022 11:36:52 +0000 (12:36 +0100)]
[Ada] Do not issue a warning on a postcondition of True or False
Do not issue a warning about the postcondition of a function not
mentioning its result when this postcondition is statically True or
False, as this is a specification of non-termination (for value False)
or a hint to SPARK prover for not inlining an expression function (for
value True). In any case, the warning brings no value here.
gcc/ada/
* sem_util.adb (Check_Result_And_Post_State): Exempt trivial
post.
Arnaud Charlet [Sun, 6 Feb 2022 16:06:36 +0000 (16:06 +0000)]
[Ada] Remove front-end SJLJ processing
We no longer use the so called front-end SJLJ exception mechanism, so
get rid of it.
gcc/ada/
* ali.adb, ali.ads, bcheck.adb, exp_ch11.adb, fe.h,
gnat1drv.adb, opt.adb, opt.ads, targparm.adb, targparm.ads,
lib-writ.adb: Get rid of Frontend_Exceptions processing.
* libgnat/system-aix.ads, libgnat/system-darwin-arm.ads,
libgnat/system-darwin-ppc.ads, libgnat/system-darwin-x86.ads,
libgnat/system-djgpp.ads, libgnat/system-dragonfly-x86_64.ads,
libgnat/system-freebsd.ads, libgnat/system-hpux-ia64.ads,
libgnat/system-hpux.ads, libgnat/system-linux-alpha.ads,
libgnat/system-linux-arm.ads, libgnat/system-linux-hppa.ads,
libgnat/system-linux-ia64.ads, libgnat/system-linux-m68k.ads,
libgnat/system-linux-mips.ads, libgnat/system-linux-ppc.ads,
libgnat/system-linux-riscv.ads, libgnat/system-linux-s390.ads,
libgnat/system-linux-sh4.ads, libgnat/system-linux-sparc.ads,
libgnat/system-linux-x86.ads, libgnat/system-lynxos178-ppc.ads,
libgnat/system-lynxos178-x86.ads, libgnat/system-mingw.ads,
libgnat/system-qnx-aarch64.ads, libgnat/system-rtems.ads,
libgnat/system-solaris-sparc.ads,
libgnat/system-solaris-x86.ads,
libgnat/system-vxworks-arm-rtp-smp.ads,
libgnat/system-vxworks-arm-rtp.ads,
libgnat/system-vxworks-arm.ads,
libgnat/system-vxworks-e500-kernel.ads,
libgnat/system-vxworks-e500-rtp-smp.ads,
libgnat/system-vxworks-e500-rtp.ads,
libgnat/system-vxworks-ppc-kernel.ads,
libgnat/system-vxworks-ppc-rtp-smp.ads,
libgnat/system-vxworks-ppc-rtp.ads,
libgnat/system-vxworks-x86-kernel.ads,
libgnat/system-vxworks-x86-rtp-smp.ads,
libgnat/system-vxworks-x86-rtp.ads,
libgnat/system-vxworks7-aarch64-rtp-smp.ads,
libgnat/system-vxworks7-aarch64.ads,
libgnat/system-vxworks7-arm-rtp-smp.ads,
libgnat/system-vxworks7-arm.ads,
libgnat/system-vxworks7-e500-kernel.ads,
libgnat/system-vxworks7-e500-rtp-smp.ads,
libgnat/system-vxworks7-e500-rtp.ads,
libgnat/system-vxworks7-ppc-kernel.ads,
libgnat/system-vxworks7-ppc-rtp-smp.ads,
libgnat/system-vxworks7-ppc-rtp.ads,
libgnat/system-vxworks7-ppc64-kernel.ads,
libgnat/system-vxworks7-ppc64-rtp-smp.ads,
libgnat/system-vxworks7-x86-kernel.ads,
libgnat/system-vxworks7-x86-rtp-smp.ads,
libgnat/system-vxworks7-x86-rtp.ads,
libgnat/system-vxworks7-x86_64-kernel.ads,
libgnat/system-vxworks7-x86_64-rtp-smp.ads: Remove
Frontend_Exceptions line.
* gcc-interface/decl.cc, gcc-interface/trans.cc
(gnat_to_gnu_entity, gnat_to_gnu_subprog_type, gigi,
gnat_to_gnu): Remove Front_End_SJLJ processing and always assume
Back_End_Exceptions.
Bob Duff [Thu, 10 Feb 2022 19:55:32 +0000 (14:55 -0500)]
[Ada] Make debug printouts more robust
This patch improves some debug printouts so that they avoid crashing on
invalid data.
In addition, the relevant code uses Global_Name_Buffer all over the
place. This patch cleans up some of those uses, in particular ones in
the same code as the robustness changes, and code called by that code.
gcc/ada/
* namet.ads, namet.adb (Write_Name_For_Debug): New more-robust
version of Write_Name.
(Destroy_Global_Name_Buffer): New procedure to help detect bugs
related to use of Global_Name_Buffer. Misc cleanup and comment
improvements. E.g. we don't need to document every detail of
debugging printouts, especially since they can change.
* uname.ads, uname.adb (Write_Unit_Name_For_Debug): New
more-robust version of Write_Unit_Name.
(Get_Unit_Name_String): Pass buffer in, instead of using the
global variable. Misc cleanup. Remove the "special fudge", which
is apparently not needed, and anyway the comment "the %s or %b
has already been eliminated" seems wrong.
(Write_Unit_Name): Call the new version of Get_Unit_Name_String.
* errout.adb (Set_Msg_Insertion_Unit_Name): Call the new version
of Get_Unit_Name_String. We pass the global variable here,
because it's too much trouble to disentangle such uses in
Errout.
* sem_util.ads, sem_util.adb, sem_dist.adb
(Get_Library_Unit_Name): New version of
Get_Library_Unit_Name_String that avoids usage of the global
variable.
* casing.ads, casing.adb, exp_prag.adb, exp_util.adb
(Set_All_Upper_Case): Remove. There is no need for a wrapper
here -- code is clearer without it.
* treepr.adb (Print_Name): Call Write_Name_For_Debug, which
deals with No_Name (etc), rather than duplicating that here.
Note that the call to Get_Name_String was superfluous.
(Tree_Dump): Call Write_Unit_Name_For_Debug instead of
Write_Unit_Name, which crashes if not Is_Valid_Name.
* erroutc.ads: Improve comments.
* erroutc.adb (Set_Msg_Name_Buffer): Call
Destroy_Global_Name_Buffer to detect potential bugs where it
incorrectly looks at the global variable.
* sinput.adb (Write_Location): Call Write_Name_For_Debug instead
of Write_Name, so it won't blow up on invalid data.
* sinput.ads: Improve comments; remove some verbosity.
* libgnat/s-imagef.adb: Fix typo in comment.
Yannick Moy [Thu, 10 Feb 2022 10:54:44 +0000 (11:54 +0100)]
[Ada] Add ghost code to facilitate proof with SPARK
Proof of generic units for Long_Long_Long_Unsigned instantiations is
harder for provers, as they have to deal with larger values. Add ghost
code to make the proof easier.
gcc/ada/
* libgnat/s-imageu.adb (Set_Image_Unsigned): Add lemma.
* libgnat/s-valueu.adb (Scan_Raw_Unsigned): Add assertion.
Yannick Moy [Thu, 10 Feb 2022 09:31:05 +0000 (10:31 +0100)]
[Ada] Remove use of use-clauses in loaded runtime units
The spec of runtime units that may be loaded by the compiler should not
contain use-clauses, for visibility to be correctly handled. Remove
use-clauses that were introduced for the ghost big integers unit as part
of the proof of runtime units.
gcc/ada/
* libgnat/s-aridou.ads: Remove use-clause, add renames and
subtypes.
* libgnat/s-exponn.ads: Same.
* libgnat/s-expont.ads: Same.
* libgnat/s-widthu.ads: Same.
Etienne Servais [Tue, 8 Feb 2022 11:17:48 +0000 (12:17 +0100)]
[Ada] Fix support for ISO-8859-15 and IBM CP 850 encoding
In ISO-8859-15, code for "lower y with diaeresis" is used for the upper
case. In IBM CP 850, upper and lower o with stroke were missing.
gcc/ada/
* csets.adb (Fold_Latin_9): Fix y with diaeresis.
(Fold_IBM_PC_850): Fix o with stroke.
Piotr Trojanek [Wed, 9 Feb 2022 16:40:48 +0000 (17:40 +0100)]
[Ada] Remove redundant guard against Any_String
A sequence of checks for a valid Boolean argument fails when applied to
Any_String because its component is not of a Boolean type. The explicit
guard was unnecessary; it was only needed when a First_Index applied to
Any_String would crash, but this was fixed soon after this guard was
added.
Cleanup related to recent fixes for resolution of Boolean operators.
gcc/ada/
* sem_type.adb (Valid_Boolean_Arg): Remove redundant guard.
Piotr Trojanek [Wed, 9 Feb 2022 16:15:27 +0000 (17:15 +0100)]
[Ada] Accept raise expressions as operands of boolean operators
This patch restores the previous behaviour of a recently rewritten
routine Sem_Ch4.Find_Boolean_Types for boolean operators where one of
the operands is a raise-expression, e.g.:
(raise Program_Error or else (X /= Y))
This change is required for the Entity field of the "or else" operator
to be set. For GNAT it doesn't matter, but GNATprove requires this field
to be set.
The affected call sequence starts at Find_Boolean_Types, goes via
Check_Right_Argument and Check_Boolean_Pair to Valid_Boolean_Arg, which
ultimately guards a call to Add_One_Interp.
gcc/ada/
* sem_type.adb (Valid_Boolean_Arg): Operands of Raise_Type are
valid boolean arguments.
Eric Botcazou [Wed, 9 Feb 2022 16:16:09 +0000 (17:16 +0100)]
[Ada] Plug loophole in Possible_Type_For_Conditional_Expression
We need to check that the designated subprograms of access-to-subprogram
types are subtype conformant before registering a common interpretation.
gcc/ada/
* sem_ch4.adb (Possible_Type_For_Conditional_Expression): Add
test for subtype conformance in the cases of
access-to-subprogram types.
Yannick Moy [Tue, 8 Feb 2022 17:04:49 +0000 (18:04 +0100)]
[Ada] Adapt CodePeer analysis of GNAT to changes in dependencies
New dependencies in s-imagei are causing issues for CodePeer analysis
of GNAT source and libs. Updating the setup.
gcc/ada/
* libgnat/s-imagef.adb: Justify false message from CodePeer.
Eric Botcazou [Mon, 7 Feb 2022 10:44:29 +0000 (11:44 +0100)]
[Ada] Revamp analysis of conditional expressions
The current implementation is skewed toward the first dependent
expression and does not look into the interpretations of the others if
the first one is not overloaded, which can create spurious ambiguities.
And more precise error messages are now given if the types of the
dependent expressions are not compatible.
gcc/ada/
* sem_ch4.adb (Analyze_Case_Expression): Rewrite.
(Analyze_If_Expression): Likewise.
(Possible_Type_For_Conditional_Expression): New function.
* sem_type.adb (Specific_Type): Retur the base type in more
cases.
Yannick Moy [Fri, 4 Feb 2022 14:20:20 +0000 (15:20 +0100)]
[Ada] Proof of 'Image support for signed integers
Prove System.Image_I, similarly to the proof done for System.Image_U.
The contracts make the connection between the result of Image_Integer,
the available space computed with System.Width_U and the result of
'Value as computed by Value_Integer.
I/O units that now depend on non-pure units are also marked not Pure
anymore.
gcc/ada/
* libgnat/s-imagef.adb: Adapt to new signature of Image_I, by
providing ghost imported subprograms. For now, no contract is
used on these subprograms, as System.Image_F is not proved.
* libgnat/s-imagef.ads: Add modular type Uns as formal
parameter, to use in defining Int_Params for instantiating
Image_I.
* libgnat/s-imagei.adb: Add contracts and ghost code.
* libgnat/s-imagei.ads: Replace Int formal parameter by package
Int_Params, which bundles type Int and Uns with ghost
subprograms. Add contracts.
* libgnat/s-imfi128.ads: Adapt to new formal of Image_F.
* libgnat/s-imfi32.ads: Adapt to new formal of Image_F.
* libgnat/s-imfi64.ads: Adapt to new formal of Image_F.
* libgnat/s-imgint.ads: Adapt to new formals of Image_I.
* libgnat/s-imglli.ads: Adapt to new formals of Image_I.
* libgnat/s-imgllli.ads: Adapt to new formals of Image_I.
* libgnat/s-valint.ads: Adapt to new formals of Value_I.
* libgnat/s-vallli.ads: Adapt to new formals of Value_I.
* libgnat/s-valllli.ads: Adapt to new formals of Value_I.
* libgnat/s-valuei.adb (Prove_Scan_Only_Decimal_Ghost): New
ghost lemma.
* libgnat/s-valuei.ads: New formal parameters to prove the new
lemma.
* libgnat/s-valuti.ads (Int_Params): Define a generic package to
be used as a trait-like formal parameter in Image_I and other
generics that need to instantiate Image_I.
* libgnat/s-widthu.ads (Big_10): Qualify the 10 literal.
Eric Botcazou [Fri, 4 Feb 2022 17:53:43 +0000 (18:53 +0100)]
[Ada] Rewrite Sem_Ch4.Find_Boolean_Types
Using a straight implementation like the one in Find_Arithmetic_Types.
gcc/ada/
* sem_ch4.adb (Find_Arithmetic_Types): Use local variables.
(Find_Boolean_Types): Rewrite modeled on Find_Arithmetic_Types.
Alexandre Oliva [Fri, 4 Feb 2022 02:00:09 +0000 (23:00 -0300)]
[Ada] Introduce hardbool Machine_Attribute for Ada
Implement and document hardened booleans, from nonstandard boolean types
with representation clauses to the extra validity checking performed on
boolean types annotated with the "hardbool" Machine_Attribute pragma.
gcc/ada/
* doc/gnat_rm/security_hardening_features.rst (Hardened
Booleans): New.
* exp_util.adb (Adjust_Condition): Perform validity checking on
hardbool-annotated types even with -gnatVT.
* gnat_rm.texi: Regenerate.
* gcc-interface/utils.cc (gnat_internal_attribute_table): Ignore
hardbool.
Piotr Trojanek [Fri, 4 Feb 2022 19:56:51 +0000 (20:56 +0100)]
[Ada] Fix scope of block in expanded protected entry body
We expand protected entry body into procedure with a nested block. The
scope of this block is naturally the enclosing procedure. However, the
scope field was wrongly set to the entity of the enclosing procedure
body (i.e. E_Subprogram_Body); now it is set to the entity of the
enclosing procedure spec (i.e. E_Procedure).
In general, the scope field should always points to spec, even for
entities that are syntactically nested within a program unit body. The
scope set to E_Subprogram_Body entity was only accepted because in gigi
we had a protection for that, but this protection is now removed.
This patch fixes a regression in a ravenscar testsuite test (c_rf02_06),
where GNAT was crashing when compiling in configurable runtime mode with
restriction No_Exception_Propagation.
gcc/ada/
* exp_ch9.adb (Build_Protected_Entry): Set scope of the nested
block to spec and not the body of the procedure created for a
protected entry.
Etienne Servais [Mon, 7 Feb 2022 14:34:01 +0000 (15:34 +0100)]
[Ada] Fix typo in comment
gcc/ada/
* sem_ch3.adb (Find_Type_Of_Object): Remove duplicate "i" in
comment.
Marc Poulhiès [Fri, 28 Jan 2022 15:55:43 +0000 (16:55 +0100)]
[Ada] Fix style checking rule for square brackets in Ada 2022 and above
The square bracket syntax introduced in Ada 2022 was incorrectly handled
by the style checker and incorrect spacing was enforced. The issue was
in part caused by the wide character syntax (support removed starting
from Ada 2022) that treats the square bracket as a valid identifier
character.
gcc/ada/
* csets.adb (Initialize): Only treat square bracket as valid
identifier character for Ada versions prior to Ada 2022.
* style.ads (Check_Left_Paren): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* styleg.adb (Check_Left_Bracket): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* styleg.ads (Check_Left_Paren): Rename...
(Check_Left_Paren_Square_Bracket): ...to this.
* scng.adb (Scan): Add check for spacing around left square
bracket and use new name for Check_Left_Paren_Square_Bracket.
* libgnat/a-szmzco.ads (Control_Ranges, Graphic_Ranges)
(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
(Character_Ranges): Fix style (remove extra space).
* libgnat/a-swmwco.ads (Control_Ranges, Graphic_Ranges)
(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
(Character_Ranges): Likewise.
* opt.adb (Set_Config_Switches): Remove [ from Identifier_Char
set.
Eric Botcazou [Sun, 6 Feb 2022 14:54:25 +0000 (15:54 +0100)]
[Ada] Fix remaining asymmetry in Specific_Type
gcc/ada/
* sem_type.adb (Specific_Type): Add swapped cases for interfaces.
Piotr Trojanek [Fri, 4 Feb 2022 08:16:53 +0000 (09:16 +0100)]
[Ada] Fix typos in syntax for implementation-defined pragmas
Documentation cleanup. Spotted while looking at description of
configuration pragmas.
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst:
(Export_Object, Import_Object, Short_Descriptors): Fix pragma
syntax specification.
* gnat_rm.texi: Regenerate.
Piotr Trojanek [Thu, 3 Feb 2022 18:55:34 +0000 (19:55 +0100)]
[Ada] Reuse generic string hash for invocation signatures
Use a generic string hash routine for hashing of invocation signatures.
The System.String_Hash unit was added to GNAT in 2009 and shouldn't
cause any bootstrap problems these days. To be safe, we don't use the
GNAT.String_Hash renaming, which was added later.
Cleanup related to a new restriction No_Uninitialized_Local_Scalars,
which will also rely on GNAT hash tables. Semantics is unaffected.
gcc/ada/
* ali.adb (Hash): Reuse GNAT.String_Hash.Hash and don't pollute
the Name_Id table.
Piotr Trojanek [Thu, 3 Feb 2022 22:53:13 +0000 (23:53 +0100)]
[Ada] Document Aggregate_Individually_Assign as a configuration pragma
Pragma Aggregate_Individually_Assign was apparently forgotten to be
listed in the GNAT User's Guide as a configuration pragma.
gcc/ada/
* doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration
Pragmas): Add Aggregate_Individually_Assign; otherwise the list
is complete except for some obsoleted pragmas, which most likely
are intentionally omitted.
* gnat_ugn.texi: Regenerate.
Thomas Schwinge [Thu, 7 Apr 2022 21:10:16 +0000 (23:10 +0200)]
libgomp nvptx plugin: Split 'PLUGIN_NVPTX_DYNAMIC' into 'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and 'PLUGIN_NVPTX_LINK_LIBCUDA'
Including the GCC-shipped 'include/cuda/cuda.h' vs. system <cuda.h> and
'dlopen'ing the CUDA Driver library vs. linking it are separate concerns.
libgomp/
* plugin/Makefrag.am: Handle 'PLUGIN_NVPTX_DYNAMIC'.
* plugin/configfrag.ac (PLUGIN_NVPTX_DYNAMIC): Change
'AC_DEFINE_UNQUOTED' into 'AM_CONDITIONAL'.
* plugin/plugin-nvptx.c: Split 'PLUGIN_NVPTX_DYNAMIC' into
'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and
'PLUGIN_NVPTX_LINK_LIBCUDA'.
* Makefile.in: Regenerate.
* config.h.in: Likewise.
* configure: Likewise.
Thomas Schwinge [Thu, 5 May 2022 21:10:23 +0000 (23:10 +0200)]
libgomp plugins: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED' for 'PLUGIN_GCN', 'PLUGIN_NVPTX'
Nothing ever used these.
libgomp/
* plugin/configfrag.ac: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED'
for 'PLUGIN_GCN', 'PLUGIN_NVPTX'.
* Makefile.in: Regenerate.
* config.h.in: Likewise.
* configure: Likewise.
* testsuite/Makefile.in: Likewise.
Richard Biener [Thu, 12 May 2022 10:13:29 +0000 (12:13 +0200)]
tree-optimization/105562 - avoid uninit diagnostic with better FRE
We can avoid some uninit diagnostics by making FRE disambiguate
against CLOBBERs since any aliasing there would invoke undefined
behavior for a read we are looking up.
2022-05-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/105562
* tree-ssa-sccvn.cc (vn_reference_lookup_3): Disambiguate
against all CLOBBER defs if there's not an obvious must-alias
and we are not doing redundant store elimination.
(vn_walk_cb_data::redundant_store_removal_p): New field.
(vn_reference_lookup_pieces): Initialize it.
(vn_reference_lookup): Add argument to specify if we are
doing redundant store removal.
(eliminate_dom_walker::eliminate_stmt): Specify we do.
* tree-ssa-sccvn.h (vn_reference_lookup): Adjust.
* g++.dg/warn/uninit-pr105562.C: New testcase.
Nathan Sidwell [Mon, 9 May 2022 11:51:32 +0000 (04:51 -0700)]
c++: Support module language-decl semantics
In modules purview, one can attach a declaration to the global module
(i.e. not the named module in whence the declaration appears), using a
language declaration:
export module Foo;
extern "C++" void *operator new (std::size_t);
This implements those semantics.
gcc/cp/
* parser.cc (cp_parser_linkage_specification): Implement
global module attachment semantics.
gcc/testsuite/
* g++.dg/modules/lang-3_a.C: New.
* g++.dg/modules/lang-3_b.C: New.
* g++.dg/modules/lang-3_c.C: New.
Haochen Jiang [Tue, 8 Feb 2022 02:51:26 +0000 (10:51 +0800)]
i386: Add combine splitter to transform pxor/pcmpeqb/pmovmskb/cmp 0xffff to ptest.
gcc/ChangeLog:
PR target/104371
* config/i386/sse.md (vi1avx2const): New define_mode_attr.
(pxor/pcmpeqb/pmovmskb/cmp 0xffff to ptest splitter):
New define_split pattern.
gcc/testsuite/ChangeLog:
PR target/104371
* gcc.target/i386/pr104371-1.c: New test.
* gcc.target/i386/pr104371-2.c: Ditto.
Jakub Jelinek [Thu, 12 May 2022 06:31:20 +0000 (08:31 +0200)]
openmp: Add omp_all_memory support (C/C++ only so far)
The ugly part is that OpenMP 5.1 made omp_all_memory a reserved identifier
which isn't allowed to be used anywhere but in the depend clause, this is
against how everything else has been handled in OpenMP so far (where
some identifiers could have special meaning in some OpenMP clauses or
pragmas but not elsewhere).
The patch handles it by making it a conditional keyword (for -fopenmp
only) and emitting a better diagnostics when it is used in a primary
expression. Having a nicer diagnostics when e.g. trying to do
int omp_all_memory;
or
int *omp_all_memory[10];
etc. would mean changing too many spots and hooking into name lookups
to reject declaring any such symbols would be too ugly and I'm afraid
there are way too many spots where one can introduce a name
(variables, functions, namespaces, struct, enum, enumerators, template
arguments, ...).
Otherwise, the handling is quite simple, normal depend clauses lower
into addresses of variables being handed over to the library, for
omp_all_memory I'm using NULL pointers. omp_all_memory can only be
used with inout or out depend kinds and means that a task is dependent
on all previously created sibling tasks that have any dependency (of
any depend kind) and that any later created sibling tasks will be
dependent on it if they have any dependency.
2022-05-12 Jakub Jelinek <jakub@redhat.com>
gcc/
* gimplify.cc (gimplify_omp_depend): Don't build_fold_addr_expr
if null_pointer_node.
(gimplify_scan_omp_clauses): Likewise.
* tree-pretty-print.cc (dump_omp_clause): Print null_pointer_node
as omp_all_memory.
gcc/c-family/
* c-common.h (enum rid): Add RID_OMP_ALL_MEMORY.
* c-omp.cc (c_finish_omp_depobj): Don't build_fold_addr_expr
if null_pointer_node.
gcc/c/
* c-parser.cc (c_parse_init): Register omp_all_memory as keyword
if flag_openmp.
(c_parser_postfix_expression): Diagnose uses of omp_all_memory
in postfix expressions.
(c_parser_omp_variable_list): Handle omp_all_memory in depend
clause.
* c-typeck.cc (c_finish_omp_clauses): Handle omp_all_memory
keyword in depend clause as null_pointer_node, diagnose invalid
uses.
gcc/cp/
* lex.cc (init_reswords): Register omp_all_memory as keyword
if flag_openmp.
* parser.cc (cp_parser_primary_expression): Diagnose uses of
omp_all_memory in postfix expressions.
(cp_parser_omp_var_list_no_open): Handle omp_all_memory in depend
clause.
* semantics.cc (finish_omp_clauses): Handle omp_all_memory
keyword in depend clause as null_pointer_node, diagnose invalid
uses.
* pt.cc (tsubst_omp_clause_decl): Pass through omp_all_memory.
gcc/testsuite/
* c-c++-common/gomp/all-memory-1.c: New test.
* c-c++-common/gomp/all-memory-2.c: New test.
* c-c++-common/gomp/all-memory-3.c: New test.
* g++.dg/gomp/all-memory-1.C: New test.
* g++.dg/gomp/all-memory-2.C: New test.
libgomp/
* libgomp.h (struct gomp_task): Add depend_all_memory member.
* task.c (gomp_init_task): Initialize depend_all_memory.
(gomp_task_handle_depend): Handle omp_all_memory.
(gomp_task_run_post_handle_depend_hash): Clear
parent->depend_all_memory if equal to current task.
(gomp_task_maybe_wait_for_dependencies): Handle omp_all_memory.
* testsuite/libgomp.c-c++-common/depend-1.c: New test.
* testsuite/libgomp.c-c++-common/depend-2.c: New test.
* testsuite/libgomp.c-c++-common/depend-3.c: New test.
jiawei [Thu, 5 May 2022 10:33:20 +0000 (18:33 +0800)]
testsuite: Update Wconversion testcase check type.
Some compiler target like arm-linux\riscv\power\s390x\xtensa-gcc handle
char as unsigned char, then there are no warnings occur and got FAIL cases.
Just change the type char into explicit signed char to keep the feature
consistency.
gcc/testsuite/ChangeLog:
* c-c++-common/Wconversion-1.c: Update type.
GCC Administrator [Thu, 12 May 2022 00:16:36 +0000 (00:16 +0000)]
Daily bump.
David Malcolm [Wed, 11 May 2022 21:24:42 +0000 (17:24 -0400)]
analyzer: fix memory leaks
These leaks all relate to logging within -fdump-analyzer[-stderr]
or are one-time leaks; seen with valgrind.
gcc/analyzer/ChangeLog:
* checker-path.cc (state_change_event::get_desc): Call maybe_free
on label_text temporaries.
* diagnostic-manager.cc
(diagnostic_manager::prune_for_sm_diagnostic): Likewise.
* engine.cc (exploded_graph::~exploded_graph): Fix leak of
m_per_point_data and m_per_call_string_data values. Simplify
cleanup of m_per_function_stats and m_per_point_data values.
(feasibility_state::maybe_update_for_edge): Fix leak of result of
superedge::get_description.
* region-model-manager.cc
(region_model_manager::~region_model_manager): Move cleanup of
m_setjmp_values to match the ordering of the fields within
region_model_manager. Fix leak of values within
m_repeated_values_map, m_bits_within_values_map,
m_asm_output_values_map, and m_const_fn_result_values_map.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Patrick Palka [Wed, 11 May 2022 20:14:59 +0000 (16:14 -0400)]
tree: introduce range adaptor for TREE_VEC
This patch implements a simple tree wrapper, named tree_vec_range, which
lets us idiomatically loop over all the elements of a TREE_VEC using a
C++11 range-based for loop:
// v is a TREE_VEC
for (tree e : tree_vec_range (v))
...
This is similar to the existing tree-based range adaptors ovl_range and
lkp_range added to the C++ FE in r12-340-g3307b9a07a3c51.
This patch also converts some existing loops over TREE_VEC within the
C++ FE to use tree_vec_range / range-for.
gcc/cp/ChangeLog:
* constraint.cc (tsubst_parameter_mapping): Convert loop over
TREE_VEC into a range-based for loop using tree_vec_range.
* pt.cc (iterative_hash_template_arg): Likewise.
(template_parms_level_to_args): Likewise.
(deducible_template_args): Likewise.
(check_undeduced_parms): Likewise.
(dependent_type_p_r): Likewise.
(value_dependent_expression_p) <case NONTYPE_ARGUMENT_PACK>:
Likewise.
(dependent_template_arg_p): Likewise.
* tree.cc (cp_walk_subtrees) <case NONTYPE_ARGUMENT_PACK>:
Likewise.
gcc/ChangeLog:
* tree.h (TREE_VEC_BEGIN): Define.
(TREE_VEC_END): Correct 'length' member access.
(class tree_vec_range): Define.
Jason Merrill [Wed, 11 May 2022 18:53:26 +0000 (14:53 -0400)]
c++: lambda template in requires [PR105541]
Since the patch for PR103408, the template parameters for the lambda in this
test have level 1 instead of 2, and we were treating null template args as 1
level of arguments, so tsubst_template_parms decided it had nothing to do.
Fixed by distinguishing between <> and no args at all, which is what we have
in our "substitution" in a requires-expression.
PR c++/105541
gcc/cp/ChangeLog:
* cp-tree.h (TMPL_ARGS_DEPTH): 0 for null args.
* parser.cc (cp_parser_enclosed_template_argument_list):
Use 0-length TREE_VEC for <>.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/lambda-requires1.C: New test.
Jason Merrill [Wed, 11 May 2022 13:44:57 +0000 (09:44 -0400)]
c++: fix arm-eabi bootstrap [PR105567]
Since my r13-112, in the template we were changing 'return' to 'return this'
on cdtor_returns_this targets, and then getting confused by that when
instantiating. So only make that change at instantiation time.
PR bootstrap/105567
gcc/cp/ChangeLog:
* typeck.cc (check_return_expr): Don't mess with ctor return value
while parsing a template.
gcc/testsuite/ChangeLog:
* g++.dg/template/ctor10.C: New test.
Harald Anlauf [Tue, 10 May 2022 21:41:57 +0000 (23:41 +0200)]
Fortran: fix error recovery on invalid array section
gcc/fortran/ChangeLog:
PR fortran/105230
* expr.cc (find_array_section): Correct logic to avoid NULL
pointer dereference on invalid array section.
gcc/testsuite/ChangeLog:
PR fortran/105230
* gfortran.dg/pr105230.f90: New test.
Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
Segher Boessenkool [Tue, 10 May 2022 20:45:13 +0000 (20:45 +0000)]
rs6000: Remove <Fv>
The <Fv> mode iterator always expands to "wa".
2022-05-11 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md: Use wa instead of <Fv>.
Segher Boessenkool [Tue, 10 May 2022 20:35:56 +0000 (20:35 +0000)]
rs6000: Remove <Ff>
The <Ff> mode iterator can just use "d" always.
2022-05-11 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md: Use d instead of <Ff>.
Segher Boessenkool [Tue, 10 May 2022 18:47:31 +0000 (18:47 +0000)]
rs6000: Delete RS6000_CONSTRAINT_f
Constraint "f" is always exactly the same as constraint "d", so we do
not need RS6000_CONSTRAINT_f.
2022-05-11 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/constraints.md (register_constraint "f"): Use
RS6000_CONSTRAINT_d.
* config/rs6000/rs6000.cc (rs6000_debug_reg_global): Do not handle
RS6000_CONSTRAINT_f.
(rs6000_init_hard_regno_mode_ok): Ditto. Reorder and simplify a bit.
* config/rs6000/rs6000.h (r6000_reg_class_enum): Delete
RS6000_CONSTRAINT_d.
Richard Biener [Wed, 11 May 2022 12:53:37 +0000 (14:53 +0200)]
Use variadic template functions for the gimple_build forwarders
The following consolidates the forwarders to gimple_build with
UNKNOWN_LOCATION by using two variadic template functions. This
makes the code visually less disturbing and is in preparation
of adding more forwarders with different stmt insertion schemes.
2022-05-11 Richard Biener <rguenther@suse.de>
* gimple-fold.h (gimple_build): Use variadic template
functions for the gimple_build API forwarders without
location_t argument.
Siddhesh Poyarekar [Wed, 11 May 2022 13:43:09 +0000 (19:13 +0530)]
middle-end/70090: Register __bdos for sanitizers if necessary
The asan initializer registers __builtin_object_size for languages that
don't have it, e.g. Fortran. Register __builtin_dynamic_object_size too
(we need both because __builtin_dynamic_object_size computation may
involve generating __builtin_object_size as a fallback) so that
gfortran.dg/ubsan/bind-c-intent-out-2.f90 does not crash anymore.
gcc/ChangeLog:
PR middle-end/70090
* asan.cc (initialize_sanitizer_builtins): Register
__builtin_dynamic_object_size if necessary.
Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
Nathan Sidwell [Mon, 9 May 2022 11:47:14 +0000 (04:47 -0700)]
[c++] Add module attachment
This adds module attachment as a distinct flag to 'in module purview'.
A declaration may have neither or both (as before), but can also have
just the 'in [named-module] purview', which was previously not
representable.
This new state allows some cleanup of redeclarations (particularly the
builtins), which was a little warty. Some other internal APIs get
similarly clarified.
gcc/cp/
* cp-tree.h (DECL_MODULE_ATTACH_P): New.
(struct lang_decl_base): Add module_attach_p flag.
* decl.cc (duplicate_decls): Rework module redeclaration
checking.
* module.cc (trees_out::lang_decl_bools): Write attach flag.
(trees_in::lang_decl_bools): ... and read it back.
(trees_out::decl_value): Rework module attachment handling.
(trees_in::decl_value): Rename local var to reflect meaning.
(trees_in::key_mergeable): Likewise.
(get_originating_module): Use DECL_MODULE_ATTACH_P. No need
to special-case mangling.
(module_may_redeclare): Reimplement.
(set_originating_module): Deal with attachment.
* name-lookup.cc (maybe_record_mergeable_decl): Deal with
attachment.
(mergeable_namespace_slots): Likewise.
(do_nonmember_using_decl): Likewise.
* name-lookup.h (mergeable_namespace_slots): Adjust parm
meaning.
* ptree.cc (cxx_print_decl): Adjust purview & attach printing.
Richard Biener [Wed, 11 May 2022 11:34:37 +0000 (13:34 +0200)]
rtl-optimization/105559 - avoid quadratic behavior in delete_insn_and_edges
When the insn to delete is a debug insn there's no point in figuring
out whether it might be the last real insn and thus we have to purge
dead edges.
2022-05-11 Richard Biener <rguenther@suse.de>
PR rtl-optimization/105559
* cfgrtl.cc (delete_insn_and_edges): Only perform search to BB_END
for non-debug insns.
Richard Biener [Wed, 11 May 2022 09:53:53 +0000 (11:53 +0200)]
Implement some of fold_binary_op_with_conditional_arg in match.pd
The following allows (c != 0 ? 0 : 100) != 0 to be simplified as
c != 0 as fold_binary_op_with_conditional_arg would have done
via forwprop and GENERIC folding. Likewise it allows to combine
(a != 0) != 0 directly via match.pd instead of only via
forwprop and again fold_binary_op_with_conditional_arg.
The patterns do not fully implement all cases of
fold_binary_op_with_conditional_arg, some aspects like
"any of the operands simplify" cannot currently be expressed.
2022-05-11 Richard Biener <rguenther@suse.de>
* generic-match-head.cc: Include tree-eh.h.
* match.pd ((cond ...) cmp X): New simplification inspired
by fold_binary_op_with_conditional_arg.
(eq/ne (cmp ...) true/false): Likewise.
* gcc.dg/tree-ssa/pr61839_1.c: Adjust.
* gcc.dg/tree-ssa/vrp24.c: Likewise.
Thomas Schwinge [Wed, 6 Apr 2022 10:26:13 +0000 (12:26 +0200)]
libgomp: Remove unused '--with-hsa-runtime', '--with-hsa-runtime-include', '--with-hsa-runtime-lib'
With recent commit
2e309a4eff80e55b53d32d26926a2a94eabfea21 "libgomp testsuite:
Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library",
and commit
d6adba307508c75f1ccb2121eb1a43c9ab1d4056 "libgomp GCN plugin:
Clean up unused references to system-provided HSA Runtime library", the last
uses of '--with-hsa-runtime' etc. are gone.
gcc/
* doc/install.texi: Don't document '--with-hsa-runtime',
'--with-hsa-runtime-include', '--with-hsa-runtime-lib'.
libgomp/
* plugin/configfrag.ac: Remove '--with-hsa-runtime',
'--with-hsa-runtime-include', '--with-hsa-runtime-lib' processing.
* Makefile.in: Regenerate.
* configure: Likewise.
* testsuite/Makefile.in: Likewise.
Thomas Schwinge [Wed, 6 Apr 2022 10:15:28 +0000 (12:15 +0200)]
libgomp GCN plugin: Clean up always-empty 'PLUGIN_GCN_CPPFLAGS', 'PLUGIN_GCN_LDFLAGS'
After recent commit
d6adba307508c75f1ccb2121eb1a43c9ab1d4056
"libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime
library", these aren't set anymore.
libgomp/
* plugin/Makefrag.am (libgomp_plugin_gcn_la_CPPFLAGS): Don't
consider 'PLUGIN_GCN_CPPFLAGS'.
(libgomp_plugin_gcn_la_LDFLAGS): Don't consider
'PLUGIN_GCN_LDFLAGS'.
* plugin/configfrag.ac (PLUGIN_GCN_CPPFLAGS, PLUGIN_GCN_LDFLAGS):
Remove.
* Makefile.in: Regenerate.
* configure: Likewise.
* testsuite/Makefile.in: Likewise.
Thomas Schwinge [Wed, 6 Apr 2022 09:31:45 +0000 (11:31 +0200)]
libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime library
This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or
'--with-hsa-runtime-include=[...]', '--with-hsa-runtime-lib=[...]' -- which
nobody really is doing, as far as I can tell.
Originally changed for the libgomp HSA plugin in
commit
b8d89b03db5f212919e4571671ebb4f5f8b1e19d (r242749)
"Remove build dependence on HSA run-time", and later propagated into the GCN
plugin, these are no longer built against system-provided HSA Runtime library.
Instead, unconditionally built against the GCC-shipped 'include/hsa*.h' header
files, and at run time does 'dlopen("libhsa-runtime64.so.1")'. It thus doesn't
make sense to consider references to system-provided HSA Runtime library during
libgomp GCN plugin build.
libgomp/
* plugin/configfrag.ac (HSA_RUNTIME_CPPFLAGS)
(HSA_RUNTIME_LDFLAGS): Remove.
* configure: Regenerate.
Thomas Schwinge [Wed, 6 Apr 2022 08:39:56 +0000 (10:39 +0200)]
libgomp testsuite: Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library
This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or
'--with-hsa-runtime-lib=[...]' -- which nobody really is doing, as far as I can
tell.
'libgomp/testsuite/lib/libgomp.exp:libgomp_init' states:
# For build-tree testing, also consider the library paths used for builing.
# For installed testing, we assume all that to be provided in the sysroot.
if { $blddir != "" } {
[...]
global hsa_runtime_lib
if { $hsa_runtime_lib != "" } {
append always_ld_library_path ":$hsa_runtime_lib"
}
}
However, the libgomp GCN plugin is unconditionally built against the
GCC-shipped 'include/hsa*.h' header files, and at run time does
'dlopen("libhsa-runtime64.so.1")', so there is no system-provided HSA Runtime
library "used for builing". It thus doesn't make sense to amend
'LD_LIBRARY_PATH' for system-provided HSA Runtime library.
libgomp/
* testsuite/lib/libgomp.exp (libgomp_init): Don't
'append always_ld_library_path ":$hsa_runtime_lib"'.
* testsuite/libgomp-test-support.exp.in (hsa_runtime_lib): Don't set.
Martin Liska [Wed, 11 May 2022 11:21:26 +0000 (13:21 +0200)]
docs: document --with-zstd
PR other/105527
gcc/ChangeLog:
* doc/install.texi: Document the configure option --with-zstd.
Martin Liska [Wed, 15 Dec 2021 09:54:23 +0000 (10:54 +0100)]
i386: simplify cpu_feature handling
The patch removes unneeded loops for cpu_features2 and CONVERT_EXPR
that can be simplified with NOP_EXPR.
gcc/ChangeLog:
* common/config/i386/cpuinfo.h (has_cpu_feature): Directly
compute index in cpu_features2.
(set_cpu_feature): Likewise.
* config/i386/i386-builtins.cc (fold_builtin_cpu): Also remove
loop for cpu_features2 and use NOP_EXPRs.
Yannick Moy [Tue, 1 Feb 2022 11:33:54 +0000 (12:33 +0100)]
[Ada] Proof of 'Image support for unsigned integers
Prove System.Image_U, making the connection with the space available in
the string as computed with System.Width_U and the functions that
support the other direction of 'Value in System.Value_U.
The units that support 'Image cannot be marked Pure anymore, as they now
depend on non-pure units.
gcc/ada/
* libgnat/s-imaged.ads: Remove Pure.
* libgnat/s-imagef.ads: Remove Pure.
* libgnat/s-imager.ads: Remove Pure.
* libgnat/s-imageu.adb: Add ghost code.
* libgnat/s-imageu.ads: Add contracts.
* libgnat/s-imde128.ads: Remove Pure.
* libgnat/s-imde32.ads: Remove Pure.
* libgnat/s-imde64.ads: Remove Pure.
* libgnat/s-imfi128.ads: Remove Pure.
* libgnat/s-imfi32.ads: Remove Pure.
* libgnat/s-imfi64.ads: Remove Pure.
* libgnat/s-imgflt.ads: Remove Pure.
* libgnat/s-imglfl.ads: Remove Pure.
* libgnat/s-imgllf.ads: Remove Pure.
* libgnat/s-imglllu.ads: Instantiate with ghost subprograms.
* libgnat/s-imgllu.ads: Instantiate with ghost subprograms.
* libgnat/s-imgrea.ads: Remove Pure.
* libgnat/s-imguns.ads: Instantiate with ghost subprograms.
* libgnat/s-imguti.ads: Remove Pure.
* libgnat/s-valueu.adb (Prove_Iter_Scan_Based_Number_Ghost,
Prove_Scan_Only_Decimal_Ghost): New lemmas.
* libgnat/s-valueu.ads (Uns_Option): Do not make type ghost to
be able to use it as formal in instantiations.
(Only_Decimal_Ghost): New ghost query.
(Prove_Iter_Scan_Based_Number_Ghost,
Prove_Scan_Only_Decimal_Ghost): New lemmas.
* libgnat/s-widlllu.ads: Adapt to changes in Width_U.
* libgnat/s-widllu.ads: Adapt to changes in Width_U.
* libgnat/s-widthu.adb: Change generic function in generic
package in order to complete the postcondition. Tighten the
upper bound on the result by 1.
* libgnat/s-widthu.ads: Same.
* libgnat/s-widuns.ads: Adapt to changes in Width_U.
* gcc-interface/Make-lang.in: Add dependencies on a-nubinu,
a-numeri.ads and a-widuns.ads.
Piotr Trojanek [Fri, 4 Feb 2022 12:34:52 +0000 (13:34 +0100)]
[Ada] Sort Detect_Blocking alphabetically among names and pragmas
In GNAT User's Guide section about configuration pragmas the
Detect_Blocking has been recently moved to an alphabetic order. This
patch moves the its Name_Id and Pragma_Is in the source code to match
this order.
gcc/ada/
* snames.ads-tmpl (Detect_Blocking): Move after
Default_Storage_Pool.
Piotr Trojanek [Thu, 3 Feb 2022 23:22:41 +0000 (00:22 +0100)]
[Ada] Fix Compile_Time_(Error|Warning) as non-configuration pragmas
Uses of Compile_Time_Error and Compile_Time_Warning as configuration
pragmas were detected with a custom check in semantic analysis. Now they
are detected with an existing general check in parser.
gcc/ada/
* sem_prag.adb (Analyze_Pragma): Remove custom check for
Compile_Time_Error and Compile_Time_Warning pragmas.
* snames.ads-tmpl (Compile_Time_Error, Compile_Time_Warning):
Move beyond Last_Configuration_Pragma_Name.
Marc Poulhiès [Mon, 31 Jan 2022 14:54:41 +0000 (15:54 +0100)]
[Ada] Correctly reject record aggregate using brackets
Ada 2022 bracket syntax is only allowed for arrays and containers, not
records. This change correctly rejects record aggregates using brackets
along with few cases of brackets being used instead of parentheses.
gcc/ada/
* libgnat/a-direct.adb (Start_Search_Internal): Use parentheses
for record aggregate.
* libgnat/a-stbubo.adb (Get_UTF_8): Likewise.
* libgnat/a-stbuun.adb (Get_UTF_8): Likewise.
* libgnat/a-stzbou.ads (Null_Bounded_Wide_Wide_String):
Likewise.
* libgnat/a-swmwco.ads (Lower_Case_Mapping, Basic_Mapping):
Likewise.
* libgnat/a-szmzco.ads (Lower_Case_Mapping, Basic_Mapping):
Likewise.
* libgnat/s-statxd.adb (Fields): Likewise.
* libgnat/s-stausa.adb (Initialize): Likewise.
* sem_aggr.adb (Resolve_Record_Aggregate): Reject aggregates
using brackets.
Piotr Trojanek [Fri, 4 Feb 2022 08:47:27 +0000 (09:47 +0100)]
[Ada] Fix unbalanced paren in documentation marker for GNAT Studio
Unbalanced parens can be found when editing in emacs using the
"check-parens" command. Offending occurrences must be examined manually,
because few of them are intentional.
Minor cleanup of typos in documentation.
gcc/ada/
* doc/gnat_rm/implementation_defined_pragmas.rst,
doc/gnat_rm/implementation_of_specific_ada_features.rst,
doc/gnat_rm/representation_clauses_and_pragmas.rst,
doc/gnat_rm/the_gnat_library.rst,
doc/gnat_rm/the_implementation_of_standard_i_o.rst,
doc/gnat_ugn/building_executable_programs_with_gnat.rst,
doc/gnat_ugn/gnat_and_program_execution.rst,
doc/gnat_ugn/platform_specific_information.rst: Fix unbalanced
parentheses and brackets.
* sem_prag.adb (pragma Obsolescent): Likewise.
* gnat_rm.texi, gnat_ugn.texi: Regenerate.
Marc Poulhiès [Tue, 1 Feb 2022 11:20:51 +0000 (12:20 +0100)]
[Ada] New No_Local_Tagged_Types restriction
Add new configuration restriction No_Local_Tagged_Types. This new
restriction ensures at compile time that all tagged types are only
declared at the library level.
gcc/ada/
* libgnat/s-rident.ads (Restriction_Id): Add
No_Local_Tagged_Types, update comment for adding new GNAT
specific restriction.
* restrict.ads (Implementation_Restriction): Add
No_Local_Tagged_Types.
* sem_ch3.adb (Analyze_Full_Type_Declaration): Add check for
tagged type at library level.
* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
Add No_Local_Tagged_Types description.
* gnat_rm.texi: Regenerate.
Eric Botcazou [Wed, 2 Feb 2022 20:04:18 +0000 (21:04 +0100)]
[Ada] Fix spurious ambiguity for if_expression containing operator
It comes from a discrepancy in the analysis of binary operators, between
the predefined ones for which we register an interpretation with the base
type and the user-defined ones for which we register an interpretation
with the subtype directly.
This is harmless in almost all cases because the two interpretations do not
differ by this type property only, but is problematic when the operation is
the dependent expression of a conditional expression, because it causes two
interpretations of the conditional expression to be registered, which this
time differ by this type property only, thus making them impossible to be
disambiguated later.
gcc/ada/
* sem_ch4.adb (Analyze_User_Defined_Binary_Op): Use the base type
in the interpretation of the operator.
Piotr Trojanek [Thu, 3 Feb 2022 20:28:44 +0000 (21:28 +0100)]
[Ada] Fix style of body header boxes
gcc/ada/
* sem_case.adb (Free_Value_Sets): Fix style in body header box.
* sem_ch12.adb (Build_Subprogram_Wrappers): Likewise.
* sem_util.adb (Statically_Denotes_Entity): Likewise.
Etienne Servais [Wed, 2 Feb 2022 14:18:29 +0000 (15:18 +0100)]
[Ada] Do not create useless itype in Constrain_Access
In the case of a constrained access definition for a record component we
are calling create_itype twice the former not being updated. This leads
to a malformed node that crashes -gnatG when predicates are activated.
Instead of creating a default Itype for Desig_Subtype, create it with
the correct scope in each case.
gcc/ada/
* sem_ch3.adb (Constrain_Access): Call Desig_Subtype in each if
branch to avoid calling it twice.
Piotr Trojanek [Wed, 2 Feb 2022 16:19:59 +0000 (17:19 +0100)]
[Ada] Detect infinite loops with operators in exit conditions
To warn about infinite loops we detect variables referenced in loop exit
conditions. We handle references within boolean operators, i.e.
comparison and negation, which are likely to appear at the top level of
the condition (e.g. "X > 0"). However, we can easily handle all
operators, because they are likely to appear inside the condition (e.g.
"abs (X) > 0.0").
Cleanup related to a new restriction No_Uninitialized_Local_Scalars.
gcc/ada/
* sem_warn.adb (Find_Var): Detect all operators; replace
"condition" to "expression" in comments, because when this
routine is called recursively it no longer examines the
condition.
(Is_Suspicious_Function_Name): Reduce scope of a local variable
to avoid shadowing with a parameter of a nested
Substring_Present function.
Yannick Moy [Wed, 2 Feb 2022 11:52:36 +0000 (12:52 +0100)]
[Ada] Adapt proof of System.Arith_Double after update of Z3
Update to version 4.8.14 of prover Z3 requires minor adjustments of the
ghost code to add necessary intermediate assertions that drive the
automatic proof.
gcc/ada/
* libgnat/s-aridou.adb (Double_Divide, Scaled_Divide): Add
intermediate assertions.