]> git.ipfire.org Git - thirdparty/gcc.git/log
thirdparty/gcc.git
3 weeks agoAuto-FDO/FDO profile comparator
Jan Hubicka [Tue, 1 Jul 2025 06:32:56 +0000 (08:32 +0200)] 
Auto-FDO/FDO profile comparator

the patch I sent from airport only worked if you produced the gcda files with
unpatched compiler.  For some reason auto-profile reading is interwinded into
gcov reading which is not necessary.  Here is cleaner version which also
makes the format bit more convenient.  One can now grep as:

grep "bb.*fdo.*very hot.*cold" *.profile | sort -n -k 5 -r | less

digits_2/30 bb 307 fdo 10273284651 (very hot) afdo 0 (auto FDO) (cold)  scaled 0 diff -10273284651, -100.00%
digits_2/30 bb 201 fdo 2295561442 (very hot) afdo 19074 (auto FDO) (cold)  scaled 1341585 diff -2294219857, -99.94%
digits_2/30 bb 203 fdo 1236123372 (very hot) afdo 9537 (auto FDO) (cold)  scaled 670792 diff -1235452580, -99.95%
digits_2/30 bb 200 fdo 1236123372 (very hot) afdo 9537 (auto FDO) (cold)  scaled 670792 diff -1235452580, -99.95%
digits_2/30 bb 202 fdo 1059438070 (very hot) afdo 9537 (auto FDO) (cold)  scaled 670792 diff -1058767278, -99.94%
new_solver/9 bb 246 fdo 413879041 (very hot) afdo 76594 (guessed) (cold)  scaled 5387299 diff -408491742, -98.70%
new_solver/9 bb 167 fdo 413792205 (very hot) afdo 76594 (guessed) (cold)  scaled 5387299 diff -408404906, -98.70%
new_solver/9 bb 159 fdo 387809230 (very hot) afdo 57182 (guessed) (cold)  scaled 4021940 diff -383787290, -98.96%
new_solver/9 bb 158 fdo 387809230 (very hot) afdo 60510 (guessed) (cold)  scaled 4256018 diff -383553212, -98.90%
new_solver/9 bb 138 fdo 387809230 (very hot) afdo 40917 (guessed) (cold)  scaled 2877929 diff -384931301, -99.26%
new_solver/9 bb 137 fdo 387809230 (very hot) afdo 43298 (guessed) (cold)  scaled 3045398 diff -384763832, -99.21%

This dumps basic blocks that do have large counts by normal profile feedback
but autofdo gives them small count (so they get cold).  These seems to be
indeed mostly basic blocks controlling loops.

gcc/ChangeLog:

* auto-profile.cc (afdo_hot_bb_threshod): New global
variable.
(maybe_hot_afdo_count_p): New function.
(autofdo_source_profile::read): Do not set up dump file;
set afdo_hot_bb_threshod.
(afdo_annotate_cfg): Handle partial training.
(afdo_callsite_hot_enough_for_early_inline):
Use maybe_hot_afdo_count_p.
(auto_profile_offline::execute): Read autofdo file.
* auto-profile.h (maybe_hot_afdo_count_p): Declare.
(afdo_hot_bb_threshold): Declare.
* coverage.cc (read_counts_file): Also set gcov_profile_info.
(coverage_init): Do not read autofdo file.
* opts.cc (enable_fdo_optimizations): Add autofdo parameter;
do not set flag_branch_probabilities and flag_profile_values
with it.
(common_handle_option): Update.
* passes.cc (finish_optimization_passes): Do not end branch
prob here.
(pass_manager::dump_profile_report): Also mark change after
autofdo pass.
* profile.cc: Include auto-profile.h
(gcov_profile_info): New global variable.
(struct afdo_fdo_record): New struture.
(compute_branch_probabilities): Record afdo profile.
(end_branch_prob): Dump afdo/fdo profile comparsion.
* profile.h (gcov_profile_info): Declarre.
* tree-profile.cc (tree_profiling): Call end_branch_prob
(pass_ipa_tree_profile::gate): Also enable with autoFDO

3 weeks agoada: Fix poor code generated for return of Out parameter with access type
Eric Botcazou [Fri, 13 Jun 2025 07:51:52 +0000 (09:51 +0200)] 
ada: Fix poor code generated for return of Out parameter with access type

The record type of the return object is unnecessarily given BLKmode.

gcc/ada/ChangeLog:

* gcc-interface/decl.cc (type_contains_only_integral_data): Do not
return false only because the type contains pointer data.

3 weeks agoada: Enforce alignment constraint for large Object_Size clauses
Eric Botcazou [Thu, 12 Jun 2025 20:31:06 +0000 (22:31 +0200)] 
ada: Enforce alignment constraint for large Object_Size clauses

The constraint is that the Object_Size must be a multiple of the alignment
in bits.  But it's enforced only when the value of the clause is lower than
the Value_Size rounded up to the alignment in bits, not for larger values.

gcc/ada/ChangeLog:

* gcc-interface/decl.cc (gnat_to_gnu_entity): Use default messages
for errors reported for Object_Size clauses.
(validate_size): Give an error for stand-alone objects of composite
types if the specified size is not a multiple of the alignment.

3 weeks agoada: Fix alignment violation for mix of aligned and misaligned composite types
Eric Botcazou [Mon, 26 May 2025 07:25:57 +0000 (09:25 +0200)] 
ada: Fix alignment violation for mix of aligned and misaligned composite types

This happens when the chain of initialization procedures is called on the
subcomponents and causes the creation of temporaries along the way out of
alignment considerations.  Now these temporaries are not necessary in the
context and were not created until recently, so this gets rid of them.

gcc/ada/ChangeLog:

* gcc-interface/trans.cc (addressable_p): Add COMPG third parameter.
<COMPONENT_REF>: Do not return true out of alignment considerations
for non-strict-alignment targets if COMPG is set.
(Call_to_gnu): Pass true as COMPG in the call to the addressable_p
predicate if the called subprogram is an initialization procedure.

3 weeks agoada: Fix wrong finalization of constrained subtype of unconstrained array type
Eric Botcazou [Tue, 6 May 2025 17:14:40 +0000 (19:14 +0200)] 
ada: Fix wrong finalization of constrained subtype of unconstrained array type

This implements the Is_Constr_Array_Subt_With_Bounds flag for allocators.

gcc/ada/ChangeLog:

* gcc-interface/trans.cc (gnat_to_gnu) <N_Allocator>: Allocate the
bounds alongside the data if the Is_Constr_Array_Subt_With_Bounds
flag is set on the designated type.
<N_Free_Statement>: Take into account the allocated bounds if the
Is_Constr_Array_Subt_With_Bounds flag is set on the designated type.

3 weeks agoada: Fix missing error on too large Component_Size not multiple of storage unit
Eric Botcazou [Thu, 1 May 2025 23:30:56 +0000 (01:30 +0200)] 
ada: Fix missing error on too large Component_Size not multiple of storage unit

This is a small regression introduced a few years ago.

gcc/ada/ChangeLog:

* gcc-interface/decl.cc (gnat_to_gnu_component_type): Validate the
Component_Size like the size of a type only if the component type
is actually packed.

3 weeks agoada: Fix check for elaboration order on subprogram body stubs
Piotr Trojanek [Mon, 16 Jun 2025 14:13:03 +0000 (16:13 +0200)] 
ada: Fix check for elaboration order on subprogram body stubs

Fix an assertion failure occurring when elaboration checks were applied to
subprogram with a separate body.

gcc/ada/ChangeLog:

* sem_elab.adb (Check_Overriding_Primitive): Find early call region
of the subprogram body declaration, not of the subprogram body stub.

3 weeks agoada: More Tbuild cleanup
Bob Duff [Mon, 16 Jun 2025 15:03:22 +0000 (11:03 -0400)] 
ada: More Tbuild cleanup

Remove "Nmake_Assert => ..." on N_Unchecked_Type_Conversion at
gen_il-gen-gen_nodes.adb:473 (was disabled).

This was left over from commit 82a794419a00ea98b68d69b64363ae6746710de9
"Tbuild cleanup".

In addition, the checks for "Is_Composite_Type" in
Tbuild.Unchecked_Convert_To are narrowed to "not Is_Scalar_Type";
that way, useless duplicate unchecked conversions of access types will
be removed as for composite types.

gcc/ada/ChangeLog:

* gen_il-gen-gen_nodes.adb (N_Unchecked_Type_Conversion):
Remove useless Nmake_Assert.
* tbuild.adb (Unchecked_Convert_To):
Narrow the bitfield-related conditions.

3 weeks agoada: Refine sanity check in Insert_Actions
Ronan Desplanques [Tue, 10 Jun 2025 10:51:26 +0000 (12:51 +0200)] 
ada: Refine sanity check in Insert_Actions

Insert_Actions performs a sanity check when it goes through an
expression with actions while going up the three. That check was not
perfectly right before this patch and spuriously failed when inserting
range checks in some situation. This patch makes the check more robust.

gcc/ada/ChangeLog:

* exp_util.adb (Insert_Actions): Fix check.

3 weeks agoada: Make comment more precise
Ronan Desplanques [Fri, 13 Jun 2025 08:34:50 +0000 (10:34 +0200)] 
ada: Make comment more precise

gcc/ada/ChangeLog:

* exp_ch6.adb (Expand_Ctrl_Function_Call): Precisify comment.

3 weeks agoada: Fix missing finalization with conditional expression in extended return
Eric Botcazou [Thu, 12 Jun 2025 19:58:49 +0000 (21:58 +0200)] 
ada: Fix missing finalization with conditional expression in extended return

Declarations of return objects are not (yet) distributed into the dependent
expressions of conditional expressions.

gcc/ada/ChangeLog:

* exp_ch6.adb (Expand_Ctrl_Function_Call): Do not bail out for the
declarations of return objects.

3 weeks agoada: Port System.Stack_Usage to CHERI
Daniel King [Thu, 12 Jun 2025 09:03:53 +0000 (10:03 +0100)] 
ada: Port System.Stack_Usage to CHERI

This unit performed integer to address conversions to calculate stack addresses
which, on a CHERI target, result in an invalid capability that triggers a
capability tag fault when dereferenced during stack filling. This patch updates
the unit to preserve addresses (capabilities) during the calculations.

The method used to determine the stack base address is also updated to CHERI.
The current method tries to get the stack base from the compiler info for the
current task. If no info is found, then as a fallback it estimates the base by
taking the address of a variable on the stack. This address is then derived to
calculate the range of addresses to fill the stack.

This fallback does not work on CHERI since taking the 'Address of a stack variable
will result in a capability with bounds restricted to that object and attempting to
write outside those bounds triggers a capability bounds fault. Instead, we add a
new function Get_Stack_Base which, on CHERI, gets the exact stack base from the
upper bound of the capability stack pointer (CSP) register. On non-CHERI platforms,
Get_Stack_Base returns the stack base from the compiler info, resulting in the same
behaviour as before on those platforms.

gcc/ada/ChangeLog:

* Makefile.rtl (LIBGNAT_TARGET_PAIRS): New unit s-tsgsba__cheri.adb for morello-freebsd.
* libgnarl/s-tassta.adb (Get_Stack_Base): New function.
* libgnarl/s-tsgsba__cheri.adb: New file for CHERI targets.
* libgnarl/s-tsgsba.adb: New default file for non-CHERI targets.
* libgnat/s-stausa.adb (Fill_Stack, Compute_Result): Port to CHERI.
* libgnat/s-stausa.ads (Initialize_Analyzer, Stack_Analyzer): Port to CHERI.

3 weeks agoada: Improve retrieval of nominal unconstrained type in extended return
Piotr Trojanek [Wed, 11 Jun 2025 22:47:38 +0000 (00:47 +0200)] 
ada: Improve retrieval of nominal unconstrained type in extended return

To reliably retrieve the nominal unconstrained type of object declared in
extended return statement we need to rely on the Original_Node.

gcc/ada/ChangeLog:

* sem_ch3.adb (Check_Return_Subtype_Indication): Use Original_Node.

3 weeks agoada: Improve retrieval of nominal unconstrained type in extended return
Piotr Trojanek [Wed, 11 Jun 2025 14:41:00 +0000 (16:41 +0200)] 
ada: Improve retrieval of nominal unconstrained type in extended return

When extended return statement declares object using an explicit subtype
indication, then it is better to recover the original unconstrained type using
the explicit subtype indication. This appears to be necessary for subtypes with
predicates.

gcc/ada/ChangeLog:

* sem_ch3.adb (Check_Return_Subtype_Indication): Use type from
explicit subtype indication, when possible.

3 weeks agoada: Adjust message about statically compatible result subtype
Piotr Trojanek [Tue, 10 Jun 2025 22:20:13 +0000 (00:20 +0200)] 
ada: Adjust message about statically compatible result subtype

Ada RM 6.5(5.3/5) is about "result SUBTYPE of the function", while the error
message was saying "result TYPE of the function". Now use the exact RM wording
in the error message for this rule.

gcc/ada/ChangeLog:

* sem_ch3.adb (Check_Return_Subtype_Indication): Adjust error message
to match the RM wording.

3 weeks agoada: Fix constraint-related legality checks in extended return statements
Piotr Trojanek [Tue, 10 Jun 2025 14:29:30 +0000 (16:29 +0200)] 
ada: Fix constraint-related legality checks in extended return statements

Legality checks in extended return statements were (almost) literally
implementing the RM rules, but the when analyzing the return object declaration
we replace the nominal subtype of that object with its constrained subtype.
(It is a bit odd to have such an expansion activity in analysis, but we already
rely on this particular expansion in quite a few places).

gcc/ada/ChangeLog:

* sem_ch3.adb (Check_Return_Subtype_Indication): Use the nominal
subtype of a return object; literally implement the RM rule about
elementary types; check for static subtype compatibility both when
the subtype is given as a subtype mark and a subtype indication.

3 weeks agoada: Fix strange holes for type with variant part reported by -gnatRh
Eric Botcazou [Mon, 9 Jun 2025 19:45:45 +0000 (21:45 +0200)] 
ada: Fix strange holes for type with variant part reported by -gnatRh

The problem is that the sorting algorithm mixes components of variants.

gcc/ada/ChangeLog:

* repinfo.adb (First_Comp_Or_Discr.Is_Placed_Before): Return True
only if the components are in the same component list.

3 weeks agoada: Fix node copy with functions as actual parameters in dispatching DIC
Denis Mazzucato [Fri, 6 Jun 2025 07:53:00 +0000 (07:53 +0000)] 
ada: Fix node copy with functions as actual parameters in dispatching DIC

When dispatching in a Default_Initial_Condition, copying the condition
node crashes if there is a, possibly nested, parameterless function as
actual parameter; there were two issues:
1. Subp_Entity in Check_Dispatching_call was uninitialized, a GNAT SAS
   finding.
2. The controlling argument update logic only tried to propagate the
   update by traversing the actual parameters, leading to a crash in
   case of parameterless functions.
This patch initializes Subp_Entity and allows the update of controlling
argument to succeed even when no traversal happened.

gcc/ada/ChangeLog:

* sem_disp.adb (Check_Dispatching_call): Fix uninitialized Subp_Entity.
* sem_util.adb (Update_Controlling_Argument): No need to replace controlling argument
in case of functions.

3 weeks agoada: Fix minor fallout of latest change
Eric Botcazou [Tue, 10 Jun 2025 08:35:09 +0000 (10:35 +0200)] 
ada: Fix minor fallout of latest change

This adjusts the header of the renamed files and adds missing blank lines.

gcc/ada/ChangeLog:

* errid.ads: Adjust header to renaming and fix copyright line.
* errid.adb: Adjust header to renaming and add blank line.
* erroutc-pretty_emitter.ads: Adjust header to renaming.
* erroutc-pretty_emitter.adb: Likewise.
* erroutc-sarif_emitter.ads: Likewise.
* erroutc-sarif_emitter.adb: Likewise.
* errsw.ads: Adjust header to renaming and add blank line.
* errsw.adb: Likewise.
* json_utils.ads: Likewise.
* json_utils.adb: Adjust header to renaming.

3 weeks agoada: Turn diagnostic object from variable to constant
Piotr Trojanek [Mon, 9 Jun 2025 14:11:48 +0000 (16:11 +0200)] 
ada: Turn diagnostic object from variable to constant

Diagnostic entries are not supposed to be modified while compiling the code.
Code cleanup; behavior is unaffected.

gcc/ada/ChangeLog:

* errid.ads (Diagnostic_Entries): Now a constant.

3 weeks agoada: Remove redundant nested aggregates from diagnostics code
Piotr Trojanek [Mon, 9 Jun 2025 14:09:35 +0000 (16:09 +0200)] 
ada: Remove redundant nested aggregates from diagnostics code

A nested aggregate with a single "others => <>" clause is equivalent to a box
itself. Code cleanup; semantics is unaffected.

gcc/ada/ChangeLog:

* errid.ads (Diagnostic_Entries): Remove nested aggregate.
* errsw.adb (Switches): Likewise.

3 weeks agoada: Fix crash with Finalizable in corner case
Ronan Desplanques [Thu, 5 Jun 2025 10:03:46 +0000 (12:03 +0200)] 
ada: Fix crash with Finalizable in corner case

The Finalizable aspect introduced controlled types for which not all the
finalization primitives exist. This patch makes Make_Deep_Record_Body
handle this case correctly.

gcc/ada/ChangeLog:

* exp_ch7.adb (Make_Deep_Record_Body): Fix case of absent Initialize
primitive.

3 weeks agoada: Refine subtypes in task-counting code
Piotr Trojanek [Thu, 5 Jun 2025 12:05:23 +0000 (14:05 +0200)] 
ada: Refine subtypes in task-counting code

Code cleanup; semantics is unaffected.

gcc/ada/ChangeLog:

* exp_ch3.adb (Count_Default_Sized_Task_Stacks): Refine subtypes of
parameters; same for callsites.

3 weeks agoada: Remove a couple of redundant calls to Set_Etype
Eric Botcazou [Thu, 5 Jun 2025 11:14:33 +0000 (13:14 +0200)] 
ada: Remove a couple of redundant calls to Set_Etype

The OK_Convert_To function already sets the Etype of its result.

gcc/ada/ChangeLog:

* exp_imgv.adb (Expand_Value_Attribute): Do not call Set_Etype on N
after rewriting it by means of OK_Convert_To.

3 weeks agoada: Fix crash with Finalizable in corner case
Ronan Desplanques [Thu, 5 Jun 2025 07:48:22 +0000 (09:48 +0200)] 
ada: Fix crash with Finalizable in corner case

Since the introduction of the Finalizable aspect, there can be types
for which Is_Controlled returns True but that don't have all three
finalization primitives. The Generate_Finalization_Actions raised an
exception in that case before this patch, which fixes the problem.

gcc/ada/ChangeLog:

* exp_aggr.adb (Generate_Finalization_Actions): Stop assuming that
initialize primitive exists.

3 weeks agoada: Fix typo in comment
Ronan Desplanques [Thu, 5 Jun 2025 08:51:20 +0000 (10:51 +0200)] 
ada: Fix typo in comment

gcc/ada/ChangeLog:

* exp_ch7.adb (Build_Record_Deep_Procs): Fix typo in comment.

3 weeks agoada: Enforce visibility of unit used as a parent instance of a child instance
Gary Dismukes [Tue, 3 Jun 2025 01:01:12 +0000 (01:01 +0000)] 
ada: Enforce visibility of unit used as a parent instance of a child instance

In cases involving instantiation of a generic child unit, the visibility
of the parent unit was mishandled, allowing the parent to be referenced
in another compilation unit that has visibility of the child instance
but no with_clause for the parent of the instance.

gcc/ada/ChangeLog:

* sem_ch12.adb (Install_Spec): Remove "not Is_Generic_Instance (Par)"
in test for setting Instance_Parent_Unit. Revise comment to no longer
say "noninstance", plus remove "???".
(Remove_Parent): Restructure if_statement to allow for both "elsif"
parts to be executed (by changing them to be separate if_statements
within an "else" part).

3 weeks agoada: Fix comment
Ronan Desplanques [Wed, 4 Jun 2025 13:08:38 +0000 (15:08 +0200)] 
ada: Fix comment

This patch fixes a misnaming of Make_Predefined_Primitive_Specs in a
comment.

gcc/ada/ChangeLog:

* exp_ch3.adb (Predefined_Primitive_Bodies): Fix comment.

3 weeks agoada: Cleanup in type support subprograms code
Piotr Trojanek [Wed, 4 Jun 2025 10:08:58 +0000 (12:08 +0200)] 
ada: Cleanup in type support subprograms code

Code cleanup; semantics is unaffected.

gcc/ada/ChangeLog:

* exp_tss.adb (TSS): Refactor IF condition to make code smaller.
* lib.adb (Increment_Serial_Number, Synchronize_Serial_Number):
Use type of renamed object when creating renaming.
* lib.ads (Unit_Record): Refine subtype of dependency number.

3 weeks agoada: Fix spurious Constraint_Error raised by 'Value of fixed-point types
Eric Botcazou [Tue, 3 Jun 2025 16:54:03 +0000 (18:54 +0200)] 
ada: Fix spurious Constraint_Error raised by 'Value of fixed-point types

This happens for very large Smalls with regard to the size of the mantissa,
because the prerequisites of the implementation used in this case are not
met, although they are documented in the head comment of Integer_To_Fixed.

This change documents them at the beginning of the body of System.Value_F
and adjusts the compiler interface accordingly.

gcc/ada/ChangeLog:

* libgnat/s-valuef.adb: Document the prerequisites more precisely.
* libgnat/a-tifiio.adb (OK_Get_32): Adjust to the prerequisites.
(OK_Get_64): Likewise.
* libgnat/a-tifiio__128.adb (OK_Get_32): Likewise.
(OK_Get_64): Likewise.
(OK_Get_128): Likewise.
* libgnat/a-wtfiio.adb (OK_Get_32): Likewise.
(OK_Get_64): Likewise.
* libgnat/a-wtfiio__128.adb (OK_Get_32): Likewise.
(OK_Get_64): Likewise.
(OK_Get_128): Likewise.
* libgnat/a-ztfiio.adb (OK_Get_32): Likewise.
(OK_Get_64): Likewise.
* libgnat/a-ztfiio__128.adb (OK_Get_32): Likewise.
(OK_Get_64): Likewise.
(OK_Get_128): Likewise.
* exp_imgv.adb (Expand_Value_Attribute): Adjust the conditions under
which the RE_Value_Fixed{32,64,128} routines are called for ordinary
fixed-point types.

3 weeks agoada: Fix comment
Ronan Desplanques [Tue, 3 Jun 2025 13:01:36 +0000 (15:01 +0200)] 
ada: Fix comment

This patch fixes a comment that wrongly stated that no dispatch entry
for deep finalize was created for limited tagged types.

gcc/ada/ChangeLog:

* exp_ch3.adb (Make_Predefined_Primitive_Specs): Fix comment.

3 weeks agoada: Fix assertion failure on finalizable aggregate
Ronan Desplanques [Mon, 2 Jun 2025 10:09:59 +0000 (12:09 +0200)] 
ada: Fix assertion failure on finalizable aggregate

The Finalizable aspect makes it possible that
Insert_Actions_In_Scope_Around is entered with an empty list of after
actions. This patch fixes a condition that was not quite right in this
case.

gcc/ada/ChangeLog:

* exp_ch7.adb (Insert_Actions_In_Scope_Around): Fix condition.

3 weeks agoada: Remove unnecessary "return;" statements
Bob Duff [Fri, 30 May 2025 18:53:41 +0000 (14:53 -0400)] 
ada: Remove unnecessary "return;" statements

A "return;" at the end of a procedure is unnecessary and
misleading. This patch removes them.

gcc/ada/ChangeLog:

* checks.adb: Remove unnecessary "return;" statements.
* eval_fat.adb: Likewise.
* exp_aggr.adb: Likewise.
* exp_attr.adb: Likewise.
* exp_ch3.adb: Likewise.
* exp_ch4.adb: Likewise.
* exp_ch5.adb: Likewise.
* exp_ch6.adb: Likewise.
* exp_unst.adb: Likewise.
* krunch.adb: Likewise.
* layout.adb: Likewise.
* libgnat/s-excdeb.adb: Likewise.
* libgnat/s-trasym__dwarf.adb: Likewise.
* par-endh.adb: Likewise.
* par-tchk.adb: Likewise.
* sem.adb: Likewise.
* sem_attr.adb: Likewise.
* sem_ch6.adb: Likewise.
* sem_elim.adb: Likewise.
* sem_eval.adb: Likewise.
* sfn_scan.adb: Likewise.

3 weeks agoada: Correct documentation of policy_identifiers for Assertion_Policy
Bob Duff [Fri, 30 May 2025 13:38:04 +0000 (09:38 -0400)] 
ada: Correct documentation of policy_identifiers for Assertion_Policy

Follow-on to gnat-945.

Change Ignore to Disable; Ignore is defined by the language,
Disable is the implementation-defined one.

Also minor code cleanup.

gcc/ada/ChangeLog:

* doc/gnat_rm/implementation_defined_characteristics.rst:
Change Ignore to Disable.
* sem_ch13.ads (Analyze_Aspect_Specifications):
Minor: Remove incorrect comment; there is no need to check
Has_Aspects (N) at the call site.
* gnat_rm.texi: Regenerate.
* gnat_ugn.texi: Regenerate.

3 weeks agoada: Remove Empty_Or_Error
Bob Duff [Fri, 30 May 2025 12:07:43 +0000 (08:07 -0400)] 
ada: Remove Empty_Or_Error

Minor stylistic improvement: Remove Empty_Or_Error, and replace
comparisons with Empty_Or_Error with "[not] in Empty | Error".
(Found while working on VAST.)

gcc/ada/ChangeLog:

* types.ads (Empty_Or_Error): Remove.
* atree.adb: Remove reference to Empty_Or_Error.
* par-endh.adb: Likewise.
* sem_ch12.adb: Likewise.
* sem_ch3.adb: Likewise.
* sem_util.adb: Likewise.
* treepr.adb: Likewise.

3 weeks agoada: Call Semantics when analyzing a renamed package
Viljar Indus [Thu, 29 May 2025 07:54:30 +0000 (10:54 +0300)] 
ada: Call Semantics when analyzing a renamed package

Calling Semantics here will additionally update the reference to
Current_Sem_Unit the renamed unit so that we will not receive
bogus visibility errors when checking for self-referential with-s.

gcc/ada/ChangeLog:

* sem_ch10.adb(Analyze_With_Clause): Call Semantics instead
of Analyze to bring Current_Sem_Unit up to date.

3 weeks agoada: Fix SPARK context discovery from within subunits
Piotr Trojanek [Wed, 28 May 2025 13:42:10 +0000 (15:42 +0200)] 
ada: Fix SPARK context discovery from within subunits

When navigating the AST to find the enclosing subprogram we must traverse
from subunits to the corresponding stub.

gcc/ada/ChangeLog:

* lib-xref-spark_specific.adb
(Enclosing_Subprogram_Or_Library_Package): Traverse subunits and body
stubs.

3 weeks agoada: Document restriction on array length
Tonu Naks [Wed, 28 May 2025 09:50:19 +0000 (09:50 +0000)] 
ada: Document restriction on array length

gcc/ada/ChangeLog:

* libgnat/i-cstrin.ads (Value): add documentation

3 weeks agoada: Fix index bounds check in Super_Delete functions and procedures
Aleksandra Pasek [Mon, 3 Mar 2025 20:09:25 +0000 (20:09 +0000)] 
ada: Fix index bounds check in Super_Delete functions and procedures

gcc/ada/ChangeLog:

* libgnat/a-strsup.adb (Super_Delete): Fix index check.
* libgnat/a-stwisu.adb (Super_Delete): Likewise.
* libgnat/a-stzsup.adb (Super_Delete): Likewise.

3 weeks agoada: Fix wrong conversion of controlled array with representation change
Eric Botcazou [Tue, 27 May 2025 11:32:18 +0000 (13:32 +0200)] 
ada: Fix wrong conversion of controlled array with representation change

The problem is that a temporary is created for the conversion because of the
representation change, and it is finalized without having been initialized.

gcc/ada/ChangeLog:

* exp_ch4.adb (Handle_Changed_Representation): Alphabetize local
variables.  Set the No_Finalize_Actions flag on the assignment.

3 weeks agoada: Support Potentially_Invalid aspect in the frontend
Joffrey Huguet [Thu, 12 Dec 2024 14:40:46 +0000 (15:40 +0100)] 
ada: Support Potentially_Invalid aspect in the frontend

The Potentially_Invalid aspect is used to disable the SPARK assumption
that all read data is valid on a case-by-case basis in GNATprove.

gcc/ada/ChangeLog:

* aspects.ads: Define an identifier for Potentially_Invalid.
* doc/gnat_rm/implementation_defined_aspects.rst: Add section for Potentially_Invalid.
* sem_attr.adb (Analyze_Attribute_Old_Result): Attribute Old is allowed to occur in a
Potentially_Invalid aspect.
* sem_ch13.adb (Analyze_Aspect_Specifications): Handle Potentially_Invalid.
* sem_util.adb (Has_Potentially_Invalid): Returns True iff an entity is subject to the
Potentially_Invalid aspect.
* sem_util.ads (Has_Potentially_Invalid): Idem.
* snames.ads-tmpl: New name for Potentially_Invalid.
* gnat_rm.texi: Regenerate.

3 weeks agoada: Fix ALI elaboration flags for ghost compilation units (cont.)
Piotr Trojanek [Tue, 27 May 2025 10:17:06 +0000 (12:17 +0200)] 
ada: Fix ALI elaboration flags for ghost compilation units (cont.)

When GNAT was compiling a ghost unit, the ALI file wrongly suggested that this
unit required elaboration counters, which caused linking errors to non-existing
objects.

gcc/ada/ChangeLog:

* sem_ch10.adb (Analyze_Compilation_Unit): Ignored ghost unit need no
elaboration checks.

3 weeks agoada: Use consistent truncation of 'Value for decimal fixed-point types
Eric Botcazou [Mon, 26 May 2025 21:56:47 +0000 (23:56 +0200)] 
ada: Use consistent truncation of 'Value for decimal fixed-point types

This uses truncation for all bases instead of for base 10 only.

gcc/ada/ChangeLog:

* libgnat/s-valued.adb (Integer_to_Decimal): Use truncation for the
scaled divide operation performed for bases other than 10.

3 weeks agotree-optimization/118669 - fixup wrongly aligned loads/stores
Richard Biener [Wed, 2 Jul 2025 07:30:05 +0000 (09:30 +0200)] 
tree-optimization/118669 - fixup wrongly aligned loads/stores

The vectorizer tracks alignment of datarefs with dr_aligned
and dr_unaligned_supported but that's aligned with respect to
the target alignment which can be less aligned than the mode
used for the access.  The following fixes this discrepancy
for vectorizing loads and stores.  The issue is visible for
aarch64 SVE and risc-v where VLA vector modes have larger than
element alignment but the target handles element alignment
just fine.

PR tree-optimization/118669
* tree-vect-stmts.cc (vectorizable_load): Emit loads
with proper (element) alignment.
(vectorizable_store): Likewise.

3 weeks agox86-64: Add RDI clobber to 64-bit dynamic TLS patterns
H.J. Lu [Thu, 3 Jul 2025 02:54:39 +0000 (10:54 +0800)] 
x86-64: Add RDI clobber to 64-bit dynamic TLS patterns

*tls_global_dynamic_64_largepic, *tls_local_dynamic_64_<mode> and
*tls_local_dynamic_base_64_largepic use RDI as the __tls_get_addr
argument.  Add RDI clobber to these patterns to show it.

gcc/

PR target/120908
* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
gen_tls_local_dynamic_64.
* config/i386/i386.md (*tls_global_dynamic_64_largepic): Add
RDI clobber and use it to generate LEA.
(*tls_local_dynamic_64_<mode>): Likewise.
(*tls_local_dynamic_base_64_largepic): Likewise.
(@tls_local_dynamic_64_<mode>): Add a clobber.

gcc/testsuite/

PR target/120908
* gcc.target/i386/pr120908.c: New test.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
4 weeks agoc++: uninitialized TARGET_EXPR and constexpr [PR120684]
Jason Merrill [Wed, 2 Jul 2025 22:03:57 +0000 (18:03 -0400)] 
c++: uninitialized TARGET_EXPR and constexpr [PR120684]

In r15-7532 for PR118856 I introduced a TARGET_EXPR with a
TARGET_EXPR_INITIAL of void_node to express that no initialization is done.
And indeed evaluating that doesn't store a value for the TARGET_EXPR_SLOT
variable.

But then at the end of the full-expression, destroy_value stores void_node
to express that its lifetime has ended.  If we evaluate the same
full-expression again, global_ctx->values still holds the void_node, causing
confusion when we try to destroy it again.  So clear out any value before
evaluating a TARGET_EXPR_INITIAL of void_type.

PR c++/120684
PR c++/118856

gcc/cp/ChangeLog:

* constexpr.cc (cxx_eval_constant_expression) [TARGET_EXPR]: Clear
the value first if is_complex.

gcc/testsuite/ChangeLog:

* g++.dg/cpp23/range-for10.C: New test.

4 weeks agoDaily bump.
GCC Administrator [Thu, 3 Jul 2025 00:17:51 +0000 (00:17 +0000)] 
Daily bump.

4 weeks agox86-64: Add RDI clobber to tls_global_dynamic_64 patterns
H.J. Lu [Tue, 1 Jul 2025 09:17:06 +0000 (17:17 +0800)] 
x86-64: Add RDI clobber to tls_global_dynamic_64 patterns

*tls_global_dynamic_64_<mode> uses RDI as the __tls_get_addr argument.
Add RDI clobber to tls_global_dynamic_64 patterns to show it.

PR target/120908
* config/i386/i386.cc (legitimize_tls_address): Pass RDI to
gen_tls_global_dynamic_64.
* config/i386/i386.md (*tls_global_dynamic_64_<mode>): Add RDI
clobber and use it to generate LEA.
(@tls_global_dynamic_64_<mode>): Add a clobber.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
4 weeks agoRISC-V: testsuite: Skip tests providing -march/-mcpu for ILP32E/ILP64E ABIs
Dimitar Dimitrov [Fri, 20 Jun 2025 17:57:15 +0000 (20:57 +0300)] 
RISC-V: testsuite: Skip tests providing -march/-mcpu for ILP32E/ILP64E ABIs

Some test cases explicitly set -march or -mcpu with extensions which
are not compatible with the E ABI variants.  This leads to spurious
errors when toolchain has been configured for RV32E base ISA and
ILP32E ABI:
  cc1: error: ILP32E ABI does not support the 'D' extension

Also, test gcc.target/riscv/rvv/base/pr119164.c implicitly requires
rv64 since it explicitly selects -march=rv64gcv_zvl256b:
  cc1: error: ABI requires '-march=rv32'

Testing done:
 - Ensured cross riscv64-unknown-linux-gnu has no difference in test
   output with and without the patch.
 - For riscv32-unknown-elf  there are no new failures. Test case pr119164.c
   no longer fails and is now marked as unsupported.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/mcpu-xt-c908.c: Disable for E ABI variants.
* gcc.target/riscv/mcpu-xt-c908v.c: Ditto.
* gcc.target/riscv/mcpu-xt-c910.c: Ditto.
* gcc.target/riscv/mcpu-xt-c910v2.c: Ditto.
* gcc.target/riscv/mcpu-xt-c920.c: Ditto.
* gcc.target/riscv/mcpu-xt-c920v2.c: Ditto.
* gcc.target/riscv/pr118241.c: Ditto.
* gcc.target/riscv/pr120223.c: Ditto.
* gcc.target/riscv/rvv/base/pr119164.c: Disable for E ABI variants
and for 32-bit ISA.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
4 weeks ago[PATCH] [RISC-V] Fix shift type for RVV interleaved stepped patterns [PR120356]
Alexey Merzlyakov [Wed, 2 Jul 2025 17:29:00 +0000 (11:29 -0600)] 
[PATCH] [RISC-V] Fix shift type for RVV interleaved stepped patterns [PR120356]

It corrects the shift type of interleaved stepped patterns for const vector
expanding in LRA. The shift instruction was initially LSHIFTRT, and it seems
still should be the same type for both LRA and other cases.

PR target/120356

gcc/ChangeLog:

* config/riscv/riscv-v.cc
(expand_const_vector_interleaved_stepped_npatterns):
Fix ASHIFT to LSHIFTRT insn.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/rvv/autovec/pr120356.c: New test.

4 weeks agolibstdc++: Use hidden friends for __normal_iterator operators
Jonathan Wakely [Wed, 27 Nov 2024 20:58:29 +0000 (20:58 +0000)] 
libstdc++: Use hidden friends for __normal_iterator operators

As suggested by Jason, this makes all __normal_iterator operators into
friends so they can be found by ADL and don't need to be separately
exported in module std.

The operator<=> comparing two iterators of the same type is removed
entirely, instead of being made a hidden friend. That overload was added
by r12-5882-g2c7fb16b5283cf to deal with unconstrained operator
overloads found by ADL, as defined in the testsuite_greedy_ops.h header.
We don't actually test that case as there's no unconstrained <=> in that
header, and it doesn't seem reasonable for anybody to define such an
operator<=> in C++20 when they should constrain their overloads properly
(e.g. using a requires-clause). The homogeneous operator<=> overloads
added for reverse_iterator and move_iterator could also be removed, but
that's not part of this commit.

I also had to reorder the __attribute__((always_inline)) and
[[nodiscard]] attributes on the pre-c++20 operators, because Clang won't
allow [[foo]] after __attribute__((bar)) on a friend function:

<source>:4:36: error: an attribute list cannot appear here
    4 |     __attribute__((always_inline)) [[nodiscard]] friend bool
      |                                    ^~~~~~~~~~~~~

libstdc++-v3/ChangeLog:

* include/bits/stl_iterator.h (__normal_iterator): Make all
non-member operators hidden friends, except ...
(operator<=>(__normal_iterator<I,C>, __normal_iterator<I,C>)):
Remove.
* src/c++11/string-inst.cc: Remove explicit instantiations of
operators that are no longer templates.
* src/c++23/std.cc.in (__gnu_cxx): Do not export operators for
__normal_iterator.

Reviewed-by: Patrick Palka <ppalka@redhat.com>
4 weeks agoDo not query further vector epilogues after a masked epilogue
Richard Biener [Wed, 2 Jul 2025 11:44:59 +0000 (13:44 +0200)] 
Do not query further vector epilogues after a masked epilogue

When doing --param vect-partial-vector-usage=1 we'd continue querying
the target whether it wants more vector epilogues, but when it comes
back with a suggestion we then might iterate endlessly.  Do not
even ask the target when we decided for the last epilogue to be
one with partial vectors.

PR tree-optimization/120927
* tree-vect-loop.cc (vect_analyze_loop): Stop querying
further epilogues after one with partial vectors.

4 weeks agolibstdc++: make range view ctors explicit (P2711) [PR119744]
Nathan Myers [Tue, 1 Jul 2025 00:01:10 +0000 (20:01 -0400)] 
libstdc++: make range view ctors explicit (P2711) [PR119744]

Make range view constructors explicit, per P2711. Technically, this
is a breaking change, but it is unlikely to break any production
code, as reliance on non-explicit construction is unidiomatic..

libstdc++-v3/ChangeLog
PR libstdc++/119744
* include/std/ranges: View ctors become explicit.

4 weeks agoi386: Change Diamond Rapids feature detect when model number could not be distinguished
Haochen Jiang [Tue, 1 Jul 2025 06:02:36 +0000 (14:02 +0800)] 
i386: Change Diamond Rapids feature detect when model number could not be distinguished

We will use AMX-FP8 for DMR since it is a smaller and more unique feature.

gcc/ChangeLog:

* config/i386/driver-i386.cc (host_detect_local_cpu): Change
to AMX-FP8 for Diamond Rapids.

4 weeks agoDaily bump.
GCC Administrator [Wed, 2 Jul 2025 00:19:39 +0000 (00:19 +0000)] 
Daily bump.

4 weeks agoUse the counted_by attribute of pointers in array bound checker.
Qing Zhao [Mon, 16 Jun 2025 21:08:32 +0000 (21:08 +0000)] 
Use the counted_by attribute of pointers in array bound checker.

Current array bound checker only instruments ARRAY_REF, and the INDEX
information is the 2nd operand of the ARRAY_REF.

When extending the array bound checker to pointer references with
counted_by attributes, the hardest part is to get the INDEX of the
corresponding array ref from the offset computation expression of
the pointer ref.  I.e.

Given an OFFSET expression, and the ELEMENT_SIZE,
get the index expression from the OFFSET.
For example:
  OFFSET:
   ((long unsigned int) m * (long unsigned int) SAVE_EXPR <n>) * 4
  ELEMENT_SIZE:
   (sizetype) SAVE_EXPR <n> * 4
get the index as (long unsigned int) m.

gcc/c-family/ChangeLog:

* c-gimplify.cc (is_address_with_access_with_size): New function.
(ubsan_walk_array_refs_r): Instrument an INDIRECT_REF whose base
address is .ACCESS_WITH_SIZE or an address computation whose base
address is .ACCESS_WITH_SIZE.
* c-ubsan.cc (ubsan_instrument_bounds_pointer_address): New function.
(struct factor_t): New structure.
(get_factors_from_mul_expr): New function.
(get_index_from_offset): New function.
(get_index_from_pointer_addr_expr): New function.
(is_instrumentable_pointer_array_address): New function.
(ubsan_array_ref_instrumented_p): Change prototype.
Handle MEM_REF in addtional to ARRAY_REF.
(ubsan_maybe_instrument_array_ref): Handle MEM_REF in addtional
to ARRAY_REF.

gcc/testsuite/ChangeLog:

* gcc.dg/ubsan/pointer-counted-by-bounds-2.c: New test.
* gcc.dg/ubsan/pointer-counted-by-bounds-3.c: New test.
* gcc.dg/ubsan/pointer-counted-by-bounds-4.c: New test.
* gcc.dg/ubsan/pointer-counted-by-bounds-5.c: New test.
* gcc.dg/ubsan/pointer-counted-by-bounds.c: New test.

4 weeks agoUse the counted_by attribute of pointers in builtinin-object-size.
Qing Zhao [Mon, 16 Jun 2025 20:58:40 +0000 (20:58 +0000)] 
Use the counted_by attribute of pointers in builtinin-object-size.

gcc/ChangeLog:

* tree-object-size.cc (access_with_size_object_size): Update comments
for pointers with .ACCESS_WITH_SIZE.
(collect_object_sizes_for): Propagate size info through GIMPLE_ASSIGN
for pointers with .ACCESS_WITH_SIZE.

gcc/testsuite/ChangeLog:

* gcc.dg/pointer-counted-by-4-char.c: New test.
* gcc.dg/pointer-counted-by-4-float.c: New test.
* gcc.dg/pointer-counted-by-4-struct.c: New test.
* gcc.dg/pointer-counted-by-4-union.c: New test.
* gcc.dg/pointer-counted-by-4.c: New test.
* gcc.dg/pointer-counted-by-5.c: New test.
* gcc.dg/pointer-counted-by-6.c: New test.
* gcc.dg/pointer-counted-by-7.c: New test.

4 weeks agoExtend "counted_by" attribute to pointer fields of structures. Convert a pointer...
Qing Zhao [Mon, 16 Jun 2025 17:54:24 +0000 (17:54 +0000)] 
Extend "counted_by" attribute to pointer fields of structures. Convert a pointer reference with counted_by attribute to .ACCESS_WITH_SIZE.

For example:

struct PP {
  size_t count2;
  char other1;
  char *array2 __attribute__ ((counted_by (count2)));
  int other2;
} *pp;

specifies that the "array2" is an array that is pointed by the
pointer field, and its number of elements is given by the field
"count2" in the same structure.

gcc/c-family/ChangeLog:

* c-attribs.cc (handle_counted_by_attribute): Accept counted_by
attribute for pointer fields.

gcc/c/ChangeLog:

* c-decl.cc (verify_counted_by_attribute): Change the 2nd argument
to a vector of fields with counted_by attribute. Verify all fields
in this vector.
(finish_struct): Collect all the fields with counted_by attribute
to a vector and pass this vector to verify_counted_by_attribute.
* c-typeck.cc (build_counted_by_ref): Handle pointers with counted_by.
Add one more argument, issue error when the pointee type is a structure
or union including a flexible array member.
(build_access_with_size_for_counted_by): Handle pointers with counted_by.
(handle_counted_by_for_component_ref): Call build_counted_by_ref
with the new prototype.

gcc/ChangeLog:

* doc/extend.texi: Extend counted_by attribute to pointer fields in
structures. Add one more requirement to pointers with counted_by
attribute.

gcc/testsuite/ChangeLog:

* gcc.dg/flex-array-counted-by.c: Update test.
* gcc.dg/pointer-counted-by-1.c: New test.
* gcc.dg/pointer-counted-by-2.c: New test.
* gcc.dg/pointer-counted-by-3.c: New test.
* gcc.dg/pointer-counted-by.c: New test.

4 weeks agoFortran: fix minor issues with coarrays
Harald Anlauf [Tue, 1 Jul 2025 19:41:53 +0000 (21:41 +0200)] 
Fortran: fix minor issues with coarrays

gcc/fortran/ChangeLog:

* coarray.cc (check_add_new_component): Treat pure and elemental
intrinsic functions the same as non-intrinsic ones.
(create_caf_add_data_parameter_type): Fix front-end memleaks.
* trans-intrinsic.cc (conv_caf_func_index): Likewise.

4 weeks agocobol: Respect error in cobol.install-common.
James K. Lowden [Tue, 1 Jul 2025 17:51:44 +0000 (13:51 -0400)] 
cobol: Respect error in cobol.install-common.

If GCOBOL_INSTALL_NAME fails to install, do not install GCOBC_INSTALL_NAME.

gcc/cobol/ChangeLog:

* Make-lang.in: Use && instead of semicolon between commands.

4 weeks agolibstdc++: Use ranges::iter_move in ranges::remove_if [PR120789]
Patrick Palka [Tue, 1 Jul 2025 17:43:12 +0000 (13:43 -0400)] 
libstdc++: Use ranges::iter_move in ranges::remove_if [PR120789]

PR libstdc++/120789

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (__remove_if_fn::operator()): Use
ranges::iter_move(iter) instead of std::move(*iter).
* testsuite/25_algorithms/remove_if/120789.cc: New test.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
4 weeks agolibstdc++: Use ranges::iter_move in ranges::unique [PR120789]
Patrick Palka [Tue, 1 Jul 2025 17:43:09 +0000 (13:43 -0400)] 
libstdc++: Use ranges::iter_move in ranges::unique [PR120789]

PR libstdc++/120789

libstdc++-v3/ChangeLog:

* include/bits/ranges_algo.h (__unique_fn::operator()): Use
ranges::iter_move(iter) instead of std::move(*iter).
* testsuite/25_algorithms/unique/120789.cc: New test.

Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
4 weeks agotestsuite: Fix up gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c test (test...
Jakub Jelinek [Tue, 1 Jul 2025 17:37:39 +0000 (19:37 +0200)] 
testsuite: Fix up gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c test (test UB) [PR120919]

In my reading of the test and the instructions emitted by the
builtins, it invokes UB 4 times, each time overwriting one byte
after some variable (sc, then ss, then si and then sll).
If we are lucky, like at -O0 -mcpu=power10, there is just padding
there or something that doesn't make the tests fail, if unlucky
like with -O0 -mcpu=power10 -fstack-protector-strong,
&sc + 1 == &expected_sc
and so it overwrites the expected_sc variable.
The test fails when testing with
RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector-strong}'"
on power10.

The following patch fixes that by using arrays of 2 elements, so that
the overwriting of 1 byte happens to the part of the same variable.

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

PR testsuite/120919
* gcc.target/powerpc/builtin_altivec_tr_stxvr_runnable.c (main): Change
sc, ss, si and sll vars from scalars to arrays of 2 elements,
initialize and test just the first one though.

4 weeks agoPR modula2/120912: Request for a procedure to obtain a file from an IOChan
Gaius Mulley [Tue, 1 Jul 2025 17:21:15 +0000 (18:21 +0100)] 
PR modula2/120912: Request for a procedure to obtain a file from an IOChan

This patch introduces the procedure GetFile into the supplementary
ISO style library IOChanUtils.

gcc/m2/ChangeLog:

PR modula2/120912
* gm2-libs-iso/IOChanUtils.def (GetFile): New procedure function.
* gm2-libs-iso/IOChanUtils.mod (GetFile): New procedure function.

Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
4 weeks agoAda: Fix assertion failure for Finalizable aspect on tagged type
Eric Botcazou [Tue, 1 Jul 2025 17:17:06 +0000 (19:17 +0200)] 
Ada: Fix assertion failure for Finalizable aspect on tagged type

This fixes an assertion failure for the Finalizable aspect applied on a
tagged type with discriminant-dependent component.

gcc/ada/
PR ada/120705
* exp_ch6.adb (Needs_BIP_Collection): Always return False if the
type has relaxed finalization.

gcc/testsuite/
* gnat.dg/specs/finalizable2.ads: New test.

4 weeks agocobol: Repair printf format of size_t.
Robert Dubner [Tue, 1 Jul 2025 16:02:21 +0000 (12:02 -0400)] 
cobol: Repair printf format of size_t.

gcc/cobol/ChangeLog:

* parse.y: printf() of size_t is %zu, not %ld.

4 weeks agos390: Add -fno-stack-protector to 3 tests
Jakub Jelinek [Tue, 1 Jul 2025 15:33:32 +0000 (17:33 +0200)] 
s390: Add -fno-stack-protector to 3 tests

In Fedora/RHEL we usually test with
make check RUNTESTFLAGS="--target_board=unix/'{,-fstack-protector-strong}'"
because -fstack-protector-strong is used when building pretty much all the
packages.

In the past Marek Polacek has committed tweaks to various tests to make
them PASS in such testing, see e.g. r14-6276 or r14-2200.
These 3 tests FAIL with -fstack-protector-strong on s390x because they
use check-function-bodies and aren't prepared for the extra
-fstack-protector-{strong,all} extra code in the prologue/epilogue.

The following patch should fix that.

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

* gcc.target/s390/vector/vec-abs-emu.c: Add -fno-stack-protector
to dg-options.
* gcc.target/s390/vector/vec-max-emu.c: Likewise.
* gcc.target/s390/vector/vec-min-emu.c: Likewise.

4 weeks agocobol: Update test case for intrinsic function syntax.
Robert Dubner [Tue, 1 Jul 2025 15:07:18 +0000 (11:07 -0400)] 
cobol: Update test case for intrinsic function syntax.

gcc/testsuite/ChangeLog:

* cobol.dg/group2/Intrinsics_without_FUNCTION_keyword__2_.cob:
Append INTRINSIC keyword.

4 weeks agoc++: Fix up cp_build_array_ref COND_EXPR handling [PR120471]
Jakub Jelinek [Tue, 1 Jul 2025 13:28:10 +0000 (15:28 +0200)] 
c++: Fix up cp_build_array_ref COND_EXPR handling [PR120471]

The following testcase is miscompiled since the introduction of UBSan,
cp_build_array_ref COND_EXPR handling replaces
(cond ? a : b)[idx] with cond ? a[idx] : b[idx], but if there are
SAVE_EXPRs inside of idx, they will be evaluated just in one of the
branches and the other uses uninitialized temporaries.

Fixed by keeping doing what it did if idx doesn't have side effects
and is invariant.  Otherwise if op1/op2 are ARRAY_TYPE arrays with
invariant addresses or pointers with invariant values, use
SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as a new condition
and SAVE_EXPR <idx> instead of idx for the recursive calls.
Otherwise punt, but if op1/op2 are ARRAY_TYPE, furthermore call
cp_default_conversion on array, so that COND_EXPR with ARRAY_TYPE doesn't
survive in the IL until expansion.

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

PR c++/120471
gcc/
* tree.h (address_invariant_p): New function.
* tree.cc (address_invariant_p): New function.
(tree_invariant_p_1): Use it for ADDR_EXPR handling.  Formatting
tweak.
gcc/cp/
* typeck.cc (cp_build_array_ref) <case COND_EXPR>: If idx is not
INTEGER_CST, don't optimize the case (but cp_default_conversion on
array early if it has ARRAY_TYPE) or use
SAVE_EXPR <op0>, SAVE_EXPR <idx>, SAVE_EXPR <op0> as new op0 depending
on flag_strong_eval_order and whether op1 and op2 are arrays with
invariant address or tree invariant pointers.  Formatting fixes.
gcc/testsuite/
* g++.dg/ubsan/pr120471.C: New test.
* g++.dg/parse/pr120471.C: New test.

4 weeks agoAArch64 SIMD: convert mvn+shrn into mvni+subhn
Remi Machet [Tue, 1 Jul 2025 12:45:04 +0000 (13:45 +0100)] 
AArch64 SIMD: convert mvn+shrn into mvni+subhn

Add an optimization to aarch64 SIMD converting mvn+shrn into mvni+subhn when
possible, which allows for better optimization when the code is inside a loop
by using a constant.

The conversion is based on the fact that for an unsigned integer:
  -x = ~x + 1 => ~x = -1 - x
thus '(u8)(~x >> imm)' is equivalent to '(u8)(((u16)-1 - x) >> imm)'.

For the following function:
uint8x8_t neg_narrow_v8hi(uint16x8_t a) {
  uint16x8_t b = vmvnq_u16(a);
  return vshrn_n_u16(b, 8);
}

Without this patch the assembly look like:
not v0.16b, v0.16b
shrn v0.8b, v0.8h, 8

After the patch it becomes:
mvni v31.4s, 0
subhn v0.8b, v31.8h, v0.8h

Bootstrapped and regtested on aarch64-linux-gnu.

Signed-off-by: Remi Machet <rmachet@nvidia.com>
gcc/ChangeLog:

* config/aarch64/aarch64-simd.md (*shrn_to_subhn_<mode>): Add pattern
converting mvn+shrn into mvni+subhn.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/simd/shrn2subhn.c: New test.

4 weeks agoFortran: Ensure arguments in coarray call get unique components in add_data [PR120847]
Andre Vehreschild [Fri, 27 Jun 2025 13:31:21 +0000 (15:31 +0200)] 
Fortran: Ensure arguments in coarray call get unique components in add_data [PR120847]

PR fortran/120847

gcc/fortran/ChangeLog:

* coarray.cc (check_add_new_comp_handle_array): Make the count
of components static to be able to create more than one.  Create
an array component only for array expressions.

gcc/testsuite/ChangeLog:

* gfortran.dg/coarray/coindexed_7.f90: New test.

4 weeks agolibstdc++: Implement default_accessor from mdspan.
Luc Grosheintz [Mon, 30 Jun 2025 07:23:16 +0000 (09:23 +0200)] 
libstdc++: Implement default_accessor from mdspan.

libstdc++-v3/ChangeLog:

* include/std/mdspan (default_accessor): New class.
* src/c++23/std.cc.in: Register default_accessor.
* testsuite/23_containers/mdspan/accessors/default.cc: New test.
* testsuite/23_containers/mdspan/accessors/default_neg.cc: New test.

Signed-off-by: Luc Grosheintz <luc.grosheintz@gmail.com>
4 weeks agotestsuite: Fix up pr119318.c test for big-endian [PR120082]
Jakub Jelinek [Tue, 1 Jul 2025 09:58:28 +0000 (11:58 +0200)] 
testsuite: Fix up pr119318.c test for big-endian [PR120082]

The test is not endianess clean, x[0] is supposed to be ((__int128)0x19)<<32
on little endian - 0x19 is in the second vector elt - but ((__int128)0x19)<<64
on big endian.  I've added also verification of int and __int128 sizes just
in case we have say 16-bit or 64-bit int target with __int128 type, or
pdp endian gets __int128 support.

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

PR ipa/119318
PR testsuite/120082
* gcc.dg/ipa/pr119318.c (main): Expect different result on big endian
from little endian, on unexpected endianness or int/int128 sizes don't
test anything.  Formatting fixes.

4 weeks agotestsuite: i386: Fix gcc.target/i386/preserve-none-1.c on Solaris/x86
Rainer Orth [Tue, 1 Jul 2025 09:47:58 +0000 (11:47 +0200)] 
testsuite: i386: Fix gcc.target/i386/preserve-none-1.c on Solaris/x86

The new gcc.target/i386/preserve-none-1.c test currently FAILs on
Solaris/x86:

FAIL: gcc.target/i386/preserve-none-1.c scan-assembler-not movq

It needs -fomit-frame-pointer which this patch adds.

Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu.

2025-06-27  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/testsuite:
* gcc.target/i386/preserve-none-1.c (dg-options): Add
-fomit-frame-pointer.

4 weeks agotestsuite: i386: Fix g++.target/i386/memset-pr101366-1.C etc. on Solaris/x86
Rainer Orth [Tue, 1 Jul 2025 09:31:00 +0000 (11:31 +0200)] 
testsuite: i386: Fix  g++.target/i386/memset-pr101366-1.C etc. on Solaris/x86

Several new tests from

commit d073bb6cfc219d4b6c283a0b527ee88b42e640e0
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Mar 18 18:43:10 2021 -0700

    x86: Update memcpy/memset inline strategies for -mtune=generic

FAIL on Solaris/x86:

FAIL: g++.target/i386/memset-pr101366-1.C   check-function-bodies _Z4TestPc
FAIL: g++.target/i386/memset-pr101366-2.C   check-function-bodies _Z4TestPc
FAIL: g++.target/i386/memset-pr108585-1a.C   check-function-bodies _Z6squarei
FAIL: g++.target/i386/memset-pr108585-1b.C   check-function-bodies _Z6squarei
FAIL: g++.target/i386/memset-pr118276-1a.C   check-function-bodies _Z22makeDefaultConstructedv
FAIL: g++.target/i386/memset-pr118276-1b.C   check-function-bodies _Z22makeDefaultConstructedv
FAIL: g++.target/i386/memset-pr118276-1c.C   check-function-bodies _Z22makeDefaultConstructedv
FAIL: gcc.target/i386/memset-pr70308-1a.c check-function-bodies foo
FAIL: gcc.target/i386/memset-pr70308-1b.c check-function-bodies foo
FAIL: gcc.target/i386/memset-strategy-25.c check-function-bodies foo
FAIL: gcc.target/i386/memset-strategy-28.c check-function-bodies foo
FAIL: gcc.target/i386/memset-strategy-29.c check-function-bodies foo
FAIL: gcc.target/i386/memset-strategy-30.c check-function-bodies foo
FAIL: gcc.target/i386/pr92080-17.c check-function-bodies foo

The issue is the same as in

https://gcc.gnu.org/pipermail/gcc-patches/2025-March/679330.html

All the tests need -fasynchronous-unwind-tables -fdwarf2-cfi-asm, some
also -fomit-frame-pointer and -mno-stackrealign.

Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu.

2025-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

gcc/testsuite:
* g++.target/i386/memset-pr101366-1.C (dg-options): Add
-fasynchronous-unwind-tables -fdwarf2-cfi-asm.
* g++.target/i386/memset-pr101366-2.C: Likewise.
* g++.target/i386/memset-pr118276-1a.C: Likewise.
* g++.target/i386/memset-pr118276-1b.C: Likewise.
* g++.target/i386/memset-pr118276-1c.C: Likewise.
* gcc.target/i386/memset-pr70308-1a.c: Likewise.
* gcc.target/i386/memset-strategy-25.c: Likewise.
* gcc.target/i386/memset-strategy-28.c: Likewise.
* gcc.target/i386/memset-strategy-29.c: Likewise.
* gcc.target/i386/memset-strategy-30.c: Likewise.
* gcc.target/i386/pr92080-17.c: Likewise.
* gcc.target/i386/memset-pr70308-1b.c: Likewise.  Also add
-fomit-frame-pointer.
* g++.target/i386/memset-pr108585-1a.C:  (dg-options): Add
-fasynchronous-unwind-tables -fdwarf2-cfi-asm.  Also add
-mno-stackrealign -fomit-frame-pointer.
* g++.target/i386/memset-pr108585-1b.C: Likewise.

4 weeks agotailc: Handle musttail in case of non-cleaned-up cleanups, especially ASan related...
Jakub Jelinek [Tue, 1 Jul 2025 09:26:45 +0000 (11:26 +0200)] 
tailc: Handle musttail in case of non-cleaned-up cleanups, especially ASan related [PR120608]

The following testcases FAIL at -O0 -fsanitize=address.  The problem is
we end up with something like
  _26 = foo (x_24(D)); [must tail call]
  // predicted unlikely by early return (on trees) predictor.
  finally_tmp.3_27 = 0;
  goto <bb 5>; [INV]
...
  <bb 5> :
  # _6 = PHI <_26(3), _23(D)(4)>
  # finally_tmp.3_8 = PHI <finally_tmp.3_27(3), finally_tmp.3_22(4)>
  .ASAN_MARK (POISON, &c, 4);
  if (finally_tmp.3_8 == 1)
    goto <bb 7>; [INV]
  else
    goto <bb 6>; [INV]

  <bb 6> :
<L4>:
  finally_tmp.4_31 = 0;
  goto <bb 8>; [INV]
...
  <bb 8> :
  # finally_tmp.4_9 = PHI <finally_tmp.4_31(6), finally_tmp.4_30(7)>
  .ASAN_MARK (POISON, &b, 4);
  if (finally_tmp.4_9 == 1)
    goto <bb 9>; [INV]
  else
    goto <bb 10>; [INV]
...
  <bb 10> :
  # _7 = PHI <_6(8), _34(9)>
  .ASAN_MARK (POISON, &a, 4);

  <bb 11> :
<L11>:
  return _7;
before the sanopt pass.  This is -O0, we don't try to do forward
propagation, jump threading etc.  And what is worse, the sanopt
pass lowers the .ASAN_MARK calls that the tailc/musttail passes
already handle into somewthing that they can't easily pattern match.

The following patch fixes that by
1) moving the musttail pass 2 passes earlier (this is mostly just
   for -O0/-Og, for normal optimization levels musttail calls are
   handled in the tailc pass), i.e. across the sanopt and cleanup_eh
   passes
2) recognizes these finally_tmp SSA_NAME assignments, PHIs using those
   and GIMPLE_CONDs deciding based on those both on the backwards
   walk (when we start from the edges to EXIT) and forwards walk
   (when we find a candidate tail call and process assignments
   after those up to the return statement).  For backwards walk,
   ESUCC argument has been added which is either NULL for the
   noreturn musttail case, or the succ edge through which we've
   reached bb and if it sees GIMPLE_COND with such comparison,
   based on the ESUCC and comparison it will remember which later
   edges to ignore later on and which bb must be walked up to the
   start during tail call discovery (the one with the PHI).
3) the move of musttail pass across cleanup_eh pass resulted in
   g++.dg/opt/pr119613.C regressions but moving cleanup_eh before
   sanopt doesn't work too well, so I've extended
   empty_eh_cleanup to also handle resx which doesn't throw
   externally

I know moving a pass on release branches feels risky, though the
musttail pass is only relevant to functions with musttail calls,
so something quite rare and only at -O0/-Og (unless one e.g.
disables the tailc pass).

2025-07-01  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/120608
* passes.def (pass_musttail): Move before pass_sanopt.
* tree-tailcall.cc (empty_eh_cleanup): Handle GIMPLE_RESX
which doesn't throw externally through recursion on single
eh edge (if any and cnt still allows that).
(find_tail_calls): Add ESUCC, IGNORED_EDGES and MUST_SEE_BBS
arguments.  Handle GIMPLE_CONDs for non-simplified cleanups with
finally_tmp temporaries both on backward and forward walks, adjust
recursive call.
(tree_optimize_tail_calls_1): Adjust find_tail_calls callers.

* c-c++-common/asan/pr120608-3.c: New test.
* c-c++-common/asan/pr120608-4.c: New test.
* g++.dg/asan/pr120608-3.C: New test.
* g++.dg/asan/pr120608-4.C: New test.

4 weeks agoFortran: Fix non-conformable corank on this_image ref [PR120843]
Andre Vehreschild [Fri, 27 Jun 2025 12:39:13 +0000 (14:39 +0200)] 
Fortran: Fix non-conformable corank on this_image ref [PR120843]

PR fortran/120843

gcc/fortran/ChangeLog:

* resolve.cc (resolve_operator): Report inconsistent coranks
only when not referencing this_image.
(gfc_op_rank_conformable): Treat coranks as inconformable only
when a coindex other then implicit this_image is used.

gcc/testsuite/ChangeLog:

* gfortran.dg/coarray/coindexed_6.f90: New test.

4 weeks agoaarch64: Sync `aarch64-sys-regs.def' with Binutils.
Ezra Sitorus [Tue, 1 Jul 2025 08:22:05 +0000 (10:22 +0200)] 
aarch64: Sync `aarch64-sys-regs.def' with Binutils.

This patch updates `aarch64-sys-regs.def', bringing it into sync with
the Binutils source after this change:
https://sourceware.org/pipermail/binutils/2025-March/139894.html

gcc/ChangeLog:

* config/aarch64/aarch64-sys-regs.def: Copy from Binutils.

4 weeks agoada: Restore consistent rounding of 'Value for ordinary fixed-point types
Eric Botcazou [Mon, 26 May 2025 10:21:02 +0000 (12:21 +0200)] 
ada: Restore consistent rounding of 'Value for ordinary fixed-point types

This restores the rounding of the first scaled divide operation applied to
the extra digits, which yields more consistent results for smalls that are
reciprocal of integers.

gcc/ada/ChangeLog:

* libgnat/s-valuef.adb (Integer_to_Fixed): Restore rounding of the
first scaled divide operation.

4 weeks agoada: Fix ALI elaboration flags for ghost compilation units
Piotr Trojanek [Thu, 22 May 2025 14:46:17 +0000 (16:46 +0200)] 
ada: Fix ALI elaboration flags for ghost compilation units

When GNAT was compiling a ghost unit, the ALI file wrongly suggested that this
unit includes elaboration code, which caused linking errors to non-existing
elaboration counters. This was because elaboration code is only detected in
Gigi, which is skipped for ignored ghost units, because we don't generate
object code for them

gcc/ada/ChangeLog:

* gnat1drv.adb (Gnat1drv): Do minimal decoration of the spec and body
of an ignored ghost compilation unit.

4 weeks agoada: Remove unused variables from the binder generation routine
Piotr Trojanek [Thu, 22 May 2025 10:16:18 +0000 (12:16 +0200)] 
ada: Remove unused variables from the binder generation routine

Remove leftovers from zero cost exception handling; semantics is unaffected.

gcc/ada/ChangeLog:

* ali.ads (Unit_Record): Fix grammar in comment.
* bindgen.adb (Num_Elab_Calls, Num_Primary_Stacks): Remove counters
that were only incremented and never actually used.

4 weeks agoada: Disallow underscore before exponent
Tonu Naks [Thu, 22 May 2025 13:07:08 +0000 (13:07 +0000)] 
ada: Disallow underscore before exponent

Underscore is allowed only between digits. The current implementattion
was considering 'E' as a digit even if it was not in the range of
Base and could denote exponent only.

gcc/ada/ChangeLog:

* libgnat/s-valuer.adb (Scan_Decimal_Digits,
Scan_Integral_Digits): fix condition for rejecting
underscore.

4 weeks agoada: Fix couple of issues in System.Value_D.Integer_To_Decimal function
Eric Botcazou [Wed, 21 May 2025 13:15:48 +0000 (15:15 +0200)] 
ada: Fix couple of issues in System.Value_D.Integer_To_Decimal function

The first issue is that the function would wrongly raise Constraint_Error
on the edge case where Val = 2**(Int'Size - 1) and Minus is not set.

The second issue is that the function takes a long time to deal with huge
negative exponents.

The change also contains minor consistency fixes for its counterpart that
is present in System.Value_F, namely Integer_To_Fixed.

gcc/ada/ChangeLog:

* libgnat/s-valued.adb (Integer_To_Decimal): Deal specifically with
Val = 2**(Int'Size - 1) if Minus is not set.  Exit the loops when V
saturates to 0 in the case of (huge) negative exponents.  Use Base
instead of B consistently in unsigned computations.
* libgnat/s-valuef.adb (Integer_To_Fixed): Use Base instead of B
consistently in unsigned computations.

4 weeks agoada: Do minimal expansion of fixedpoint operations for GNATprove
Piotr Trojanek [Wed, 21 May 2025 14:17:12 +0000 (16:17 +0200)] 
ada: Do minimal expansion of fixedpoint operations for GNATprove

A minimal expansion of fixedpoint operations is needed for GNATprove, because
the subsequent resolution of type conversion relies on this expansion being
done.

gcc/ada/ChangeLog:

* exp_ch4.adb (Fixup_Universal_Fixed_Operation): Move to spec.
* exp_ch4.ads (Fixup_Universal_Fixed_Operation): Move from body.
* exp_spark.adb (Expand_SPARK): Call a fixup expansion routine.

4 weeks agoada: Fix for compiler crash on function return with Relaxed_Finalization parts
Gary Dismukes [Tue, 20 May 2025 00:16:25 +0000 (00:16 +0000)] 
ada: Fix for compiler crash on function return with Relaxed_Finalization parts

The compiler crashes on compiling a return statement of a function whose result
type has a component whose type is specified with Relaxed_Finalization. The
compiler was attempting to retrieve a nonexistent BIP_Collection extra formal
from the enclosing function, which may not exist in the case of result types
with Relaxed_Finalization.

gcc/ada/ChangeLog:

* exp_ch3.adb (Build_Heap_Or_Pool_Allocator): Test not Has_Relaxed_Finalization
as a guard against retrieving BIP_Collection formal (and related code).

4 weeks agoada: Warn on untagged record type equality
Javier Miranda [Fri, 16 May 2025 17:59:43 +0000 (17:59 +0000)] 
ada: Warn on untagged record type equality

The frontend reports a warning when no component of an untagged
record type U is a record type, and the type C of some of its
components has defined its user-defined equality operator "=".

The warning is reported because it may be surprising that, following
RM 4.5.2 (24/3), the predefined "=" of the component type C takes
precedence over its user-defined "=" when objects of the record
type R are compared.

gcc/ada/ChangeLog:

* exp_ch3.adb (Build_Untagged_Record_Equality): Report the
warning when no component of an untagged record type U is a
record type, and the type C of some of its components has
defined its user-defined equality operator "=".
* exp_ch4.adb (Expand_Composite_Equality): Report the warning
calling Warn_On_Ignored_Equality_Operator.
* sem_warn.ads (Warn_On_Ignored_Equality_Operator): New subprogram.
* sem_warn.adb (Warn_On_Ignored_Equality_Operator): Factorize code
reporting the warning.

4 weeks agoada: Reduce the likelihood of overflow in Tanh
Tonu Naks [Mon, 19 May 2025 17:20:41 +0000 (17:20 +0000)] 
ada: Reduce the likelihood of overflow in Tanh

gcc/ada/ChangeLog:

* libgnat/a-ngelfu.adb: conditional computation of X^2

4 weeks agoada: Split the unit System.Case_Utilities into two parts.
Steve Baird [Mon, 21 Apr 2025 22:28:39 +0000 (15:28 -0700)] 
ada: Split the unit System.Case_Utilities into two parts.

The package System.Case_Utilities provides some subprograms that do not make
use of the secondary stack and some that do. When compiling in a context
where no secondary stack support is provided, this makes the entire package
unusable (and similarly for any other package that withs this package).
Split the package into two packages named Case_Utilities_NSS and Case_Utilities
(NSS is for "no secondary stack"). The first package declares the
subprograms that do not need secondary stack support. The second package
declares the remaining subprograms, as well as renamings of everything declared
in the first part. A client that continues to reference Case_Utilities is
largely unaffected by this change. But if we change a client to reference
Case_Utilities_NSS instead, that removes an obstacle that would otherwise
prevent using that client unit in a no-secondary-stack-support environment.
We then make that change to the body of package System.Val_Util.

gcc/ada/ChangeLog:

* Makefile.rtl: Add entry for new unit's object file.
* libgnat/s-casuti.adb: Remove bodies of subprograms that were moved
to the new unit.
* libgnat/s-casuti.ads: Replace (with renamings) declarations for
subprograms that moved to the new unit.
* libgnat/s-cautns.adb: Body for new unit (a new source file).
* libgnat/s-cautns.ads: Spec for new unit (a new source file).
* libgnat/s-valuti.adb: Use the new unit instead of the old one.
* gcc-interface/Make-lang.in: Add entries for new unit's object file.
* gcc-interface/Makefile.in: Likewise.

4 weeks agoada: Compiler fails on unchecked deallocation for constrained protected subtype
Gary Dismukes [Fri, 16 May 2025 23:11:26 +0000 (23:11 +0000)] 
ada: Compiler fails on unchecked deallocation for constrained protected subtype

The compiler fails with an error or Assert_Failure when calling
an instantiation of Unchecked_Deallocation that has been instantiated
with a constrained subtype of a discriminated protected type.

gcc/ada/ChangeLog:

* sem_ch3.adb (Constrain_Corresponding_Record): Inherit Class_Wide_Type on the
created constrained subtype.

4 weeks agoada: Add GNAT LLVM selection in GPR project file.
Artur Pietrek [Mon, 19 May 2025 12:33:28 +0000 (14:33 +0200)] 
ada: Add GNAT LLVM selection in GPR project file.

gcc/ada/ChangeLog:

* doc/gnat_ugn/building_executable_programs_with_gnat.rst: add
GNAT LLVM explicit selection in GPR file
* gnat_ugn.texi: Regenerate.

4 weeks agoada: Small tweak to latest change
Eric Botcazou [Fri, 16 May 2025 23:20:19 +0000 (01:20 +0200)] 
ada: Small tweak to latest change

Unlike RTE, RTU_Entity alone does not cause the unit to be loaded.

gcc/ada/ChangeLog:

* exp_ch7.adb (Shift_Address_For_Descriptor): Add dummy variable
to make sure that System_Storage_Elements is loaded.

4 weeks agoada: Add "continue" GNAT extension
Ronan Desplanques [Fri, 16 May 2025 08:47:06 +0000 (10:47 +0200)] 
ada: Add "continue" GNAT extension

This extension adds "continue" as a nonreserved keyword, and this is the
first occurrence of a nonreserved keyword in GNAT, which causes this
patch to add unusual overload resolution code.

New node kinds are introduced, but since they are entirely transformed
into existing constructs during expansion, back ends that don't turn off
expansion do not need to be updated.

gcc/ada/ChangeLog:

* doc/gnat_rm/gnat_language_extensions.rst: Document new extension.
* gen_il-fields.ads (Opt_Field_Enum): Add new fields.
* gen_il-types.ads (N_Loop_Flow_Statement, N_Continue_Statement): New
node kinds.
* gen_il-gen-gen_nodes.adb (N_Loop_Flow_Statement): New abstract node
kind.
(N_Continue_Statement): New node kind.
(N_Exit_Statement): Reparent below N_Loop_Flow_Statement.
* sinfo.ads (N_Continue_Statement): Add description.
* sinfo-utils.ads (Loop_Flow_Keyword): New function.
* sinfo-utils.adb (Loop_Flow_Keyword): New function.
* gen_il-gen-gen_entities.adb (E_Loop): Add new field.
* einfo.ads (Continue_Mark): Document new field.
* sprint.adb (Sprint_Node_Actual): Update for new node kind.
* snames.ads-tmpl: Add new keyword.
* par-ch5.adb (P_Continue_Statement, Parse_Loop_Flow_Statement): New
functions.
(P_Sequence_Of_Statements): Handle continue statements.
(P_Exit_Statement): Use Parse_Loop_Flow_Statement.
* sem.adb (Analyze): Handle new node kind.
* sem_ch5.adb (Analyze_Loop_Flow_Statement): New function.
(Analyze_Continue_Statement): New procedure.
(Analyze_Exit_Statement): Use new Analyze_Loop_Flow_Statement function.
* sem_ch5.ads (Analyze_Continue_Statement): New procedure.
* expander.adb (Expand): Handle new node kind.
* exp_ch5.ads (Expand_N_Continue_Statement): New procedure.
* exp_ch5.adb (Expand_Loop_Flow_Statement): New procedure.
(Expand_N_Continue_Statement): New procedure.
(Expand_N_Exit_Statement): Use new Expand_Loop_Flow_Statement
procedure.
(Build_Formal_Container_Iteration): Always reuse original loop entity.
* gnat_rm.texi: Regenerate.

4 weeks agoada: Disable -gnatR2 output in case of object renamings
Bob Duff [Fri, 16 May 2025 13:04:48 +0000 (09:04 -0400)] 
ada: Disable -gnatR2 output in case of object renamings

Such output was unnecessary, and in some cases harmful.
In particular, we generate renamings in the expanded
code for protected types, with internally-generated names,
which could be confusing to the user. In addition, in the
JSON output (-gnatR2j), these generated renamings could have
duplicate source locatations, which confused SPARK.

gcc/ada/ChangeLog:

* repinfo.adb (List_Entities):
Disable output in case of object renamings.

4 weeks agoada: Correct comment in s-valuen.ads
Aleksandra Pasek [Thu, 15 May 2025 21:40:55 +0000 (21:40 +0000)] 
ada: Correct comment in s-valuen.ads

gcc/ada/ChangeLog:

* libgnat/s-valuen.ads: Correct comment.

4 weeks agoada: include string.h
Alexandre Oliva [Thu, 15 May 2025 03:07:03 +0000 (00:07 -0300)] 
ada: include string.h

__gnat_install_handler calls strncmp when __HANDLE_VXSIM_SC is
defined, so string.h needs to be included, and gcc-14 enforces this
requirement.

gcc/ada/ChangeLog:

* init.c: Include string.h.

4 weeks agoada: Drop the chapter listing implemented Ada 2012 AI's
Tonu Naks [Wed, 14 May 2025 13:51:25 +0000 (13:51 +0000)] 
ada: Drop the chapter listing implemented Ada 2012 AI's

We support Ada 2012 fully. The chapter is out of date
and would serve no purpose if it was up to date.

gcc/ada/ChangeLog:

* doc/gnat_rm.rst: remove ref to 2012 chapter
* doc/gnat_rm/about_this_guide.rst: remove ref to 2012 chapter
* doc/gnat_rm/compatibility_and_porting_guide.rst: update list of
supported versions
* doc/gnat_rm/implementation_of_ada_2012_features.rst: delete
* doc/gnat_rm/specialized_needs_annexes.rst: update list of
supported versions
* gnat_rm.texi: Regenerate.

4 weeks agoada: Replace references for GLADE with PolyORB
Tonu Naks [Wed, 14 May 2025 14:16:19 +0000 (14:16 +0000)] 
ada: Replace references for GLADE with PolyORB

gcc/ada/ChangeLog:

* doc/gnat_rm/implementation_advice.rst: remove GLADE
* doc/gnat_rm/implementation_defined_characteristics.rst: remove GLADE
* doc/gnat_rm/specialized_needs_annexes.rst: remove GLADE
* doc/gnat_rm/the_gnat_library.rst: remove GLADE
* gnat_rm.texi: Regenerate.

4 weeks agoada: use __builtin_alloca for alloca on vxworks
Alexandre Oliva [Tue, 13 May 2025 02:23:14 +0000 (23:23 -0300)] 
ada: use __builtin_alloca for alloca on vxworks

Several adaint.c functions call alloca, but vxworks doesn't declare
it.  Use the GCC builtin.

gcc/ada/ChangeLog:

* adaint.c [__vxworks] (alloca): Redirect to builtin.

4 weeks agoada: freeze.adb: do not emit error on non-aligned component in CodePeer_Mode
Ghjuvan Lacambre [Fri, 9 May 2025 09:20:18 +0000 (11:20 +0200)] 
ada: freeze.adb: do not emit error on non-aligned component in CodePeer_Mode

These errors hinder analysis of non-GNAT code and are not useful to the
user as CodePeer does not care about alignment.

gcc/ada/ChangeLog:

* freeze.adb (Freeze_Record_Type): Check for CodePeer_Mode.

4 weeks agoada: Move aspects when instantiating subprograms as compilation units
Piotr Trojanek [Fri, 9 May 2025 15:31:39 +0000 (17:31 +0200)] 
ada: Move aspects when instantiating subprograms as compilation units

When rewriting N_Subprogram_Instantiation into wrapper packages we must move
the original aspect specifications to the wrapper packages, as otherwise they
will be only accessible via Original_Node. This is similar to how we move
aspect specifications for expression functions and many other constructs.

gcc/ada/ChangeLog:

* sem_ch12.adb (Analyze_Subprogram_Instantiation): Move aspects when
instantiating subprogram as a library unit.