aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-07-23Default to -mcpu=ultrasparc3 on Solaris/SPARCRainer Orth1-3/+2
Prompted by the discussions around a recent clang bug, I realized that gcc still defaults to -mcpu=v9 on Solaris/SPARC. This is an oversight since the Oracle Studio 12.6 cc, released in 2017, already defaults to -xarch=sparcvis2, the equivalent of -mcpu=ultrasparc3. Besides, both the 32 and 64-bit libc.so.1 require UltraSPARC III extensions anyway: SPARC32PLUS Version 1, V8+ Required, UltraSPARC3 Extensions Required [VIS] SPARCV9 Version 1, UltraSPARC3 Extensions Required [VIS] So this patch follows suite. Bootstrapped on sparc-sun-solaris2.11 and sparcv9-sun-solaris2.11 with as/ld, gas/ld, and gas/gld configurations. There are currently two regressions exposed by this patch (PRs 121191 and 121192), which are only present in gcc 16 resp. 15/16. There's one small caveat: while Solaris now marks all objects with EF_SPARC_32PLUS EF_SPARC_SUN_US1 EF_SPARC_SUN_US3, gas only sets the EF_SPARC_SUN_US[13] flags in the ELF header if UltraSPARC I/III insns are actually used. This is in accordance with the SPARC Compliance Definition 2.4.1, 4P-1. In the end, it doesn't matter anyway since libc.so.1 already has both flags, so the resulting executables and shared objects will too, anyway. 2025-07-20 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc: * config.gcc <sparc*-*-solaris2*> (with_cpu): Default to ultrasparc3.
2025-07-23[aarch64] check for non-NULL vectype in aarch64_vector_costs::add_stmt_costRichard Biener1-0/+1
With a patch still in development we get NULL STMT_VINFO_VECTYPE. One side-effect is that during scalar stmt testing we no longer pass a vectype. The following adjusts aarch64_vector_costs::add_stmt_cost to check for a non-NULL vectype before accessing it, like all the code surrounding it. The other fix possibility would have been to re-orderr the check with the vect_mem_access_type one, but that one is not going to exist during scalar code costing either in the future. * config/aarch64/aarch64.cc (aarch64_vector_costs::add_stmt_cost): Check vectype is non-NULL before accessing it.
2025-07-23middle-end/121216 - ICE with VLA const string initializerRichard Biener2-0/+11
constant_byte_string fails to consider the string type might be VLA when initialized by an empty string CTOR. PR middle-end/121216 * expr.cc (constant_byte_string): Check the string type size fits an uhwi before converting to uhwi. * gcc.dg/pr121216.c: New testcase.
2025-07-22testsuite: Mark fn1 in pr81627.c as noinline [PR120101]Andrew Pinski1-0/+1
Since r16-372-g064cac730f88dc fn1 is now inlined into main which meant the scan dump was failing since it was looking for it only once. Marking fn1 as noinline gets us back to the old behavior and no longer dependent on the inliner. Pushed as obvious after a quick test. PR testsuite/120101 gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr81627.c (fn1): Mark as noinline. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-07-23testsuite: Fix overflow in gcc.dg/vect/pr116125.cSiddhesh Poyarekar1-3/+3
The test ends up writing a byte beyond bounds of the buffer, which gets trapped on some targets when the test is run with -fstack-protector-strong. gcc/testsuite/ChangeLog: * gcc.dg/vect/pr116125.c (mem_overlap): Expand A to 10 members. Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2025-07-23Daily bump.GCC Administrator7-1/+397
2025-07-22c++: constexpr union placement new [PR121068]Jason Merrill3-3/+35
The note and example in [class.union] p6 think that placement new can be used to change the active member of a union, but we didn't support that for array members in constant-evaluation even after implementing P1330 and P2747. First I tried to address this by introducing a CLOBBER_BEGIN_OBJECT for the entire array, but that broke the resolution of LWG3436, which invokes 'new T[1]' for an array T, and trying to clobber a multidimensional array when the actual object is single-dimensional breaks. So I've raised that issue with the committee. Until that is resolved, this patch takes a simpler approach: allow initialization of an element of an array to make the array the active member of a union. PR c++/121068 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_store_expression): Allow ARRAY_REFs when activating an array member of a union. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/constexpr-union6.C: Expect x5 to work. * g++.dg/cpp26/constexpr-new4.C: New test.
2025-07-22c++: Wmismatched-new-delete-5.C tweakJason Merrill1-1/+1
A patch I was testing noticed that the allocation is too small for the placement new here, but that isn't the point of the testcase. gcc/testsuite/ChangeLog: * g++.dg/warn/Wmismatched-new-delete-5.C: Fix allocation.
2025-07-22MAINTAINERS: Add myself as C++ front end reviewerPatrick Palka1-0/+1
ChangeLog: * MAINTAINERS: Add myself as C++ front end reviewer.
2025-07-22Change __builtin_unreachable to __builtin_trap (or infinite loop) if only ↵Andrew Pinski5-1/+68
thing in function [PR109267] When we have an empty function, things can go wrong with cfi_startproc/cfi_endproc and a few other things like exceptions. So if the only thing the function does is a call to __builtin_unreachable, let's replace that with a __builtin_trap instead if the target has a trap instruction. For targets without a trap instruction defined, replace it with an infinite loop; this allows not to need for the abort call to happen but still get the correct behavior of not having two functions at the same location. The QOI idea for basic block reorder is recorded as PR 120004. Changes since v1: * v2: Move to final gimple cfg cleanup instead of expand and use BUILT_IN_UNREACHABLE_TRAP. * v3: For targets without a trap defined, create an infinite loop. Bootstrapped and tested on x86_64-linux-gnu. PR middle-end/109267 gcc/ChangeLog: * tree-cfgcleanup.cc (execute_cleanup_cfg_post_optimizing): If the first non debug statement in the first (and only) basic block is a call to __builtin_unreachable change it to a call to __builtin_trap or an infinite loop. gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_effective_target_trap): New proc. * g++.dg/missing-return.C: Update testcase for the !trap case. * gcc.dg/pr109267-1.c: New test. * gcc.dg/pr109267-2.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-07-22xtensa: Fix inaccuracy in xtensa_rtx_costs()Takayuki 'January June' Suwa2-22/+32
This patch fixes the following defects in the function: - The cost of move instructions larger than the natural word width, specifically "movd[if]_internal", cannot be estimated correctly - Floating-point or symbolic constant assignment insns cannot be identified as L32R instructions gcc/ChangeLog: * config/xtensa/xtensa.cc (xtensa_is_insn_L32R_p): Rewrite to capture insns that could be L32R machine instructions wherever possible. (xtensa_rtx_costs): Fix to consider that moves larger than a natural word can take multiple L32R machine instructions. (constantpool_address_p): Cosmetics. * config/xtensa/xtensa.md (movdi_internal, movdf_internal): Add missing insn attributes.
2025-07-22xtensa: Make relaxed MOVI instructions treated as "load" typeTakayuki 'January June' Suwa1-3/+3
The relaxed MOVI instructions in the Xtensa ISA are assignment ones that contain large integer, floating-point or symbolic constants that would not normally be allowed as immediate values by instructions in assembly code, and will instead be translated by the assembler later rather the compiler, into the L32R instructions referencing to literal pool entries containing that values (see '-mauto-litpools' Xtensa-specific option). This means that even though such instructions look like nothing more than constant value assignments in their RTL representation, these may perform better by treating them as loads from memory (i.e. the actual behavior) and also trying to avoid using the value immediately after the load, especially from an instruction scheduling perspective. gcc/ChangeLog: * config/xtensa/xtensa.md (movsi_internal, movhi_internal, movsf_internal): Change the value of the "type" attribute from "move" to "load" when the source operand constraint is "Y".
2025-07-22middle-end: Enable masked load with non-constant offsetKarl Meakin2-17/+13
The function `vect_check_gather_scatter` requires the `base` of the load to be loop-invariant and the `off`set to be not loop-invariant. When faced with a scenario where `base` is not loop-invariant, instead of giving up immediately we can try swapping the `base` and `off`, if `off` is actually loop-invariant. Previously, it would only swap if `off` was the constant zero (and so trivially loop-invariant). This is too conservative: we can still perform the swap if `off` is a more complex but still loop-invariant expression, such as a variable defined outside of the loop. This allows loops like the function below to be vectorised, if the target has masked loads and sufficiently large vector registers (eg `-march=armv8-a+sve -msve-vector-bits=128`): ```c typedef struct Array { int elems[3]; } Array; int loop(Array **pp, int len, int idx) { int nRet = 0; for (int i = 0; i < len; i++) { Array *p = pp[i]; if (p) { nRet += p->elems[idx]; } } return nRet; } ``` gcc/ChangeLog: * tree-vect-data-refs.cc (vect_check_gather_scatter): Swap `base` and `off` in more scenarios. Also assert at the end of the function that `base` and `off` are loop-invariant and not loop-invariant respectively. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/mask_load_2.c: Update tests.
2025-07-22AArch64: precommit test for masked load vectorisation.Karl Meakin1-0/+23
Commit the test file `mask_load_2.c` before the vectorisation analysis is changed, so that the changes in codegen are more obvious in the next commit. gcc/testsuite/ChangeLog: * gcc.target/aarch64/sve/mask_load_2.c: New test.
2025-07-22libstdc++: Make testsuite_iterators constexpr and expand inplace_vector ↵Tomasz Kamiński4-117/+179
tests [PR119137] All functions in testsuite_iterators.h are now marked constexpr, targeting the earliest possible standard. Most functions use C++14 due to multi-statement bodies, with exceptions: * BoundsContainer and some constructors are C++11 compatible. * OutputContainer is C++20 due to operator new/delete usage. Before C++23, each constexpr templated function requires a constexpr -suitable instantiation. Functions delegating to _GLIBCXX14_CONSTEXPR must also be _GLIBCXX14_CONSTEXPR; e.g., forward_iterator_wrapper's constructor calling input_iterator_wrapper's constructor, or operator-> calling operator*. For classes defined C++20 or later (e.g., test_range), constexpr is applied unconditionally. PR libstdc++/119137 libstdc++-v3/ChangeLog: * testsuite/23_containers/inplace_vector/cons/from_range.cc: Run iterators and range test at compile-time. * testsuite/23_containers/inplace_vector/modifiers/assign.cc: Likewise. * testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc: Likewise. * testsuite/util/testsuite_iterators.h (__gnu_test::BoundsContainer) (__gnu_test::OutputContainer, __gnu_test::WritableObject) (__gnu_test::output_iterator_wrapper, __gnu_test::input_iterator_wrapper) (__gnu_test::forward_iterator_wrapper) (__gnu_test::bidirectional_iterator_wrapper) (__gnu_test::random_access_iterator_wrapper) (__gnu_test::test_container): Add appropriate _GLIBCXXNN_CONSTEXPR macros to member functions. (__gnu_test::contiguous_iterator_wrapper) (__gnu_test::input_iterator_wrapper_rval) (__gnu_test::test_range, __gnu_test::test_range_nocopy) (__gnu_test::test_sized_range_sized_sent) (__gnu_test::test_sized_range): Add constexpr specifier to member functions.
2025-07-22[RISC-V] Restrict generic-vector-ooo DFAJeff Law1-30/+55
So while debugging Austin's work to support the spacemit x60 in the BPI we found that even though his pipeline description had mappings for all the vector instructions, they were still getting matched by the generic-vector-ooo DFA. The core problem is that DFA never restricted itself to a tune option (oops). That's easily fixed, at which time everything using generic blows up because we don't have a generic in-order vector DFA. Everything using generic was indirectly also using generic-vector-ooo for the vector instructions. It may be better long term to define a generic-vector DFA, but to preserve behavior, I'm letting generic-vector-ooo match when the generic DFA is active. Tested in my tester, waiting on pre-commit CI before moving forward. gcc/ * config/riscv/generic-vector-ooo.md: Restrict insn reservations to generic_ooo and generic tuning models.
2025-07-22tree-optimization/121202 - fix vector stmt placementRichard Biener2-1/+16
When we have a vector shift with a scalar the shift operand can be external - in that case we should not use the shift operand def as hint where to place the vector shift instruction. The ICE in the PR is because stmt dominance queries only work inside of the vector region. But we should also never place stmts outside of it. PR tree-optimization/121202 * tree-vect-slp.cc (vect_schedule_slp_node): Do not take an out-of-region stmt as "last". * gcc.dg/pr121202.c: New testcase.
2025-07-22genpreds.cc: Do not use rawmemchr for insn_constraint_lenStefan Schulze Frielinghaus1-1/+6
The GNU extension rawmemchr cannot be used. Therefore, replace it by a simple loop. gcc/ChangeLog: * genpreds.cc (write_insn_constraint_len): Replace rawmemchr by a loop.
2025-07-22ada: Nested use_type_clause with "all" cancels use_type_clause with wider scopeGary Dismukes1-1/+9
The compiler mishandles nested use_type_clauses in the case where the outer one is a normal use_type_clause and the inner one has "all". Upon leaving the scope of the inner use_type_clause, the outer one is effectively disabled, because it's not considered redundant (and in fact it's only partially redundant). This is fixed by testing for the presence of a use_type_clause for the same type that has a wider scope when ending the inner use_type_clause. gcc/ada/ChangeLog: * sem_ch8.adb (End_Use_Type): Add a test for there not being an earlier use_type_clause for the same type as an additional criterion for turning off In_Use and Current_Use_Clause.
2025-07-22ada: Only fold array attributes in SPARK when prefix is safe to evaluatePiotr Trojanek1-0/+42
Fix missing checks for prefixes of array attributes in GNATprove mode. gcc/ada/ChangeLog: * sem_attr.adb (Eval_Attribute): Only fold array attributes when prefix is static or at least safe to evaluate
2025-07-22ada: Fix minor issues in commentsRonan Desplanques2-6/+6
gcc/ada/ChangeLog: * einfo.ads (Is_Controlled_Active): Fix pasto in comment. * sem_util.ads (Propagate_Controlled_Flags): Update comment for Destructor aspect.
2025-07-22ada: Add destructors extensionRonan Desplanques12-97/+478
This patch adds a GNAT-specific extension which enables "destructors". Destructors are an optional replacement for Ada.Finalization where some aspects of the interaction with type derivation are different. gcc/ada/ChangeLog: * doc/gnat_rm/gnat_language_extensions.rst: Document new extension. * snames.ads-tmpl: Add name for new aspect. * gen_il-fields.ads (Has_Destructor, Is_Destructor): Add new fields. * gen_il-gen-gen_entities.adb (E_Procedure, Type_Kind): Add new fields. * einfo.ads (Has_Destructor, Is_Destructor): Document new fields. * aspects.ads: Add new aspect. * sem_ch13.adb (Analyze_Aspect_Specifications, Check_Aspect_At_Freeze_Point, Check_Aspect_At_End_Of_Declarations): Add semantic analysis for new aspect. (Resolve_Finalization_Procedure): New function. (Resolve_Finalizable_Argument): Use new function above. * sem_util.adb (Propagate_Controlled_Flags): Extend for new field. * freeze.adb (Freeze_Entity): Add legality check for new aspect. * exp_ch3.adb (Expand_Freeze_Record_Type, Predefined_Primitive_Bodies): Use new field. * exp_ch7.adb (Build_Finalize_Statements): Add expansion for destructors. (Make_Final_Call, Build_Record_Deep_Procs): Adapt to new Has_Destructor field. (Build_Adjust_Statements): Tweak to handle cases of empty lists. * gnat_rm.texi: Regenerate.
2025-07-22ada: Fix crash when creating extra formals for aliased typesDenis Mazzucato1-3/+4
This patch makes sure that we return the same decision for all aliased types when checking if the BIP task extra actuals are needed. gcc/ada/ChangeLog: * sem_ch6.adb (Might_Need_BIP_Task_Actuals): Before retrieving the original corresponding operation we retrieve first the root of the aliased chain.
2025-07-22ada: Fix generation of Initialize and Adjust callsRonan Desplanques6-37/+36
Before this patch, Make_Init_Call and Make_Adjust_Call made the assumption that if the type they were called with was untagged and a derived type, it was the untagged private view of a tagged type. That assumption made it possible to inspect the root type's primitives to handle the case where the underlying type was implicitly generated by the compiler without all inherited primitives. The introduction of the Finalizable aspect broke that assumption, so this patch adds a new field to type entities that make the generated full view stand out, and updates Make_Init_Call and Make_Adjust_Call to only jump to the root type when they're passed one of those generated types. Make_Final_Call and Finalize_Address are two other subprograms that perform the same test on the types they're passed. They did not suffer from the same bug as Make_Init_Call and Make_Adjust_Call because of an earlier, more ad hoc fix, but this patch switches them over to the newly introduced mechanism for the sake of consistency. gcc/ada/ChangeLog: * gen_il-fields.ads (Is_Implicit_Full_View): New field. * gen_il-gen-gen_entities.adb (Type_Kind): Use new field. * einfo.ads (Is_Implicit_Full_View): Document new field. * exp_ch7.adb (Make_Adjust_Call, Make_Init_Call, Make_Final_Call): Use new field. * exp_util.adb (Finalize_Address): Likewise. * sem_ch3.adb (Copy_And_Build): Set new field.
2025-07-22ada: Remove obsolete code from Safe_Unchecked_Type_ConversionEric Botcazou2-45/+0
That's a kludge added to work around the limitations of the stack checking mechanism used in the early days. gcc/ada/ChangeLog: * exp_util.ads (May_Generate_Large_Temp): Delete. * exp_util.adb (May_Generate_Large_Temp): Likewise. (Safe_Unchecked_Type_Conversion): Do not take stack checking into account to compute the result.
2025-07-22ada: Wrong dispatch on result in presence of dependent expressionJavier Miranda8-43/+127
The compiler generates wrong code in a dispatching call on result when the call is performed under dependent conditional expressions or case-expressions. gcc/ada/ChangeLog: * sinfo.ads (Is_Expanded_Dispatching_Call): New flag. (Tag_Propagated): New flag. * exp_ch6.adb (Expand_Call_Helper): Propagate the tag when the dispatching call is placed in conditionl expressions or case-expressions. * sem_ch5.adb (Analyze_Assignment): For assignment of tag- indeterminate expression, do not propagate the tag if previously done. * sem_disp.adb (Is_Tag_Indeterminate): Add missing support for conditional expression and case expression. * exp_disp.ads (Is_Expanded_Dispatching_Call): Removed. Function replaced by a new flag in the nodes. * exp_disp.adb (Expand_Dispatching_Call): Set a flag in the call node to remember that the call has been expanded. (Is_Expanded_Dispatching_Call): Function removed. * gen_il-fields.ads (Tag_Propagated): New flag. (Is_Expanded_Dispatching_Call): New flag. * gen_il-gen-gen_nodes.adb (Tag_Propagated): New flag. (Is_Expanded_Dispatching_Call): New flag.
2025-07-22ada: Additional condition for Capacity discriminant on bounded container ↵Gary Dismukes3-17/+29
aggregates This change test an additional condition as part of the criteria used for deciding whether to generate a call to a container type's Length function (for passing to the Empty function) when determining the size of the object to allocate for a bounded container aggregate with a "for of" iterator. An update is also made to function Empty in Ada.Containers.Bounded_Hash_Maps, adding a default to the formal Capacity, to make it consistent with other bounded containers (and to make it conformant with the Ada RM). gcc/ada/ChangeLog: * libgnat/a-cbhama.ads (Empty): Add missing default to Capacity formal. * libgnat/a-cbhama.adb (Empty): Add missing default to Capacity formal. * exp_aggr.adb (Build_Size_Expr): Test for presence of Capacity discriminant as additional criterion for generating the call to the Length function. Update comments.
2025-07-22ada: Fix assertion failure on aggregate with controlled componentEric Botcazou1-9/+4
The assertion is: pragma Assert (Side_Effect_Free (L)); in Make_Tag_Ctrl_Assignment and demonstrates that the sequence: Remove_Side_Effects (L); pragma Assert (Side_Effect_Free (L)); does not hold in this case. What happens is that Remove_Side_Effects uses a renaming to remove the side effects of L but, at the end, the renamed object is substituted back for the renamed object in the node by Expand_Renaming, which is invoked because the Is_Renaming_Of_Object flag is set on the renaming after Evaluate_Name has been invoked on its Name. This is a general discrepancy between Evaluate_Name and Side_Effect_Free of Exp_Util, coming from the call to Safe_Unchecked_Type_Conversion present in Side_Effect_Free in this case. The long term goal is probably to remove the call but, in the meantime, this change is sufficient to fix the failure. gcc/ada/ChangeLog: * exp_util.adb (Safe_Unchecked_Type_Conversion): Always return True if the expression is the prefix of an N_Selected_Component.
2025-07-22ada: Fix unnecessary extra RE_Activation_Chain_Access with No_Task_PartsDenis Mazzucato6-15/+45
This patch checks the presence of No_Task_Parts on any ancestor or inherited interface, not only its root type, since No_Task_Parts prohibits tasking for any of its descendant. In case the current subprogram is overridden/inherited, we need to return the same value we would return for the original corresponding operation. The aspect No_Task_Parts is nonoverridable and applies also when specified in a partial view. gcc/ada/ChangeLog: * sem_ch6.adb (Might_Need_BIP_Task_Actuals): Check whether No_Task_Parts is enabled in any of the derived types, or interfaces, from the user-defined primitive return type. * sem_ch13.adb (Analyze_Aspect_Specifications): Add No_Task_Parts and No_Controlled_Parts to the representation chain to be visible in the full view of private types. * aspects.ads (Nonoverridable_Aspect_Id): As per GNAT RM, No_Task_Parts is nonoverridable. * sem_util.adb (Check_Inherited_Nonoverridable_Aspects): Likewise. * sem_util.ads: Fix typo and style. * sem_disp.adb: Missing comment.
2025-07-22ada: Adding support to defer the addition of extra formalsJavier Miranda20-563/+1621
Add support to create the extra formals when the underlying type of some formal type or return type of a subprogram, subprogram type or entry is not available when the entity is frozen. For example, when a function that returns a private type is frozen before the full-view of its private type is analyzed. gcc/ada/ChangeLog: * einfo.ads (Extra_Formals): Complete documentation. (Has_First_Controlling_Parameter_Aspect): Place it in alphabetical order. (Has_Frozen_Extra_Formals): New attribute. * gen_il-fields.ads (Has_Frozen_Extra_Formals): New entity field. * gen_il-gen-gen_entities.adb (Has_Frozen_Extra_Formals): Adding new entity flag to subprograms, subprogram types, and and entries. * gen_il-internals.adb (Image): Adding Has_Frozen_Extra_Formals. * exp_ch3.adb (Build_Array_Init_Proc): Freeze its extra formals. (Build_Init_Procedure): Freeze its extra formals. (Expand_Freeze_Record_Type): For tagged types with foreign convention create the extra formals of primitives with convention Ada. * exp_ch6.ads (Create_Extra_Actuals): New subprogram. * exp_ch6.adb (Check_BIP_Actuals): Adding assertions. (Create_Extra_Actuals): New subprogram that factorizes code from Expand_Call_Helper. (Expand_Call_Helper): Adding support to defer the addition of extra actuals. Move the code that adds the extra actuals to a new subprogram. (Is_Unchecked_Union_Equality): Renamed as Is_Unchecked_Union_Predefined_ Equality_Call. * exp_ch7.adb (Create_Finalizer): Freeze its extra formals. (Wrap_Transient_Expression): Link the temporary with its relocated expression to facilitate locating the expression in the expanded code. * exp_ch9.ads (Expand_N_Entry_Declaration): Adding one formal. * exp_ch9.adb (Expand_N_Entry_Declaration): Defer the expansion of the entry if the extra formals are not available; analyze the built declarations for the record type that holds all the parameters if the expansion of the entry declaration was deferred. * exp_disp.adb (Expand_Dispatching_Call): Handle deferred extra formals. (Set_CPP_Constructors): Freeze its extra formals. * freeze.adb (Freeze_Entity): Create the extra actuals of acccess to subprograms whose designated type is a subprogram type. (Freeze_Subprogram): Adjust assertion to support deferred extra formals, and freeze extra formals of non-dispatching subprograms with foreign convention. Added assertion to check matching of formals in thunks. * sem_aux.adb (Get_Called_Entity): Adding documentation. * sem_ch3.adb (Analyze_Full_Type_Declaration): Create the extra formals of deferred subprograms, subprogram types and entries; create also the extra actuals of deferred calls. * sem_ch6.ads (Freeze_Extra_Formals): New subprogram. (Deferred_Extra_Formals_Support): New package. * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Create the extra formals of subprograms without separate spec. (Add_Extra_Formal): Add documentation. (Has_Extra_Formals): Removed. (Parent_Subprogram): Adding documentation. (Create_Extra_Formals): Defer adding extra formals if the underlying_type of some formal type or return type is not available. (Extra_Formals_Match_OK): Add missing check on the extra formals of unchecked unions. (Freeze_Extra_Formals): New subprogram. (Deferred_Extra_Formals_Support): New package. * sem_ch9.adb (Analyze_Entry_Declaration): Freeze its extra formals. * sem_ch13.adb (New_Put_Image_Subprogram): ditto. * sem_util.ads (Is_Unchecked_Union_Equality): New subprogram. * sem_util.adb (Is_Unchecked_Union_Equality): ditto.
2025-07-22ada: Tune recent change for bit-packed arrays to help GNATprove backendPiotr Trojanek1-1/+1
When GNAT is operating in GNATprove_Mode the Expander_Active flag is disabled, but we still must do things that ordinary backends expect. gcc/ada/ChangeLog: * sem_util.adb (Get_Actual_Subtype): Do the same for GCC and GNATprove backends.
2025-07-22ada: Expand continue procedure calls for GNATproveMartin Clochard1-0/+24
Continue being a non-reserved keyword, occurrences of continue may be resolved as procedure calls. Get that special case out of the way for GNATprove, in anticipation of support for continue keyword. gcc/ada/ChangeLog: * exp_spark.adb (Expand_SPARK): Add expansion of continue statements. (Expand_SPARK_N_Continue_Statement): Expand continue statements resolved as procedure calls into said procedure calls.
2025-07-22ada: Tune check for restriction No_Relative_Delay and call to Set_HandlerPiotr Trojanek1-1/+3
When checking restriction No_Relative_Delay and detecting calls to Ada.Real_Time.Timing_Events.Set_Handler with a Time_Span parameter, we looked at the exact type of the actual parameter, while we should look at its base type. This patch looks at the type of actual parameter like it is done in Expand_N_Delay_Until_Statement. gcc/ada/ChangeLog: * sem_res.adb (Resolve_Call): Look at the base type of actual parameter when checking call to Set_Handler.
2025-07-22ada: Fix wrong indirect access to bit-packed array in iterated loopEric Botcazou1-39/+21
This comes from a missing expansion of the bit-packed array reference in the loop, because the actual subtype created for the dereference lacks a Packed_Array_Impl_Type as it is ultimately created by the Preanalyze_Range call present in Analyze_Loop_Statement. gcc/ada/ChangeLog: * sem_util.adb (Get_Actual_Subtype): Only create a new subtype when the expander is active. Remove a useless test of type inequality, as well as a useless call to Set_Has_Delayed_Freeze on the subtype.
2025-07-22ada: Replace "not Present" test with "No" testGary Dismukes1-2/+1
Minor change to satisfy GNAT SAS checker. gcc/ada/ChangeLog: * exp_aggr.adb (Build_Size_Expr): Change test of "not Present (...)" to "No (...)".
2025-07-22ada: Capacity determination for container aggregate with container iteratorGary Dismukes1-5/+87
In the case of a container aggregate that has a container_element_association given by an iterator_specification that iterates over a container object (for example, "[for E of V => E]"), the compiler will now determine the number of elements in the object and can use that in determining the capacity value to be passed to the container type's Empty function when allocating space for the aggregate object. This implementation-dependent behavior is allowed by RM22 4.3.5(40/5). Prior to this enhancement, the compiler would generally use the Empty function's default value for the Capacity parameter (a value of just 10 in the current implementation of the predefined containers), which could easily lead to Capacity_Error being raised for the aggregate. Note that this is only done for aggregates of container types coming from instantiations of the predefined container generics, and not for user-defined container types (due to the special knowledge the compiler has of the availability of Length functions for the predefined types). Also, it currently only applies when the object V being iterated over is a simple object, and is not done for more complex cases, such as when V is a function call. gcc/ada/ChangeLog: * exp_aggr.adb (Build_Size_Expr): Determine the length of a container aggregate association in the case where it's an iteration over an object of a container type coming from an instantiation of a predefined container generic. Minor updates to existing comments.
2025-07-22ada: exp_util.adb: prevent infinite loop in case of broken codeGhjuvan Lacambre1-2/+7
A recent commit modified exp_util.adb in order to fix the selection of Finalize subprograms in the case of untagged objects. This introduced regressions for GNATSAS in fixedbugs by causing GNAT2SCIL to loop over the same type over and over in case of broken code. We fix this by simply checking that the loop is making progress, and if it doesn't, assume that we're done. gcc/ada/ChangeLog: * exp_util.adb (Finalize_Address): Prevent infinite loop
2025-07-22ada: Add Unique_Component_Name function for use by CCG.Steve Baird2-1/+89
Define a new function which, initially, is never called. It is intended to be called from CCG. If an Ada tagged record type has a component named Foo, then the generated corresponding C struct might have a component with the same name. This approach almost works, but breaks down in the (rare) case of an Ada record type where two or more components have the same name (this is normally illegal, but is possible in the case of an extension where some component of the parent type is not visible at the point of the extension). This new function is intended for use in coping with this case. gcc/ada/ChangeLog: * sem_aux.ads: Declare new function Unique_Component_Name. * sem_aux.adb: Implement new function Unique_Component_Name.
2025-07-22ada: Ensure Expression_Copy has a parent before analysisViljar Indus1-7/+7
Some analysis requires going up the parent chain to get the relevant context. Ensure that is done for the Expression_Copy node which is not a syntactic node. gcc/ada/ChangeLog: * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): Ensure the Expression_Copy always has a parent before calling any analyze.
2025-07-22ada: Improved support for mutably tagged typesSteve Baird7-305/+498
Fix bugs related to mutably tagged types in streaming operations, Put_Image attributes, aggregates, composite equality comparisons with mutably-tagged components, and other issues. gcc/ada/ChangeLog: * exp_aggr.adb (Build_Record_Aggr_Code.Gen_Assign): In the case of an aggregate component where the component type is mutably tagged and the component value is provided by a qualified aggregate (and qualified with a specific type), avoid incorrectly rejecting the inner aggregate for violating the rule that the type of an aggregate shall not be class-wide. * exp_attr.adb: For a predefined streaming operation (i.e., Read, Write, Input, or Output) of a class-wide type, the external name of the tag of the value is normally written out by Output and read in by Input. In the case of a mutably tagged type, this is instead done in Write and Read. * exp_ch4.adb (Expand_Composite_Equality): In the case of an equality comparison for a type having a mutably tagged component, we want the component comparison to compare two values of the mutably tagged type, not two values of the corresponding array-of-bytes-ish representation type. Even if there are no user-defined equality functions anywhere in sight, comparing the array values still doesn't work because undefined bits may end up participating in the comparison (resulting in an incorrect result of False). * exp_put_image.adb: In the case of a class-wide type, the predefined Image attribute includes the name of the specific type (and a "'" character, to follow qualified expression syntax) to indicate the tag of the value. With the introduction of mutably tagged types, this case can now arise in the case of a component (of either an enclosing array or an enclosing record), not just for a top-level object. So we factor the code to do this into a new procedure, Put_Specific_Type_Name_Qualifier, so that it can be called from more than one place. This reorganization also involves replacing the procedure Put_String_Exp with a new procedure, Put_String_Exp_To_Buffer, declared in a less nested scope. For mutably tagged components (at the source level) the component type (at the GNAT tree level) is an array of bytes (actually a two field record containing an array of bytes, but that's a detail). Appropriate conversions need to be generated so that we don't end up generating an image for an array of bytes; this is done at the same places where Put_Specific_Type_Name_Qualifier is called (for components) by calling Make_Mutably_Tagged_Conversion. * exp_strm.adb (Make_Field_Attribute): Add Make_Mutably_Tagged_Conversion call where we construct a Selected_Component node and the corresponding component type is the internal representation type for a mutably tagged type. (Stream_Base_Type): Return the mutably tagged type if given the corresponding internal representation type. * sem_ch3.adb (Array_Type_Declaration): In the case where the source-level component type of an array type is mutably tagged, set the Component_Type field of the base type of the declared array type (as opposed to that of the first subtype of the array type) to the corresponding internal representation type. * sem_ch4.adb (Analyze_Selected_Component): In the case of a selected component name which references a component whose type is the internal representation type of a mutably tagged type, generate a conversion to the mutably tagged type.
2025-07-22libstdc++: Fix obvious mistake in inplace_vector::assign_range [PR119137]Tomasz Kamiński1-1/+1
In case of input iterators, the loop that assigns to existing elements should run up to number of elements in vector (_M_size) not capacity (_Nm). PR libstdc++/119137 libstdc++-v3/ChangeLog: * include/std/inplace_vector (inplace_vector::assign_range): Replace _Nm with _M_size in the assigment loop.
2025-07-22Fix gcc.dg/vect/slp-28.cRichard Biener1-5/+4
gcc.dg/vect/slp-28.c is now vectorized as expected even on targets without vect32. * gcc.dg/vect/slp-28.c: Adjust.
2025-07-22Daily bump.GCC Administrator12-1/+504
2025-07-21[RISC-V] Add missing insn types to xiangshan.md and mips-p8700.mdJeff Law2-2/+3
This is a trivial patch to add a few missing types to pipeline models that are mostly complete. In particular this adds the "ghost" to mips-p8700.md and the "sf_vc" and "sf_vc_se" types to xiangshan.md. There are definitely some bigger issues to solve in this space. But this is a trivial fix that stands on its own. I've tested this in my tester, just waiting for pre-commit CI to do its thing. gcc/ * config/riscv/mips-p8700.md: Add support for "ghost" insn types. * config/riscv/xiangshan.md: Add support for "sf_vc" and "sf_vc_se" insn types.
2025-07-21Ada: Fix wrong tag in style check warningsEric Botcazou1-2/+4
This fixes an old issue whereby violations of the style check -gnatyc are sometimes reported as violations of -gnatyt instead. gcc/ada/ PR ada/121184 * styleg.adb (Check_Comment): Use consistent warning message.
2025-07-21cobol: Improved linemap and diagnostic handling; PIC validation. [PR120402]Robert Dubner18-233/+806
Implementation of PICTURE string validation for PR120402. Expanded some printf format attributes. Improved debugging and diagnostic messages. Improved linemap and line location tracking in support of diagnostic messages and location_t tagging of GENERIC nodes for improved GDB-COBOL performance. Assorted changes to eliminate cppcheck warnings. Co-Authored-By: James K. Lowden <jklowden@cobolworx.com> Co-Authored-By: Robert Dubner <rdubner@symas.com> gcc/cobol/ChangeLog: PR cobol/120402 * Make-lang.in: Elminate commented-out scripting. * cbldiag.h (_CBLDIAG_H): Change #if 0 to #if GCOBOL_GETENV (warn_msg): Add printf attributes. (location_dump): Add debugging message. * cdf.y: Improved linemap tracking. * genapi.cc (treeplet_fill_source): const attribute for formal parameter. (insert_nop): Created to consolidate var_decl_nop writes. (build_main_that_calls_something): Move generation to the end of executable. (level_88_helper): Formatting. (parser_call_targets_dump): Formatting. (function_pointer_from_name): const attribute for formal parameter. (parser_initialize_programs): const attribute for formal parameter. (parser_statement_begin): Improved linemap handling. (section_label): Improved linemap handling. (paragraph_label): Improved linemap handling. (pseudo_return_pop): Improved linemap handling. (leave_procedure): Formatting. (parser_enter_section): Improved linemap handling. (parser_enter_paragraph): Improved linemap handling. (parser_perform): Formatting. (parser_leave_file): Move creation of main() to this routine. (parser_enter_program): Move creation of main from here to leave_file. (parser_accept): Formatting. const attribute for formal parameter. (parser_accept_command_line): const attribute for formal parameter. (parser_accept_command_line_count): const attribute for formal parameter. (parser_accept_envar): Likewise. (parser_set_envar): Likewise. (parser_display): Likewise. (get_exhibit_name): Implement EXHIBIT verb. (parser_exhibit): Likewise. (parser_sleep): const attribute for formal parameter. (parser_division): Improved linemap handling. (parser_classify): const attribute for formal parameter. (create_iline_address_pairs): Improved linemap handling. (parser_perform_start): Likewise. (perform_inline_until): Likewise. (perform_inline_testbefore_varying): Likewise. (parser_perform_until): Likewise. (parser_perform_inline_times): Likewise. (parser_intrinsic_subst): const attribute for formal parameter. (parser_file_merge): Formatting. (create_and_call): Improved linemap handling. (mh_identical): const attribute for formal parameter. (mh_numeric_display): const attribute for formal parameter. (mh_little_endian): Likewise. (mh_source_is_group): Likewise. (psa_FldLiteralA): Formatting. * genapi.h (parser_accept): const attribute for formal parameter. (parser_accept_envar): Likewise. (parser_set_envar): Likewise. (parser_accept_command_line): Likewise. (parser_accept_command_line_count): Likewise. (parser_add): Likewise. (parser_classify): Likewise. (parser_sleep): Likewise. (parser_exhibit): Likewise. (parser_display): Likewise. (parser_initialize_programs): Likewise. (parser_intrinsic_subst): Likewise. * gengen.cc (gg_assign): Improved linemap handling. (gg_add_field_to_structure): Likewise. (gg_define_from_declaration): Likewise. (gg_build_relational_expression): Likewise. (gg_goto_label_decl): Likewise. (gg_goto): Likewise. (gg_printf): Likewise. (gg_fprintf): Likewise. (gg_memset): Likewise. (gg_memchr): Likewise. (gg_memcpy): Likewise. (gg_memmove): Likewise. (gg_strcpy): Likewise. (gg_strcmp): Likewise. (gg_strncmp): Likewise. (gg_return): Likewise. (chain_parameter_to_function): Likewise. (gg_define_function): Likewise. (gg_get_function_decl): Likewise. (gg_call_expr): Likewise. (gg_call): Likewise. (gg_call_expr_list): Likewise. (gg_exit): Likewise. (gg_abort): Likewise. (gg_strlen): Likewise. (gg_strdup): Likewise. (gg_malloc): Likewise. (gg_realloc): Likewise. (gg_free): Likewise. (gg_set_current_line_number): Likewise. (gg_get_current_line_number): Likewise. (gg_insert_into_assembler): Likewise. (token_location_override): Likewise. (gg_token_location): Likewise. * gengen.h (location_from_lineno): Likewise. (gg_set_current_line_number): Likewise. (gg_get_current_line_number): Likewise. (gg_token_location): Likewise. (current_token_location): Likewise. (current_location_minus_one): Likewise. (current_location_minus_one_clear): Likewise. (token_location_override): Likewise. * genmath.cc (fast_divide): const attribute for formal parameter. * genutil.cc (get_and_check_refstart_and_reflen): Likewise. (get_data_offset): Likewise. (refer_refmod_length): Likewise. (refer_offset): Likewise. (refer_size): Likewise. (refer_size_dest): Likewise. (refer_size_source): Likewise. (qualified_data_location): Likewise. * genutil.h (refer_offset): Likewise. (refer_size_source): Likewise. (refer_size_dest): Likewise. (qualified_data_location): Likewise. * parse.y: EVALUATE token; Implement EXHIBIT verb; Improved linemap handling. * parse_ante.h (input_file_status_notify): Improved linemap handling. (location_set): Likewise. * scan.l: PICTURE string validation. * scan_ante.h (class picture_t): PICTURE string validation. (validate_picture): Likewise. * symbols.cc (symbol_currency): Revised default currency handling. * symbols.h (symbol_currency): Likewise. * util.cc (location_from_lineno): Improved linemap handling. (current_token_location): Improved linemap handling. (current_location_minus_one): Improved linemap handling. (current_location_minus_one_clear): Improved linemap handling. (gcc_location_set_impl): Improved linemap handling. (warn_msg): Improved linemap handling. * util.h (cobol_lineno): Improved linemap handling.
2025-07-21match: Add `cmp - 1` simplification to `-icmp` [PR110949]Andrew Pinski3-1/+50
I have seen this a few places though the testcase from PR 95906 is an obvious place where this shows up for sure. This convert `cmp - 1` into `-icmp` as that form is more useful in many cases. Changes since v1: * v2: Add check for outer type's precision being greater than 1. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/110949 PR tree-optimization/95906 gcc/ChangeLog: * match.pd (cmp - 1): New pattern. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/cmp-2.c: New test. * gcc.dg/tree-ssa/max-bitcmp-1.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-07-21libstdc++: Make the default ctor of mdspan conditionally noexcept.Luc Grosheintz2-7/+42
Previously, the default ctor of mdspan was never noexcept, even if all members of mdspan were nothrow default constructible. This commit makes mdspan conditionally nothrow default constructible. A similar strengthening happens in libc++. libstdc++-v3/ChangeLog: * include/std/mdspan (mdspan::mdspan): Make default ctor conditionally noexcept. * testsuite/23_containers/mdspan/mdspan.cc: Add tests. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
2025-07-21libstdc++: Strengthen exception guarantee for mdspan methods.Luc Grosheintz3-71/+102
The mdspan::is_{,always}_{unique,strided,exhaustive} methods only call their counterparts in mdspan::mapping_type. The standard specifies that the methods of mdspan::mapping_type are noexcept, but doesn't specify if the methods of mdspan are noexcept. Libc++ strengthened the exception guarantee for these mdspan methods. This commit conditionally strengthens these methods for libstdc++. libstdc++-v3/ChangeLog: * include/std/mdspan (mdspan::is_always_unique): Make conditionally noexcept. (mdspan::is_always_exhaustive): Ditto. (mdspan::is_always_strided): Ditto. (mdspan::is_unique): Ditto. (mdspan::is_exhaustive): Ditto. (mdspan::is_strided): Ditto. * testsuite/23_containers/mdspan/layout_like.h: Make noexcept configurable. Add ThrowingLayout. * testsuite/23_containers/mdspan/mdspan.cc: Add tests for noexcept. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
2025-07-21[RISC-V] Fix wrong CFA during stack probeAndreas Schwab1-1/+1
temp1 is used by the probe loop for the step size, but we need the final address of the stack after the loop which resides in temp2. PR target/121121 * config/riscv/riscv.cc (riscv_allocate_and_probe_stack_space): Use temp2 instead of temp1 for the CFA note.