aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
AgeCommit message (Collapse)AuthorFilesLines
2022-07-06[Ada] Restore accidentally removed part of a comment about unset referencesPiotr Trojanek1-0/+1
Fix an unintentionally removed comment. gcc/ada/ * sem_res.adb (Resolve_Actuals): Restore first sentence of a comment.
2022-07-06[Ada] Fix spurious error for aggregate with box component choiceEric Botcazou4-94/+83
It comes from the Volatile_Full_Access (or Atomic) aspect: the aggregate is effectively analyzed/resolved twice and this does not work. It is fixed by calling Is_Full_Access_Aggregate before resolution. gcc/ada/ * exp_aggr.adb (Expand_Record_Aggregate): Do not call Is_Full_Access_Aggregate here. * freeze.ads (Is_Full_Access_Aggregate): Delete. * freeze.adb (Is_Full_Access_Aggregate): Move to... (Freeze_Entity): Do not call Is_Full_Access_Aggregate here. * sem_aggr.adb (Is_Full_Access_Aggregate): ...here (Resolve_Aggregate): Call Is_Full_Access_Aggregate here.
2022-07-06Daily bump.GCC Administrator1-0/+242
2022-07-05[Ada] Warn about obsolete uses of renamed Ada 83 packagesPiotr Trojanek3-6/+12
Ada 83 packages like Unchecked_Conversion or Text_IO are obsolete since Ada 95. GNAT now warns about their uses when warnings on obsolescent featured (Annex J) is active. gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst (Warning Message Control): Update description of switch -gnatwj. * gnat_ugn.texi: Regenerate. * sem_ch10.adb (Analyze_With_Clause): Warn on WITH clauses for obsolete renamed units; in Ada 83 mode do not consider predefined renamings to be obsolete. gcc/testsuite/ * gnat.dg/renaming1.adb: Update WITH clause. * gnat.dg/renaming1.ads: Likewise. * gnat.dg/warn29.adb: Likewise.
2022-07-05[Ada] Couple of small cleanups for Cloned_SubtypeEric Botcazou2-7/+5
No functional changes. gcc/ada/ * exp_util.adb (Make_Subtype_From_Expr): Do not set field to Empty. * sem_util.adb (Visit_Itype): Remove ??? comment.
2022-07-05[Ada] Remove kludge for validity checks on Long_Float typePiotr Trojanek2-38/+4
This patch reverts a fix for a spurious warning for validity checks on type Long_Float. This fix was dubious (as it was only affecting Long_Float and not Float) and apparently is no longer needed. Cleanup related to improved detection of uninitialised scalar objects. gcc/ada/ * sem_attr.adb (Note_Possible_Modification): Revert a special-case for validity checks on Long_Float type. * snames.ads-tmpl (Name_Attr_Long_Float): Remove name added exclusively for the mentioned fix.
2022-07-05[Ada] Remove repeated setting of Never_Set_In_SourcePiotr Trojanek1-4/+3
Formal parameters have their flag Never_Set_In_Source set at the beginning of Process_Formals routine (regardless of the parameter mode). There is no need to set it again when Process_Formals calls Set_Formal_Mode (for parameters of mode IN OUT and OUT). Code cleanup related to improved detection of uninitialised objects; behaviour is unaffected. gcc/ada/ * sem_ch6.adb (Set_Formal_Mode): Remove unnecessary setting of Never_Set_In_Source.
2022-07-05[Ada] Reorder processing of default expressions to avoid repeated callsPiotr Trojanek1-3/+3
Code cleanup related to improved detection of uninitialised objects; semantics is unaffected. gcc/ada/ * sem_ch6.adb (Process_Formals): Avoid repeated calls to Expression.
2022-07-05[Ada] Remove redundant protection against empty listsPiotr Trojanek4-40/+23
Calls to First on No_List intentionally return Empty node, so explicit guards against No_List are unnecessary. Code cleanup; semantics is unaffected. gcc/ada/ * exp_code.adb (Setup_Asm_IO_Args): Remove guard against No_List. * par_sco.adb (Process_Decisions): Likewise. * sem_ch13.adb (Check_Component_List): Likewise. * sem_ch6.adb (FCL): Likewise.
2022-07-05[Ada] qnx-7.1: ACATS cxag001 failure on qnx - realpathDoug Rupp1-13/+0
The implementation of __gnat_full_name uses the CRTL realpath, however this function returns a null string so use the default implementation instead. gcc/ada/ * cstreams.c (__gnat_full_name) [QNX]: Remove block.
2022-07-05[Ada] Remove use of a global name buffer when locating a filePiotr Trojanek1-4/+2
Code cleanup; semantics is unaffected. gcc/ada/ * osint.adb (Locate_File): Use Name_Find with a parameter and not with a global buffer.
2022-07-05[Ada] Reuse Get_Pragma_Arg to handle pragma argument associationsPiotr Trojanek2-10/+6
Code cleanup related to looking at pragma Thread_Local_Storage. Semantics is unaffected. gcc/ada/ * exp_ch3.adb (Build_Init_Statements): Reuse Get_Pragma_Arg. * exp_prag.adb (Arg_N): Likewise.
2022-07-05[Ada] Fix spurious error on object renaming with ghost typeYannick Moy1-1/+10
Renaming of an object of ghost type leads to a spurious error. Now fixed. gcc/ada/ * ghost.adb (Is_OK_Ghost_Context): Detect ghost type inside object renaming.
2022-07-05[Ada] Misc cleanup related to finalizationBob Duff9-70/+75
This patch cleans up some code issues found while working on finalization, and adds some debugging aids. gcc/ada/ * exp_ch7.adb: Change two constants Is_Protected_Body and Is_Prot_Body to be Is_Protected_Subp_Body; these are not true for protected bodies, but for protected subprogram bodies. (Expand_Cleanup_Actions): No need to search for Activation_Chain_Entity; just use Activation_Chain_Entity. * sem_ch8.adb (Find_Direct_Name): Use Entyp constant. * atree.adb, atree.ads, atree.h, nlists.adb, nlists.ads (Parent): Provide nonoverloaded versions of Parent, so that they can be easily found in the debugger. * debug_a.adb, debug_a.ads: Clarify that we're talking about the -gnatda switch; switches are case sensitive. Print out the Chars field if appropriate, which makes it easier to find things in the output. (Debug_Output_Astring): Simplify. Also fix an off-by-one bug ("for I in Vbars'Length .." should have been "for I in Vbars'Length + 1 .."). Before, it was printing Debug_A_Depth + 1 '|' characters if Debug_A_Depth > Vbars'Length.
2022-07-05[Ada] Remove repeated analysis for pragma Thread_Local_StoragePiotr Trojanek1-1/+0
When analysing pragma Thread_Local_Storage its argument is analysed by the call to Check_Arg_Is_Library_Level_Local_Name. There is no need to reanalyse it. Code cleanup; behaviour is not affected. gcc/ada/ * sem_prag.adb (Analyze_Pragma): Remove unnecessary call to Analyze.
2022-07-05[Ada] Annotate GNAT.Sockets with No_Return aspectsPiotr Trojanek2-3/+5
Opportunity for extra annotations spotted while fixing detection of unreachable code that follows calls to procedures annotated with No_Return. gcc/ada/ * libgnat/g-socket.adb (Raise_Host_Error): Add No_Return aspect. (Raise_GAI_Error): Likewise. * libgnat/g-socket.ads (Raise_Socket_Error): Likewise.
2022-07-05[Ada] Cleanup repeated code for aggregate constraints checksPiotr Trojanek1-15/+10
Code cleanup related to examining uses of Check_Unset_Reference for improved detection of uninitialised scalar objects. Semantics is unaffected. gcc/ada/ * sem_util.adb (Aggregate_Constraint_Checks): Fix whitespace; refactor repeated code; replace a ??? comment with an explanation based on the comment for the routine spec.
2022-07-05[Ada] Fix comments mentioning ancient flags related to objects referencesPiotr Trojanek2-10/+10
Flag May_Be_Modified under go a series of renamings between 1996 and 2002. It was changed to Not_Assigned, then to Not_Source_Assigned and finally to Never_Set_In_Source. Fix remaining references in comments. gcc/ada/ * sem_util.ads (Note_Possible_Modification): Fix occurrence of May_Be_Modified in comment. * sem_warn.ads (Check_Unset_Reference): Fix occurrence of Not_Assigned in comment.
2022-07-05[Ada] Spurious error on qualified prefix in Pack.Func'ResultYannick Moy1-0/+6
When using a qualified name such as Pack.Func as the prefix of a 'Result attribute reference, the prefix is not fully resolved and may contain a chain of homonyms. Look for the expected function in the homonym chain instead of issuing an error if the first one is not the expected one. gcc/ada/ * sem_attr.adb (Analyze_Attribute): Take into account the possibility of homonyms.
2022-07-05[Ada] Perform object rewriting as renaming only in the expanderEric Botcazou2-73/+33
The rewriting as renaming optimization for object declarations is done partly during analysis, guarded with Expander_Active, and partly during expansion, so it makes sense to do it entirely during expansion. This merges the two cases and removes obsolete or unnecessary conditions guarding the transformation in the process. gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): Rewrite as a renaming for any nonaliased local object with nominal unconstrained subtype originally initialized with the result of a function call that has been rewritten as the dereference of a reference to the result. * sem_ch3.adb (Analyze_Object_Declaration): Do not do it here
2022-07-05[Ada] Remove exception propagation during bootstrapArnaud Charlet4-24/+30
To help the bootstrap path, we want to keep the compiler free from any exception propagation during bootstrap. This has been broken recently in various places. Also introduce a way to more easily detect such breakage via the -DNO_EXCEPTION_PROPAGATION which can now be used as part of BOOT_CFLAGS. gcc/ada/ * exp_imgv.adb (Build_Enumeration_Image_Tables): Also disable perfect hash in GNAT_Mode. * raise-gcc.c (__gnat_Unwind_RaiseException): Add support for disabling exception propagation. * sem_eval.adb (Compile_Time_Known_Value): Update comment and remove wrong call to Check_Error_Detected. * sem_prag.adb (Check_Loop_Pragma_Grouping, Analyze_Pragma): Remove exception propagation during bootstrap.
2022-07-05[Ada] Fix dangling bounds for array result of BIP functionsEric Botcazou8-976/+867
The implementation of the build-in-place return protocol for functions whose result type is an unconstrained array type generates dangling references to local bounds built on the stack for the result as soon as these bounds are not static. The reason is that the implementation treats the return object, either explicitly present in the source or synthesized by the compiler, as a regular constrained object until very late in the game, although it needs to be ultimately rewritten as the renaming of the dereference of an allocator with unconstrained designated type in order for the bounds to be part of the allocation. Recently a partial fix was implemented for the case where the result is an aggregate, by preventing the return object from being expanded after it has been analyzed. However, it does not work for the general case of extended return statements, because the statements therein are still analyzed with the constrained version of the return object so, after it is changed into the unconstrained renaming, this yields (sub)type mismatches. Therefore this change goes the other way around: it rolls back the partial fix and instead performs the transformation of the return object into the unconstrained renaming during the expansion of its declaration, in other words before statements referencing it, if any, are analyzed, thus ensuring that they see the final version of the object. gcc/ada/ * exp_aggr.adb (Expand_Array_Aggregate): Remove obsolete code. Delay the expansion of aggregates initializing return objects of build-in-place functions. * exp_ch3.ads (Ensure_Activation_Chain_And_Master): Delete. * exp_ch3.adb (Ensure_Activation_Chain_And_Master): Fold back to... (Expand_N_Object_Declaration): ...here. Perform the expansion of return objects of build-in-place functions here instead of... * exp_ch6.ads (Is_Build_In_Place_Return_Object): Declare. * exp_ch6.adb (Expand_N_Extended_Return_Statement): ...here. (Is_Build_In_Place_Result_Type): Alphabetize. (Is_Build_In_Place_Return_Object): New predicate. * exp_ch7.adb (Enclosing_Function): Delete. (Process_Object_Declaration): Tidy up handling of return objects. * sem_ch3.adb (Analyze_Object_Declaration): Do not decorate and freeze the actual type if it is the same as the nominal type. * sem_ch6.adb: Remove use and with clauses for Exp_Ch3. (Analyze_Function_Return): Analyze again all return objects. (Create_Extra_Formals): Do not force the definition of an Itype if the subprogram is a compilation unit.
2022-07-05[Ada] Remove unnecessary dead code after calls to nonreturning proceduresPiotr Trojanek7-18/+0
A new warning about unreachable code that follows calls to procedures with No_Return would flag some dead defensive code. Comments next to this code suggest that it was added to please some ancient version of the compiler, but recent releases of GNAT do not require such a code. gcc/ada/ * gnatls.adb (Corresponding_Sdep_Entry): Remove dead return statement in defensive path; there is another return statement for a normal execution of this routine, so rule Ada RM 6.5(5), which requires function to have at least one return statement is still satisfied. (Gnatls): Remove dead, call to nonreturning Exit_Program after Output_License_Information which itself does not return. * libgnat/a-exstat.adb (Bad_EO): Remove raise statement that was meant to please some ancient version of GNAT. * libgnat/g-awk.adb (Raise_With_Info): Likewise. * sem_attr.adb (Check_Reference): Remove dead return statement; rule Ada RM 6.5(5), which requires function to have at least one return statement is still satisfied. (Analyze_Attribute): Remove dead exit statement. (Check_Reference): Same as above. * sem_ch12.adb (Instantiate_Formal_Package): Remove dead raise statement; it was inconsistent with other calls to Abandon_Instantiation, which are not followed by a raise statement. * sem_prag.adb (Process_Convention): Remove dead defensive assignment. (Interrupt_State): Remove dead defensive exit statement. (Do_SPARK_Mode): Likewise. * sfn_scan.adb (Scan_String): Remove dead defensive assignment.
2022-07-05[Ada] Remove return statements after procedure calls that don't returnPiotr Trojanek2-63/+0
A new warning about unreachable code that follows calls to procedures with No_Return would flag many unnecessary return statements. Those returns statements were applied inconsistently, so this patch is actually more a style cleanup. gcc/ada/ * sem_attr.adb, sem_prag.adb: Remove dead return statements after calls to Error_Attr, Error_Pragma, Error_Pragma_Arg and Placement_Error. All these calls raise exceptions that are handled to gently recover from errors.
2022-07-05[Ada] Combine system.ads files - vxworks6 constants.Doug Rupp3-6/+6
Systemitize Word_Size and Memory_Size declarations rather than hard code with numerical values or OS specific Long_Integer size. gcc/ada/ * libgnat/system-vxworks-ppc-kernel.ads (Word_Size): Compute based on Standard'Word_Size. (Memory_Size): Compute based on Word_Size. * libgnat/system-vxworks-ppc-rtp-smp.ads: Likewise. * libgnat/system-vxworks-ppc-rtp.ads: Likewise.
2022-07-05[Ada] Fix clearly unintentional dead analysis of attribute Code_AddressPiotr Trojanek1-1/+1
A new warning about unreachable code that follows calls to procedures with No_Return would flag a clearly unintentional dead call to Set_Address_Taken in analysis of Code_Address attribute. This patch resurrects the dead code, which is worth fixing regardless of the new warning. gcc/ada/ * sem_attr.adb (Analyze_Attribute): Move call to Set_Address_Taken so that it is executed when the prefix attribute is legal.
2022-07-05[Ada] Cleanup in error about unreachable codePiotr Trojanek1-2/+1
Cleanup only; behaviour is unaffected. gcc/ada/ * sem_ch5.adb (Check_Unreachable_Code): Avoid explicit use of Sloc; this should also help when we finally use Source_Span for prettier error messages.
2022-07-05[Ada] Remove redundant guards in detection of unreachable codePiotr Trojanek1-3/+2
Routine Check_Unreachable_Code is only called on nodes belonging to a list of statements (and it wouldn't make sense to call it on anything else). gcc/ada/ * sem_ch5.adb (Check_Unreachable_Code): Remove redundant guard; the call to Present wasn't needed either.
2022-07-05[Ada] Remove redundant guard for call to List_Length with a No_ListPiotr Trojanek1-5/+1
Code cleanup related to a new detection of uninitialised local scalar objects; semantics is unaffected. gcc/ada/ * sem_ch5.adb (Analyze_Block_Statement): Call to List_Length with No_List is safe and will return zero.
2022-07-05[Ada] Add RM reference to check for functions without a return statementPiotr Trojanek1-0/+4
Add comment to explain why we have an error and not just a warning. gcc/ada/ * sem_ch6.adb (Check_Missing_Return): Add reference to an RM rule.
2022-07-05[Ada] Remove comment about a long gone formal verification modePiotr Trojanek1-3/+1
Remove outdated a comment about the very first SPARK experiments in GNAT. gcc/ada/ * sem_ch6.adb (Check_Missing_Return): Remove outdated comment.
2022-07-05[Ada] Remove unimplemented convert_addresses declarationDmitriy Anisimkov1-2/+0
convert_addresses is declared in adaint.h but is never referenced, so remove it. gcc/ada/ * adaint.h (convert_addresses): Remove function declaration.
2022-07-05[Ada] Remove old vxworks6 from Makefile.rtlDoug Rupp15-1598/+37
Pre vxworks7 code excepting legacy vxworks6 code is removed from Makefile.rtl and unused files are deleted. gcc/ada/ * Makefile.rtl (*vxworks*): Remove most pre-vxworks7 code. * vxworks-arm-link.spec: Remove. * vxworks-e500-link.spec: Likewise. * vxworks-smp-arm-link.spec: Likewise. * vxworks-smp-e500-link.spec: Likewise. * vxworks-smp-x86-link.spec: Likewise. * libgnat/system-vxworks-arm-rtp-smp.ads: Likewise. * libgnat/system-vxworks-arm-rtp.ads: Likewise. * libgnat/system-vxworks-arm.ads: Likewise. * libgnat/system-vxworks-e500-kernel.ads: Likewise. * libgnat/system-vxworks-e500-rtp-smp.ads: Likewise. * libgnat/system-vxworks-e500-rtp.ads: Likewise. * libgnat/system-vxworks-x86-kernel.ads: Likewise. * libgnat/system-vxworks-x86-rtp-smp.ads: Likewise. * libgnat/system-vxworks-x86-rtp.ads: Likewise.
2022-07-05Daily bump.GCC Administrator1-0/+248
2022-07-04[Ada] Do not make procedure call with only tag-indeternminate actuals ↵Eric Botcazou1-42/+35
dispatching The RM 3.9.2(19) clause says that the controlling tag value is statically determined to be the tag of the tagged type involved. As a matter of fact, the call would be made dispatching only as a by-product of the propagation of the controlling tag value to the tag-indeternminate actuals, but that's unnecessary and not done in the equivalent case of a procedure call with both statically tagged and tag-indeternminate actuals. gcc/ada/ * sem_disp.adb (Check_Dispatching_Call): Merge the two special cases where there are no controlling actuals but tag-indeternminate ones.
2022-07-04[Ada] Fix dispatching call to primitive function with controlling tagged resultEric Botcazou1-2/+8
When a dispatching call is made to a primitive function with a controlling tagged result, the call is dispatching on result and thus must return the class-wide type of the tagged type to accommodate all possible results. This was ensured by Expand_Dispatching_Call only in the common case where the result type is the type of the controlling argument, which does not cover the case of a primitive function inherited from an ancestor type. gcc/ada/ * exp_disp.adb (Expand_Dispatching_Call): Fix detection of calls that are dispatching on tagged result.
2022-07-04[Ada] vx7r2: do not include s-qnx.ads in the kernel and rtp runtimesDoug Rupp1-0/+1
Target specific runtime files must be added to a the exclude list so the files don't automatically get copied to other runtimes. gcc/ada/ * Makefile.rtl (ADA_EXCLUDE_SRCS): Add s-qnx.ads.
2022-07-04[Ada] Small housekeeping work in Expand_N_Object_DeclarationEric Botcazou1-137/+119
The local function Rewrite_As_Renaming can be called twice in certain circumstances, which is both not quite safe and unnecessary, so this replaces it with a local variable whose value is computed only once. No functional changes. gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration) <OK_To_Rename_Ref>: New local function. <Rewrite_As_Renaming>: Change to a local variable whose value is computed once and generate a call to Finalize after this is done. Simplify the code creating the renaming at the end.
2022-07-04[Ada] Makefile.rtl: remove references t oVxworks RTP Cert .spec filesDoug Rupp1-7/+0
gcc/ada/ * Makefile.rtl (GCC_SPEC_FILES): Remove vxworks cert files.
2022-07-04[Ada] Refactor duplicated resolution of Count and Index attributesPiotr Trojanek1-14/+4
Attribute Index, which was added to Ada 2022 by AI12-0143, is resolved just like attribute Count. However, code duplication rightly triggered a CodePeer warning. gcc/ada/ * sem_attr.adb (Resolve_Attribute): Refactor duplicated code for Count and Index attributes.
2022-07-04[Ada] Use static stack allocation for small string if-expressionsEric Botcazou4-31/+364
This changes the expanded code generated for if-expressions of 1-dimensional arrays to create a static temporary on the stack if a small upper bound can be computed for the length of a subtype covering the result. Static stack allocation is preferred over dynamic allocation for code generation purpose. This also contains a couple of enhancements to the support code for checks, so as to avoid generating useless checks during the modified expansion. gcc/ada/ * checks.adb (Apply_Length_Check_On_Assignment): Return early if the Suppress_Assignment_Checks flag is set. (Selected_Range_Checks): Deal with conditional expressions. * exp_ch4.adb (Too_Large_Length_For_Array): New constant. (Expand_Concatenate): Use it in lieu of Too_Large_Max_Length. (Expand_N_If_Expression): If the result has a unidimensional array type but the dependent expressions have constrained subtypes with known bounds, create a static temporary on the stack with a subtype covering the result. (Get_First_Index_Bounds): Deal with string literals. * uintp.ads (Uint_256): New deferred constant. * sinfo.ads (Suppress_Assignment_Checks): Document new usage.
2022-07-04[Ada] Adjust previous change to Rewrite_As_RenamingEric Botcazou2-7/+14
gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration.Rewrite_As_Renaming): Do not rewrite if the declaration has got constraints. * sinfo.ads (Case Expression Alternative): Fix typo.
2022-07-04[Ada] Use static stack allocation for small dynamic string concatenationsEric Botcazou2-103/+207
This changes the expanded code generated for dynamic concatenations to use a static array subtype for the temporary created on the stack if a small upper bound can be computed for the length of the result. Static stack allocation is preferred over dynamic allocation for code generation purposes. gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration.Rewrite_As_Renaming): Be prepared for slices. * exp_ch4.adb (Get_First_Index_Bounds): New procedure. (Expand_Array_Comparison.Length_Less_Than_4): Call it. (Expand_Concatenate): Try to compute a maximum length for operands with variable length and a maximum total length at the end. If the concatenation is dynamic, but a sensible maximum total length has been computed, use this length to create a static array subtype for the temporary and return a slice of it.
2022-07-04[Ada] Enforce deferred constant completion rulesSteve Baird1-14/+32
If a constrained subtype is given when a deferred constant is declared, then the subtype given in the completion is required (at compile time) to be subject to a statically matching constraint. This rule was not properly enforced in some cases and constructs that should have been rejected were incorrectly accepted. gcc/ada/ * sem_ch3.adb (Check_Possible_Deferred_Completion): Delete Prev_Obj_Def formal parameter. Reorganize code so that statically matching check is also performed in the case where the subtype given in the initial declaration is constrained and the subtype given in the completion is not.
2022-07-04[Ada] Assertions in Einfo.UtilsBob Duff6-66/+71
Add predicates on subtypes E and N. gcc/ada/ * einfo-utils.ads, einfo-utils.adb: Add predicates on subtypes E and N. Change some parameters to use the unpredicated subtypes, because they sometimes return e.g. Empty. Note that N_Entity_Id has a predicate; Entity_Id does not. * exp_tss.adb (Base_Init_Proc): Use Entity_Id instead of E, because otherwise we fail the predicate. We shouldn't be referring to single-letter names from far away anyway. * sem_aux.adb (Is_Derived_Type): Likewise. * sem_res.adb (Is_Definite_Access_Type): Use N_Entity_Id for predicate. * types.ads (Entity_Id): Add comment explaining the difference between Entity_Id and N_Entity_Id.
2022-07-04[Ada] Tech debt: Remove code duplicationJustin Squirek5-107/+47
This patch corrects removes some code duplication within the GNAT compiler. gcc/ada/ * exp_util.adb (Remove_Side_Effects): Combine identical branches. * sem_attr.adb (Analyze_Attribute): Combine identical cases Attribute_Has_Same_Storage and Attribute_Overlaps_Storage. * sem_prag.adb (Check_Role): Combine E_Out_Parameter case with general case for parameters. * sem_util.adb (Accessibility_Level): Combine identical branches. * sprint.adb (Sprint_Node_Actual): Combine cases for N_Real_Range_Specification and N_Signed_Integer_Type_Definition.
2022-07-04[Ada] Single character argument in call to Quote_Argument raises errorJustin Squirek1-1/+1
This patch corrects an issue in the compiler whereby calling Quote_Argument with an argument that is of size 1 may lead to a CONSTRAINT_ERROR raised at runtime due to an undersized buffer. gcc/ada/ * libgnat/s-os_lib.adb (Quote_Argument): Modify the result buffer size calculation to handle the case where Arg'Length is 1.
2022-07-04[Ada] Fix missing error on 'Access of constrained arrayBob Duff3-7/+14
For X'Access, the designated subtype of the access type must statically match the nominal subtype of X. This patch fixes a bug where the error was not detected when there is an unrelated declaration of the form "Y : T := X;", where T is an unconstrained array subtype. gcc/ada/ * exp_util.adb (Expand_Subtype_From_Expr): Generate a new subtype when Is_Constr_Subt_For_UN_Aliased is True, so the Is_Constr_Subt_For_U_Nominal flag will not be set on the preexisting subtype. * sem_attr.adb, sem_ch3.adb: Minor.
2022-07-04[Ada] Do not use front-end build-in-place mechanism for nonlimited typesEric Botcazou2-87/+17
It was only used in specific cases for controlled types but no longer provides any significant benefit in practice. gcc/ada/ * debug.adb (d.9): Remove usage. * exp_ch6.adb (Expand_Simple_Function_Return): Remove redundant test on Debug_Flag_Dot_L. (Is_Build_In_Place_Result_Type): Return false for nonlimited types. (Is_Build_In_Place_Function): Tidy up and remove redundant test on Debug_Flag_Dot_L.
2022-07-04[Ada] Call-initialize all controlled objects in placeEric Botcazou4-42/+56
This changes the compiler to build in place almost all objects that need finalization and are initialized with the result of a function call, thus saving a pair of Adjust/Finalize calls for the anonymous return object. gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): Don't adjust the object if the expression is a function call. <Rewrite_As_Renaming>: Return true if the object needs finalization and is initialized with the result of a function call returned on the secondary stack. * exp_ch6.adb (Expand_Ctrl_Function_Call): Add Use_Sec_Stack boolean parameter. Early return if the parent is an object declaration and Use_Sec_Stack is false. (Expand_Call_Helper): Adjust call to Expand_Ctrl_Function_Call. * exp_ch7.adb (Find_Last_Init): Be prepared for initialization still present in the object declaration. * sem_ch3.adb (Analyze_Object_Declaration): Call the predicates Needs_Secondary_Stack and Needs_Finalization to guard the renaming optimization.