aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-05-13Make range_from_dom more effective.Andrew MacLeod2-50/+98
Add modes to range_from_dom such that we can simply query, or adjust the cache and deal with multiple predecessor blocks. * gimple-range-cache.cc (ranger_cache::ranger_cache): Start with worlist truncated. (ranger_cache::entry_range): Add rfd_mode parameter. (ranger_cache::exit_range): Ditto. (ranger_cache::edge_range): New. Incorporate from range_on_edge. (ranger_cache::range_of_expr): Adjust call to entry_range. (ranger_cache::range_on_edge): Split to edge_range and call. (ranger_cache::fill_block_cache): Always invoke range_from_dom. (ranger_cache::range_from_dom): Make reentrant, add search mode, handle mutiple predecessors. (ranger_cache::update_to_nonnull): Adjust call to exit_range. * gimple-range-cache.h (ranger_cache): Add enum rfd_mode. Adjust prototypes.
2022-05-13Avoid visiting newly-created blocks in harden-conditionalsAlexandre Oliva1-197/+220
Reverse iteration over blocks, in gimple-harden-conditionals.cc, was supposed to avoid visiting blocks introduced by hardening and introducing further reversed conditionals and traps for them, but newly-created blocks may be inserted before the current block, as shown by the PR105455 testcase. Use an auto_sbitmap to gather preexisting blocks that need visiting. for gcc/ChangeLog * gimple-harden-conditionals.cc: Include sbitmap.h. (pass_harden_conditional_branches::execute): Skip new blocks. (pass_harden_compares::execute): Likewise.
2022-05-13ada: gcc-if: build proper String_Pointer for Get_External_NameAlexandre Oliva1-1/+2
The compiler is allowed to assume it can access String bounds, such as the prefix passed to Get_External_Name, even in circumstances in which the prefix is not going to be used and has_prefix is false, so, from the C side, we have to build a proper String_Template for the String_Pointer. for gcc/ada/ChangeLog * gcc-interface/decl.cc (is_cplusplus_method): Build proper String for Get_External_Name.
2022-05-13Introduce tests for hardbool Machine_Attribute for AdaAlexandre Oliva2-0/+68
Test for the validity checking performed on nonstandard booleans annotated with the "hardbool" Machine_Attribute pragma. for gcc/testsuite/ChangeLog * gnat.dg/hardbool.ads: New. * gnat.dg/hardbool.adb: New.
2022-05-13arm: correctly handle misaligned MEMs on MVE [PR105463]Richard Earnshaw2-21/+73
Vector operations in MVE must be aligned to the element size, so if we are asked for a misaligned move in a wider mode we must recast it to a form suitable for the known alignment (larger elements have better address offset ranges, so there is some advantage to using wider element sizes if possible). Whilst fixing this, also rework the predicates used for validating operands - the Neon predicates are not right for MVE. gcc/ChangeLog: PR target/105463 * config/arm/mve.md (*movmisalign<mode>_mve_store): Use mve_memory_operand. (*movmisalign<mode>_mve_load): Likewise. * config/arm/vec-common.md (movmisalign<mode>): Convert to generator form... (@movmisalign<mode>): ... thus. Use generic predicates and then rework operands if they are not valid. For MVE rework to a narrower element size if the alignment is not high enough.
2022-05-13arm: fix some issues in mve_vector_mem_operandRichard Earnshaw1-9/+10
There are a couple of issues with the mve_vector_mem_operand function. Firstly, SP is permitted as a register provided there is no write-back operation. Secondly, there were some cases where 'strict' was not being applied when checking which registers had been used. gcc/ChangeLog: * config/arm/arm.cc (mve_vector_mem_operand): Allow SP_REGNUM when there is no write-back. Fix use when strict is true.
2022-05-13xtensa: Reflect the 32-bit Integer Divide OptionTakayuki 'January June' Suwa1-0/+5
On Espressif's ESP8266 (based on Tensilica LX106, no hardware divider), this patch reduces the size of each: __moddi3() @ libgcc.a : 969 -> 301 (saves 668) __divmoddi4() : 1111 -> 426 (saves 685) __udivmoddi4() : 1043 -> 319 (saves 724) in bytes, respectively. gcc/ChangeLog: * config/xtensa/xtensa.h (TARGET_HAS_NO_HW_DIVIDE): New macro definition.
2022-05-13xtensa: Rename deprecated extv/extzv insn patterns to extvsi/extzvsiTakayuki 'January June' Suwa1-8/+8
These patterns were deprecated since GCC 4.8. gcc/ChangeLog: * config/xtensa/xtensa.md (extvsi, extvsi_internal, extzvsi, extzvsi_internal): Rename from extv, extv_internal, extzv and extzv_internal, respectively.
2022-05-13Fix wrong SRA with VIEW_CONVERT_EXPR and reverse SSOEric Botcazou2-24/+57
Most cases of VIEW_CONVERT_EXPRs involving reverse scalar storage order are disqualified for SRA because they are storage_order_barrier_p, but you can still have a VIEW_CONVERT_EXPR to a regular composite type being applied to a component of a record type with reverse scalar storage order. In this case the bypass for !useless_type_conversion_p in sra_modify_assign, albeit already heavily guarded, triggers and may generate wrong code, so the patch makes sure that it does only when the SSO is the same on both side. gcc/ * tree-sra.cc (sra_modify_assign): Check that scalar storage order is the same on the LHS and RHS before rewriting one with the model of the other. gcc/testsuite/ * gnat.dg/sso17.adb: New test.
2022-05-13[Ada] Fix incorrect call to inherited function with limited return typeEric Botcazou1-0/+1
This is a return convention mismatch coming from a discrepancy of the Returns_By_Ref flag for the inherited function. gcc/ada/ * sem_ch3.adb (Derive_Subprogram): For a function, also copy the Returns_By_Ref flag from the parent.
2022-05-13[Ada] Storage_Model_Object fails to return object entityGary Dismukes1-1/+5
After a compilation unit containing a Designated_Storage_Model aspect was processed by the compiler front end, the aspect's expression was seen as not having been analyzed. In some cases this can lead to the Storage_Model_Object function not returning the entity of the associated model object (such as when the model object is specified using an expanded name). This was due to a second copy of the aspect's expression being made in Check_Aspect_At_Freeze_Point, and that copy wasn't analyzed, even though the earlier version of the expression prior to that copy had been. (The copy is needed for proper checking of Ada's rules for ensuring that certain aspect expressions resolve the same way at the freeze point and later at the end of the declarations.) This is corrected by doing analysis of the new aspect expression within Check_Aspect_At_Freeze_Point, as is already done in that procedure in the case of several other aspects. gcc/ada/ * sem_ch13.adb (Check_Aspect_At_Freeze_Point): Analyze the expression of the aspect at this point, like other aspects that denote simple entities. Ensures that function Storage_Model_Object will have an entity to retrieve from the aspect expression. Also, move comment about aspects that don't require delay analysis in front of last alternative of the case statement, where it's supposed to be.
2022-05-13[Ada] Compiler crash on -gnata -O2Javier Miranda2-53/+88
gcc/ada/ * contracts.adb (Build_Unique_Name): New subprogram. (Make_Class_Precondition_Subps): Use Build_Unique_Name to generate the names of the call helpers and the name of indirect call wrappers. * freeze.adb (Needs_Wrapper): Remove dead code. (Check_Inherited_Conditions): Defer building helpers and ICW until all the dispatch table wrappers have been built and analyzed. Required to ensure uniqueness in their names because when building these wrappers for overlapped subprograms their homonym number is not definite until they have been analyzed.
2022-05-13[Ada] Only use alternate stack when neededArnaud Charlet1-4/+10
If we're not going to install a signal handler for SIGSEGV then we do not need an alternate stack to handle this signal (and e.g. stack overflows). gcc/ada/ * libgnarl/s-taprop__linux.adb (Initialize): Do not use an alternate stack if no handler for SEGV is installed.
2022-05-13[Ada] Extend hardcfr testing (documentation)Alexandre Oliva2-32/+14
Having realized that noreturn calls of __builtin_return are special, and other noreturn calls don't get edges to the exit block, I've realized the consequences of the logic to insert checking before noreturn and tail calls were not quite what I'd expected before. Specifically, noreturn calls other than __builtin_return don't get any checking whatsoever. Moreover, optional tail calls are only detected long after hardcfr; the logic should work for must-tail calls, but there doesn't seem to be a way to test it. Documentation has been simplified so as to remove mention of these possibilities, that can't really be relied on. gcc/ada/ * doc/gnat_rm/security_hardening_features.rst (Control Flow Redundancy): Drop mentions of noreturn and tail calls. * gnat_rm.texi: Regenerate.
2022-05-13[Ada] CUDA: use binder to generate kernel-registration codeGhjuvan Lacambre9-6/+259
Compiling CUDA code requires compiling code for the host (= CPU) and for the device (= GPU). Device code is embedded into the host code and must be registered with the CUDA runtime by the host. The original approach we took for registering CUDA kernels was to generate the registration-code on a unit basis, i.e. each unit took care of registering its own kernels. Unfortunately, this makes linking kernels and device functions that belong to different units much harder. We thus rework this approach in order to have GNAT generate kernel names in ALI files. The binder reads the ALI files and generates kernel registration code for each of the kernels found in ALI files. gcc/ada/ * ali.adb: Introduce new 'K' line in ALI files, used to represent CUDA kernel entries. * ali.ads: Create new CUDA_Kernels table, which contains entries of type CUDA_Kernel_Record. Each CUDA_Kernel_Record corresponds to a K line in an ali file. * bindgen.adb: Introduce new Gen_CUDA_Init procedure in the binder, which generates CUDA kernel registration code. * gnat_cuda.adb: Move Get_CUDA_Kernels spec to package spec to make it available to bindgen.adb. * gnat_cuda.ads: Likewise. * lib-writ.adb: Introduce new Output_CUDA_Symbols procedure, which generates one 'K' line in the ALI file per visible CUDA kernel. * opt.ads: Introduce Enable_CUDA_Expansion option, triggered by using the -gnatd_c flag. * switch-b.adb: Likewise. * switch-c.adb: Likewise.
2022-05-13[Ada] Fix iterated component association for array aggregateMarc Poulhiès1-0/+24
Create a scope for the Ada 2022 iterated component association loops. In the case of elements needing finalization, the late expansion would crash on references to the loop variable within the loop body. gcc/ada/ * exp_aggr.adb (Gen_Loop): Create scope for loop variable of iterated components.
2022-05-13[Ada] Simplify helper units for formal hashed sets/mapsYannick Moy4-156/+24
As tampering checks do not exist in formal hashed sets and maps, remove the machinery for such checks in the version of generic key and node operations for formal sets/maps. Update comments as well. gcc/ada/ * libgnat/a-chtgfk.adb (Checked_Equivalent_Keys, Checked_Index): Remove useless functions. (Delete_Key_Sans_Free, Find, Generic_Conditional_Insert): Adapt to removal of wrapper functions. * libgnat/a-chtgfk.ads (Checked_Equivalent_Keys, Checked_Index): Remove useless functions. * libgnat/a-chtgfo.adb (Checked_Index): Remove useless function. (Clear): Delete code commented out regarding Busy and Lock management. (Delete_Node_At_Index): Delete unused procedure. (Delete_Node_Sans_Free, Free, Generic_Read, Next): Adapt to removal of wrapper functions. * libgnat/a-chtgfo.ads (Checked_Index): Remove useless function. (Delete_Node_At_Index): Delete unused procedure.
2022-05-13[Ada] Adapt body of formal sets and maps for SPARKYannick Moy7-196/+145
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.
2022-05-13[Ada] Remove dependency on tampering checks and controlled types for formalYannick Moy10-15/+1170
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.
2022-05-13[Ada] Ada ABI change when building with assertionsJavier Miranda1-1/+41
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).
2022-05-13[Ada] Take into account GNSA_ROOT env var for prefixJohannes Kanig2-3/+24
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.
2022-05-13[Ada] Implement late initialization rules for type extensionsSteve Baird3-244/+529
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.
2022-05-13[Ada] Handle IN iterator for class-wide derived object of iterator typeEd Schonberg1-1/+13
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.
2022-05-13[Ada] Facilitate proof of Overwrite in bounded strings libraryYannick Moy3-5/+5
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.
2022-05-13[Ada] Fix code example on representation clauseEtienne Servais2-6/+6
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.
2022-05-13[Ada] Do not overwrite limited view of result typeEric Botcazou3-14/+4
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.
2022-05-13[Ada] Wrong address for class-wide interface access conversionJavier Miranda1-4/+25
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.
2022-05-13[Ada] Crash in task body reference to discriminantJavier Miranda1-0/+22
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.
2022-05-13[Ada] Improve expected type error messagesJustin Squirek1-2/+14
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.
2022-05-13[Ada] Document control flow redundancyAlexandre Oliva2-65/+180
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.
2022-05-13[Ada] Fix compiler crash on FOR iteration scheme over containerEric Botcazou1-1/+1
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.
2022-05-13[Ada] Remove obsolete uses of Unchecked_Conversion from Ada 83Piotr Trojanek16-64/+65
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.
2022-05-13[Ada] Remove obsolete uses of Unchecked_Deallocation from Ada 83Piotr Trojanek7-28/+28
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.
2022-05-13[Ada] Fix the Ada 2022 iterated component association RM referenceMarc Poulhiès1-5/+2
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.
2022-05-13[Ada] Fix typo on "that"Etienne Servais1-1/+1
gcc/ada/ * sem_ch3.adb (Analyze_Subtype_Declaration): Fix typo in comment.
2022-05-13[Ada] Spurious access error in function returning type with access discriminantJustin Squirek3-34/+94
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.
2022-05-13[Ada] Accept effectively volatile components in actualsPiotr Trojanek1-0/+6
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.
2022-05-13[Ada] Remove redundant guard in checks for volatile actualsPiotr Trojanek1-2/+1
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.
2022-05-13[Ada] Ineffective use type clause warnings cause compile time crashJustin Squirek3-6/+53
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.
2022-05-13testsuite: Make AArch64 attributes_7.c generate unique report lines.Christophe Lyon1-2/+2
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.
2022-05-13Make gimple_build main workers more flexibleRichard Biener67-111/+180
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.
2022-05-13[PR105455] Set edge probabilities when hardening conditionalsAlexandre Oliva2-0/+19
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.
2022-05-13Strip of a vector load which is only used partially.liuhongt4-32/+93
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.
2022-05-13Daily bump.GCC Administrator7-1/+414
2022-05-12c++: tighten TMPL_ARGS_LEVEL macroPatrick Palka2-15/+16
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.
2022-05-12testsuite: PPC vector double requires VSXDavid Edelsohn1-2/+2
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.
2022-05-12rtl-optimization/105577 - RTL DSE and non-call EHRichard Biener1-0/+10
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.
2022-05-12[Ada] Skip postponed validation checks with compilation errorsPiotr Trojanek1-1/+0
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.
2022-05-12[Ada] Fix URL in docArnaud Charlet2-2/+2
gcc/ada/ * doc/gnat_ugn/the_gnat_compilation_model.rst: Fix URL. * gnat_ugn.texi: Regenerate.
2022-05-12[Ada] Restore double quotes in debug printoutsBob Duff3-4/+8
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.