aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
AgeCommit message (Collapse)AuthorFilesLines
2023-06-15ada: Fix aspect Linker_Section ignored on subprogram bodyEric Botcazou1-12/+22
The compiler is waiting for the freeze node of the body, but it is never generated since the freezing of the body is not delayed. The change also removes an obsolete piece of code. gcc/ada/ * sem_ch13.adb (Analyze_Aspect_Specifications): Add missing items in the list of aspects handled by means of Insert_Pragma. <Aspect_Linker_Section>: Remove obsolete code. Do not delay the processing of the aspect if the entity is already frozen.
2023-06-15ada: Cleanup analysis of iterated component associationPiotr Trojanek1-7/+5
Cleanups related to analysis of iterated component association for GNATprove. gcc/ada/ * sem_aggr.adb (Resolve_Array_Aggregate): Simplify comment. (Resolve_Iterated_Component_Association): Tune comment; change variable to constant.
2023-06-14Daily bump.GCC Administrator1-0/+326
2023-06-13ada: Fix decoration of iterated component association for GNATprovePiotr Trojanek1-8/+1
This patch is an alternative solution for a recent fix in analysis of iterated component association. To recap, if the iterated expression is an aggregate, we want to propagate the component type downward with a call to Resolve_Aggr_Expr; otherwise we want this expression to be only preanalysed (since the association might need to be repeatedly evaluated), but also we need to apply predicate and range checks to the expression itself (these are required for GNATprove). It turns out that Resolve_Aggr_Expr already knows how to deal with a nested aggregate and also works for GNATprove, where it both preanalyzes the expression and applies necessary checks. In other words, expression of the iterated component association is now resolved just like expression of an ordinary array aggregate. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Simply resolve the expression.
2023-06-13ada: Add missing ss_mark/ss_release in quantified expressionsBob Duff1-0/+26
If a quantified expression says "for all ... of F(...)" where F(...) is a function call that returns on the secondary stack, we need to clean up the secondary stack. This patch adds the required ss_mark/ss_release in that case. gcc/ada/ * exp_ch4.adb (Expand_N_Quantified_Expression): Detect the secondary-stack case, and find the innermost scope where we should mark/release, and Set_Uses_Sec_Stack on that. Skip intermediate blocks and loops that are part of expansion.
2023-06-13ada: Recognize iterated_component_association as repeatedly evaluatedPiotr Trojanek1-1/+2
As iterated_component_association is an array_component_association (because of a grammar rule Ada 2022 RM 4.3.3(5/5)), its expression is repeatedly evaluated (because of Ada 2022 RM 6.1.1(22.14/5)). With this patch we will now get errors for both conjuncts in this code, which have semantically equivalent array aggregates that use an ordinary component association and iterated component association. procedure Iter (S : String) with Post => String'(for J in 1 .. 3 => S (S'First)'Old) = String'( 1 .. 3 => S (S'First)'Old); gcc/ada/ * sem_util.adb (Is_Repeatedly_Evaluated): Recognize iterated component association as repeatedly evaluated.
2023-06-13ada: Recognize iterated_component_association as potentially unevaluatedPiotr Trojanek1-4/+10
Routine Is_Potentially_Unevaluated was written for Ada 2012, but now we use it for Ada 2022 as well, so it must recognize iterated component associations (which were added by Ada 2022) as an array component association. gcc/ada/ * sem_util.adb (Is_Potentially_Unevaluated): Recognize iterated component association as potentially unevaluated.
2023-06-13ada: Disable inlining in potentially unevaluated contextsPiotr Trojanek1-15/+6
Instead of explicitly disabling inlining in quantified expressions, (which happen to be only preanalysed) and then disabling inlining in potentially unevaluated contexts that are fully analysed (which happen to include quantified expressions), we now simply disable inlining in all potentially unevaluated contexts, regardless of the full analysis mode. This also disables inlining in iterated component associations, which can be both preanalysed or fully analysed depending on their expression, but nevertheless are potentially unevaluated. gcc/ada/ * sem_res.adb (Resolve_Call): Replace early call to In_Quantified_Expression with a call to Is_Potentially_Unevaluated that was only done when Full_Analysis is true.
2023-06-13ada: Implement new aspect Always_Terminates for SPARKPiotr Trojanek17-24/+295
This patch allows subprograms to be annotated with aspect Always_Terminates that requires a boolean expression. When this expression evaluates to True, the subprogram is required to terminate or raise an exception, but not loop infinitely. This aspect is only meant to be used by GNATprove and it has no meaningful run-time semantics: either the annotated subprogram terminates and then the aspect expression doesn't matter, or the subprogram loops infinitely and there is nothing we can do. (We could also evaluate the aspect expression just to detect run-time errors in the expression itself, but this can be implemented later, after a backend support for the aspect is added to GNATprove.) Implementation of this aspect is heavily based on the implementation of Subprogram_Variant, which in turn is heavily based on the implementation of Contract_Cases. Since the new aspect is not yet expanded, there is no corresponding assertion kind that would control the expansion. gcc/ada/ * aspects.ads (Aspect_Id): Add new aspect. (Implementation_Defined_Aspect): New aspect is implementation-defined. (Aspect_Argument): New aspect has an expression argument. (Is_Representation_Aspect): New aspect is not a representation aspect. (Aspect_Names): Link new aspect identifier with a name. (Aspect_Delay): New aspect is never delayed. * contracts.adb (Expand_Subprogram_Contract): Mention new aspect in comment. (Add_Contract_Item): Attach pragma corresponding to the new aspect to contract items. (Analyze_Entry_Or_Subprogram_Contract): Analyze pragma corresponding to the new aspect that appears with subprogram spec. (Analyze_Subprogram_Body_Stub_Contract): Expand pragma corresponding to the new aspect. * contracts.ads (Add_Contract_Item, Analyze_Entry_Or_Subprogram_Contract) (Analyze_Entry_Or_Subprogram_Body_Contract) (Analyze_Subprogram_Body_Stub_Contract): Mention new aspect in comment. * einfo-utils.adb (Get_Pragma): Return pragma attached to contract. * einfo-utils.ads (Get_Pragma): Mention new contract in comment. * exp_prag.adb (Expand_Pragma_Always_Terminates): Placeholder for possibly expanding new aspect. * exp_prag.ads (Expand_Pragma_Always_Terminates): Dedicated routine for expansion of the new aspect. * inline.adb (Remove_Aspects_And_Pragmas): Remove aspect from inlined bodies. * par-prag.adb (Prag): Postpone checking of the pragma until analysis. * sem_ch12.adb: Mention new aspect in explanation of handling contracts on generic units. * sem_ch13.adb (Analyze_Aspect_Specifications): Convert new aspect into a corresponding pragma. (Check_Aspect_At_Freeze_Point): Don't expect new aspect. * sem_prag.adb (Analyze_Always_Terminates_In_Decl_Part): Analyze pragma corresponding to the new aspect. (Analyze_Pragma): Handle pragma corresponding to the new aspect. (Is_Non_Significant_Pragma_Reference): Handle references appearing within new aspect. * sem_prag.ads (Aspect_Specifying_Pragma): New aspect can be emulated with a pragma. (Assertion_Expression_Pragma): New aspect has an assertion expression. (Pragma_Significant_To_Subprograms): New aspect is significant to subprograms. (Analyze_Always_Terminates_In_Decl_Part): Add spec for routine that analyses new aspect. (Find_Related_Declaration_Or_Body): Mention new aspect in comment. * sem_util.adb (Is_Subprogram_Contract_Annotation): New aspect is a subprogram contract annotation. * sem_util.ads (Is_Subprogram_Contract_Annotation): Mention new aspect in comment. * sinfo.ads (Is_Generic_Contract_Pragma): New pragma is a generic contract. (Contract): Explain attaching new pragma to subprogram contract. * snames.ads-tmpl (Name_Always_Terminates): New name for the new contract. (Pragma_Always_Terminates): New pragma identifier.
2023-06-13ada: Skip elaboration checks for abstract subprograms on derived typesPiotr Trojanek1-1/+4
Elaboration checks skip abstract subprogram declarations, which have no body that could be examined. Now these checks also skip abstract subprograms of a derived type, which have no body either. gcc/ada/ * sem_elab.adb (Check_Overriding_Primitive): Prevent Corresponding_Body to be called with entity of an abstract subprogram.
2023-06-13ada: Fix another case of missing Has_Private_View flagEric Botcazou1-1/+1
It occurs for the case of a function call first parsed as an identifier. gcc/ada/ * sem_ch12.adb (Save_References_In_Identifier): In the case where the identifier has been turned into a function call by analysis, call Set_Global_Type on the entity if it is global.
2023-06-13ada: Fix iterated component initializationMarc Poulhiès1-3/+8
The call to Resolve_Aggr_Expr may leave references to temporary entities used to check for the construct legality and meant to be removed. Using Preanalyze_And_Resolve correctly guarantees that there is no visible occurrence of such entities. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Call Preanalyze_And_Resolve instead of Resolve_Aggr_Expr except for aggregate. Co-authored-by: Ed Schonberg <schonberg@adacore.com>
2023-06-13ada: Fix exception raised on invalid contract in generic packageEric Botcazou1-10/+21
This lets the compiler give a proper error message instead. gcc/ada/ * contracts.adb (Contract_Error): New exception. (Add_Contract_Item): Raise Contract_Error instead of Program_Error. (Add_Generic_Contract_Pragma): Deal with Contract_Error.
2023-06-13ada: Fix spurious error on call to function returning private in genericEric Botcazou2-58/+63
The spurious error is given on a call to a parameterless function returning a private type, present in the body of a generic construct both declared and instantiated in the presence of the full view of the type, because this full view is not properly restored for the instantiation. This is supposed to be handled by the Has_Private_View mechanism, but it is bypassed here because the call to the parameterless function is first parsed as a simple identifier before being later analyzed as a function call. Fixing this first issue uncovered another one, whereby the Has_Private_View flag was not properly set on an operator returning a private type that ends up being later resolved as a function call. Finally a small loophole in Eval_Attribute exposed by the change also needs to be plugged. gcc/ada/ * sem_attr.adb (Eval_Attribute): Add more exceptions to the early return for a prefix which is a nonfrozen generic actual type. * sem_ch12.adb (Copy_Generic_Node): Also check private views in the case of an entity name or operator analyzed as a function call. (Set_Global_Type): Make it a child of Save_Global_References. (Save_References_In_Operator): In the case where the operator has been turned into a function call, call Set_Global_Type on the entity if it is global.
2023-06-13ada: Fix internal error on imported function with post-conditionEric Botcazou1-0/+16
The problem, which is also present for an expression function, is that the function is invoked in the initializing expression of a variable declared in the same declarative part as the function, which causes the freezing of its artificial body before the post-condition is analyzed on its spec. gcc/ada/ * contracts.adb (Analyze_Entry_Or_Subprogram_Body_Contract): For a subprogram body that has no contracts and does not come from source, make sure that contracts on its corresponding spec are analyzed, if any, before expanding them.
2023-06-13ada: Streamline expansion of controlled actions for aggregatesEric Botcazou9-750/+142
This changes the strategy used to expand controlled actions for array and record aggregates so as to make it simpler and more robust. The current strategy is to set the No_Ctrl_Actions flag on the assignments generated during the expansion of aggregate, as done during the expansion of initialization procedures, and to generate the adjustments of the LHS manually in the same list of actions, before sending the entire list for analysis and expansion. The problem is that, when the RHS also requires controlled actions, the No_Ctrl_Actions flag prevents transient scopes from being created around the assignments, with the end result that the actions are "naturally" generated between the assignments and adjustments of the LHS, causing premature finalization of the RHS. In order to counter that, the controlled actions of the RHS must also be generated manually during the expansion of the aggregates, after blocking normal processing e.g. by means of the No_Side_Effect_Removal flag. This means that, for a more complex RHS, this strategy generates a wrong order of controlled actions by default, until specifically adjusted. The new strategy is to reuse the standard machinery as much as possible, disabling only the part that is not needed for the assignments generated during the expansion of aggregates, namely the finalization of the LHS; in other words, the adjustment of the LHS is left entirely to the standard machinery and the creation of transient scopes is no longer blocked, which gives a correct order of controlled actions by default. It is implemented by means of a No_Finalize_Actions flag present on the assignments generated during the expansion. It is mostly straightforward, modulo the following hitch: the assignments are now analyzed and expanded by the common expander, which in the case of controlled assignments analyzes the final rewriting with all checks off, which in particular disables elaboration checks for the calls to the Adjust primitives; now these checks are necessary in the case where an aggregate is the initialization expression of an object declared before the body of the Adjust primitive is seen. Hence the use of an existing trick, namely Suppress/Unsuppress blocks, around the assignments. gcc/ada/ * gen_il-fields.ads (Opt_Field_Enum): Add No_Finalize_Actions and remove No_Side_Effect_Removal. * gen_il-gen-gen_nodes.adb (N_Function_Call): Remove semantic flag No_Side_Effect_Removal (N_Assignment_Statement): Add semantic flag No_Finalize_Actions. * sinfo.ads (No_Ctrl_Actions): Adjust comment. (No_Finalize_Actions): New flag on assignment statements. (No_Side_Effect_Removal): Delete. * exp_aggr.adb (Build_Record_Aggr_Code): Remove obsolete comment and Ancestor_Is_Expression variable. In the case of an extension, do not generate a call to Adjust manually, call Set_No_Finalize_Actions instead. Do not set the tags, replace call to Make_Unsuppress_Block by Make_Suppress_Block and remove useless assertions. In the general case, call Initialize_Component. (Initialize_Controlled_Component): Delete. (Initialize_Simple_Component): Delete. (Initialize_Component): Do the low-level processing, but do not generate a call to Adjust manually, call Set_No_Finalize_Actions. (Process_Transient_Component): Delete. (Process_Transient_Component_Completion): Likewise. * exp_ch5.adb (Expand_Assign_Array): Deal with No_Finalize_Actions. (Expand_Assign_Array_Loop): Likewise. (Expand_N_Assignment_Statement): Likewise. (Make_Tag_Ctrl_Assignment): Likewise. * exp_util.adb (Remove_Side_Effects): Do not test the No_Side_Effect_Removal flag. * sem_prag.adb (Process_Suppress_Unsuppress): Give the warning in SPARK mode only for pragma Suppress. * tbuild.ads (Make_Suppress_Block): New declaration. (Make_Unsuppress_Block): Adjust comment. * tbuild.adb (Make_Suppress_Block): New procedure. (Make_Unsuppress_Block): Unsuppress instead of suppressing.
2023-06-13ada: Remove obsolete code in Analyze_AssignmentEric Botcazou1-155/+1
This code was dealing with build-in-place calls for nonlimited types, but they no longer exist since Is_Build_In_Place_Result_Type => Is_Limited_View. gcc/ada/ * sem_ch5.adb (Analyze_Assignment): Turn Rhs into a constant and remove calls to the following subprograms. (Transform_BIP_Assignment): Delete. (Should_Transform_BIP_Assignment): Likewise.
2023-06-13ada: Remove unreferenced routine Is_Inherited_Operation_For_TypePiotr Trojanek2-21/+0
Remove routine that is no referenced after deconstructing of restriction SPARK_05. gcc/ada/ * sem_util.ads (Is_Inherited_Operation_For_Type): Remove spec. * sem_util.adb (Is_Inherited_Operation_For_Type): Remove body.
2023-06-13ada: Small housekeeping work in expansion of extension aggregatesEric Botcazou1-21/+15
This avoids repeatedly calling Unqualify on the same node, removes a dead call to Generate_Finalization_Actions, a redundant setting of Assignment_OK and reuses a local variable more consistently. No functional changes. gcc/ada/ * exp_aggr.adb (Build_Record_Aggr_Code): Add new variable Ancestor_Q to store the result of Unqualify on Ancestor. Remove the dead call to Generate_Finalization_Actions in the case of another aggregate as ancestor part. Remove the redundant setting of Assignment_OK. Use Init_Typ in lieu of Etype (Ancestor) more consistently.
2023-06-13ada: Fix wrong expansion of limited extension aggregateEric Botcazou1-2/+0
This happens when the ancestor part is itself an aggregate: in this case, the tag of the extension aggregate is wrongly set to that of the ancestor. gcc/ada/ * exp_aggr.adb (Build_Record_Aggr_Code): In the case of an extension aggregate of a limited type whose ancestor part is an aggregate, do not skip the final code assigning the tag of the extension.
2023-06-13ada: Mark attribute Initialized as ghost codeYannick Moy3-1/+25
Implement the SPARK RM change that defines attribute Initialized as being ghost, i.e. only allowed where a ghost entity would be allowed. gcc/ada/ * ghost.adb (Check_Ghost_Context): Allow absence of Ghost_Id for attribute. Update error message to mention Ghost_Predicate. (Is_Ghost_Attribute_Reference): New query. * ghost.ads (Is_Ghost_Attribute_Reference): New query. * sem_attr.adb (Resolve_Attribute): Check ghost context for ghost attributes.
2023-06-13ada: Add No_Elaboration_Code_All pragma to System.Storage_ElementsDaniel King1-0/+3
Allows System.Storage_Elements to be used in units that have the No_Elaboration_Code_All restriction. gcc/ada/ * libgnat/s-stoele.ads: Add No_Elaboration_Code_All pragma.
2023-06-13ada: Factor out tag assignments from type in expanderEric Botcazou5-124/+57
They are performed in a few different places during expansion. gcc/ada/ * exp_util.ads (Make_Tag_Assignment_From_Type): Declare. * exp_util.adb (Make_Tag_Assignment_From_Type): New function. * exp_aggr.adb (Build_Record_Aggr_Code): Call the above function. (Initialize_Simple_Component): Likewise. * exp_ch3.adb (Build_Record_Init_Proc.Build_Assignment): Likewise. (Build_Record_Init_Proc.Build_Init_Procedure ): Likewise. (Make_Tag_Assignment): Likewise. Rename local variable and call Unqualify to go through qualified expressions. * exp_ch4.adb (Expand_Allocator_Expression): Likewise.
2023-06-13ada: Use ghost predicate in standard libraryYannick Moy2-2/+6
In preparation for attribute Initialized to become ghost, use aspect Ghost_Predicate instead of Predicate in unit Ada.Strings.Superbounded of the standard library. gcc/ada/ * libgnat/a-strsup.ads: Change predicate aspect. * sem_ch13.adb (Add_Predicate): Fix for first predicate.
2023-06-13ada: Fix expansion of aggregates with controlled componentsEric Botcazou1-3/+99
The expansion is incorrect in the case where the initialization expression of a component is a conditional expression that has a function call as one of its dependent expressions, leading to a wrong order of initialization, adjustment and finalization. gcc/ada/ * exp_aggr.adb (Initialize_Component): Perform immediate expansion of the initialization expression if it is a conditional expression and the component type is controlled.
2023-06-13ada: Factor common processing in expansion of aggregatesEric Botcazou1-640/+360
The final processing at the component level of array aggregates and record aggregates is very similar, so this factors out the common processing into three new library-level subprograms. There should be no functional changes, but the expanded code may be changed in the case of controlled components of array aggregates not covered by a multiple choice: the previous expansion used to place new declarations prior to the aggregate in this case and that is no longer the case, i.e. they are always placed right before the initialization of the component (as was done for all controlled components of record aggregates and controlled components of array aggregates covered by a multiple choice). gcc/ada/ * exp_aggr.adb (Initialize_Component): New procedure factored out from the processing of array and record aggregates. (Initialize_Controlled_Component): Likewise. (Initialize_Simple_Component): Likewise. (Build_Array_Aggr_Code.Gen_Assign): Remove In_Loop parameter. Call Initialize_Component to initialize the component. (Initialize_Array_Component): Delete. (Initialize_Ctrl_Array_Component): Likewise. (Build_Array_Aggr_Code): Adjust calls to Gen_Assign. (Build_Record_Aggr_Code): Call Initialize_Simple_Component or Initialize_Component to initialize the component. (Initialize_Ctrl_Record_Component): Delete. (Initialize_Record_Component): Likewise.
2023-06-13ada: Remove wrong comment about expansion of exceptions for GNATprovePiotr Trojanek1-5/+3
Code cleanup related to handling exceptions in GNATprove. gcc/ada/ * exp_ch11.adb (Expand_N_Raise_Statement): Expansion of raise statements never happens in GNATprove mode.
2023-06-13ada: Cleanup finding of locally handled exception handlersPiotr Trojanek1-35/+33
Code cleanup related to handling exceptions in GNATprove; semantics is unaffected. gcc/ada/ * exp_ch11.adb (Find_Local_Handler): Replace guard against other constructs appearing in the list of exception handlers with iteration using First_Non_Pragma/Next_Non_Pragma.
2023-06-13ada: Cleanup expansion of locally handled exception handlersPiotr Trojanek2-71/+55
Code cleanup related to handling exceptions in GNATprove; semantics is unaffected. gcc/ada/ * exp_ch11.ads (Find_Local_Handler): Fix typo in comment. * exp_ch11.adb (Find_Local_Handler): Remove redundant check for the Exception_Handler list being present; use membership test to eliminate local object LCN; fold nested IF statements. Remove useless ELSIF condition.
2023-06-13ada: Tune style in detection of writable function actualsPiotr Trojanek1-4/+6
Cleanup; semantics is unaffected. gcc/ada/ * sem_util.adb (Check_Function_Writable_Actuals): Tune style; use subtype name to detect membership test nodes.
2023-06-13ada: Simplify appending to a newly created listPiotr Trojanek1-3/+3
Code cleanup; semantics is unaffected. gcc/ada/ * exp_disp.adb (Make_Disp_Asynchronous_Select_Spec): Use a single call to New_List.
2023-06-13ada: Support new GNAT-specific aspect Ghost_PredicateYannick Moy23-634/+772
New aspect Ghost_Predicate allows the use of ghost entities in the predicate expression, even if the type is not ghost itself. As a result, subtypes with a ghost predicate cannot be used in membership tests. Subtypes with ghost predicates are subject to the same additional restrictions as subtypes with aspect Dynamic_Predicate. They are governed for compilation by assertion policy Ghost. Checking of the predicate itself is governed by the usual assertion policy (Static_Predicate/Dynamic_Predicate/Predicate) independently of the ghost predicate. gcc/ada/ * doc/gnat_rm/implementation_defined_aspects.rst: Document new aspect. * doc/gnat_rm/implementation_defined_pragmas.rst: Whitespace. * aspects.adb (Init_Canonical_Aspect): Set it to Predicate. * aspects.ads: Set global constants for new aspect. * einfo.ads: Describe new flag related to new aspect. * exp_ch6.adb (Can_Fold_Predicate_Call): Do not fold new aspect. * exp_util.adb (Make_Predicate_Check): Add comment. * gen_il-fields.ads: Add new flag. * gen_il-gen-gen_entities.adb: Add new flag. * ghost.adb (Is_OK_Ghost_Context): Ghost predicate is an OK ghost context. (Mark_Ghost_Pragma): Add overloading with ghost mode parameter. * ghost.ads (Mark_Ghost_Pragma): Add overloading with ghpst mode parameter. (Name_To_Ghost_Mode): Make function public. * sem_aggr.adb: Issue error for violation of valid use. * sem_case.adb: Issue error for violation of valid use. * sem_ch13.adb: Adapt for new aspect. * sem_ch3.adb (Analyze_Full_Type_Declaration): Remove dead code which was trying to propagate Has_Predicates flag in the wrong direction (from derived to parent type). (Analyze_Number_Declaration): Issue error for violation of valid use. (Build_Derived_Type): Cleanup inheritance of predicate flags from parent to derived type. (Build_Predicate_Function): Only add a predicate check when it is not ignored as Ghost code. * sem_ch4.adb (Analyze_Membership_Op): Issue an error for use of a subtype with a ghost predicate as name in a membership test. * sem_ch5.adb (Check_Predicate_Use): Issue error for violation of valid use. * sem_eval.adb: Adapt code for Dynamic_Predicate to account for Ghost_Predicate too. * sem_prag.adb (Analyze_Pragma): Make pragma ghost or not. * sem_util.adb (Bad_Predicated_Subtype_Use): Adapt to new aspect. (Inherit_Predicate_Flags): Add inheritance of flag. Add parameter to apply to derived types. * sem_util.ads (Inherit_Predicate_Flags): Change signature. * snames.ads-tmpl: Add new aspect name. * gnat_rm.texi: Regenerate.
2023-06-13ada: Remove explicit decoration of wrapper created in freezingPiotr Trojanek1-2/+0
We create wrapper functions associated with inherited functions with controlling results which are not overridden during freezing. We partly decorated them explicitly, even though they would be fully decorated later anyway. This early decoration didn't work as expected, because flag In_Private_Part that is read by Override_Dispatching_Operation it not set reliably while freezing (as explained in the comment of Is_Private_Declaration). In effect, we were getting a circularity between Alias and Overridden_Operation, which was causing GNATprove to loop infinitely. Apparently the cleanest fix is to not decorate the wrapper with an early call to Override_Dispatching_Operation. gcc/ada/ * exp_ch3.adb (Make_Controlling_Function_Wrappers): Remove early decoration.
2023-05-31Daily bump.GCC Administrator1-0/+180
2023-05-30ada: Fix wrong access for qualified aggregate with storage modelEric Botcazou1-3/+6
The previous fix to get_storage_model_access was incomplete and needs to be extended to the node itself. gcc/ada/ * gcc-interface/trans.cc (get_storage_model_access): Also strip any type conversion in the node when unwinding the components.
2023-05-30ada: Fix internal error on qualified aggregate with storage modelEric Botcazou1-17/+19
It comes from a small oversight in get_storage_model_access. gcc/ada/ * gcc-interface/trans.cc (node_is_component): Remove parentheses. (node_is_type_conversion): New predicate. (get_atomic_access): Use it. (get_storage_model_access): Likewise and look into the parent to find a component if it returns true. (present_in_lhs_or_actual_p): Likewise.
2023-05-30ada: Add missing guards for degenerate storage modelsEric Botcazou1-5/+10
gcc/ada/ * gcc-interface/trans.cc (Attribute_to_gnu) <Attr_Size>: Check that the storage model has Copy_From before instantiating loads for it. <Attr_Length>: Likewise. <Attr_Bit_Position>: Likewise. (gnat_to_gnu) <N_Indexed_Component>: Likewise. <N_Slice>: Likewise.
2023-05-30ada: Fix incorrect copies being used with 'AddressMarc Poulhiès1-4/+9
When using 'Address on an object with a size clause, gigi would end up creating a copy and using its address instead of the one of the original object, leading to incorrect behavior. Remove the conversion (that triggers the copy) when 'Address is applied to a declaration. gcc/ada/ * gcc-interface/trans.cc (Attribute_to_gnu): Also strip conversion in case of DECL.
2023-05-30ada: Fix bogus Storage_Error on dynamic array with static zero lengthEric Botcazou1-4/+21
This works around the limitations present for the support of arrays in the middle-end by clearing the TREE_OVERFLOW flag for arrays with zero length. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Array_Type>: Use a local variable for the GNAT index type. <E_Array_Subtype>: Likewise. Call Is_Null_Range on the bounds and force the zero on TYPE_SIZE and TYPE_SIZE_UNIT if it returns true.
2023-05-30ada: Fix minor issue with Mod operatorEric Botcazou1-4/+4
gcc/ada/ * gcc-interface/trans.cc (gnat_to_gnu) <N_Op_Mod>: Test the precision of the operation rather than that of the result type.
2023-05-30ada: Minor generic tweaks left and and rightEric Botcazou4-12/+14
No functional changes. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_entity) <E_Variable>: Replace integer_zero_node with null_pointer_node for pointer types. * gcc-interface/trans.cc (gnat_gimplify_expr) <NULL_EXPR>: Likewise. * gcc-interface/utils.cc (maybe_pad_type): Do not attempt to make a packable type from a fat pointer type. * gcc-interface/utils2.cc (build_atomic_load): Use a local variable. (build_atomic_store): Likewise.
2023-05-30ada: Make internal_error_function more robustEric Botcazou1-6/+16
gcc/ada/ * gcc-interface/misc.cc (internal_error_function): Be prepared for an input_location set to UNKNOWN_LOCATION.
2023-05-30ada: Adjust again the implementation of storage modelsEric Botcazou1-22/+29
The code generator must now be prepared to translate assignment statements to objects allocated with a storage model and that are not initialized yet. gcc/ada/ * gcc-interface/trans.cc (Attribute_to_gnu) <Attr_Size>: Tweak. (gnat_to_gnu) <N_Assignment_Statement>: Declare a local variable. For a target with a storage model, use the Actual_Designated_Subtype to compute the size if it is present.
2023-05-30ada: Simplify the implementation of storage modelsEric Botcazou1-103/+27
As the additional temporaries required by the semantics of nonnative storage models are now created by the front-end, in particular for actual parameters and assignment statements, the corresponding code in gigi can be removed. gcc/ada/ * gcc-interface/trans.cc (Call_to_gnu): Remove code implementing the by-copy semantics for actuals with nonnative storage models. (gnat_to_gnu) <N_Assignment_Statement>: Remove code instantiating a temporary for assignments between nonnative storage models.
2023-05-30ada: Make use of Cannot_Be_Superflat flag on N_Range nodesEric Botcazou2-3/+4
gcc/ada/ * gcc-interface/decl.cc (range_cannot_be_superflat): Return true immediately if Cannot_Be_Superflat is set. * gcc-interface/misc.cc (gnat_post_options): Do not override the -Wstringop-overflow setting.
2023-05-30ada: Disable PIE mode during the build of the Ada front-endEric Botcazou1-13/+3
This also removes some obsolete stuff. gcc/ada/ * gcc-interface/Make-lang.in (ADA_CFLAGS): Move up. (ALL_ADAFLAGS): Add $(NO_PIE_CFLAGS). (ada/mdll.o): Remove. (ada/mdll-fil.o): Likewise. (ada/mdll-utl.o): Likewise.
2023-05-30ada: Fix storage model handling for dereference as lvalue and renamingsMarc Poulhiès1-3/+21
Don't require storage access for explicit dereferences used as lvalue (e.g. Some_Access.all'Address) or for renamings. gcc/ada/ * gcc-interface/trans.cc (get_storage_model_access): Don't require storage model access for dereference used as lvalue or renamings.
2023-05-30ada: Small cleanups and fixes in expansion of aggregatesEric Botcazou1-62/+28
This streamlines the handling of qualified expressions in the expansion of aggregates and plugs a couple of loopholes that may cause memory leaks. gcc/ada/ * exp_aggr.adb (Build_Array_Aggr_Code): Move the declaration of Typ to the beginning. (Initialize_Array_Component): Test the unqualified version of the expression for the nested array case. (Initialize_Ctrl_Array_Component): Do not duplicate the expression here. Do the pattern matching of the unqualified version of it. (Gen_Assign): Call Unqualify to compute Expr_Q and use Expr_Q in subsequent pattern matching. (Initialize_Ctrl_Record_Component): Do the pattern matching of the unqualified version of the aggregate. (Build_Record_Aggr_Code): Call Unqualify. (Convert_Aggr_In_Assignment): Likewise. (Convert_Aggr_In_Object_Decl): Likewise. (Component_OK_For_Backend): Likewise. (Is_Delayed_Aggregate): Likewise.
2023-05-30ada: Fix wrong expansion of array aggregate with noncontiguous choicesEric Botcazou1-20/+18
This extends an earlier fix done for the others choice of an array aggregate to all the choices of the aggregate, since the same sharing issue may happen when the choices are not contiguous. gcc/ada/ * exp_aggr.adb (Build_Array_Aggr_Code.Get_Assoc_Expr): Duplicate the expression here instead of... (Build_Array_Aggr_Code): ...here.
2023-05-30ada: Fix internal error on array constant in expression functionEric Botcazou1-4/+21
This happens when the peculiar check emitted by Check_Large_Modular_Array is applied to an object whose actual subtype is an itype with dynamic size, because the first reference to the itype in the expanded code may turn out to be within the raise statement, which is problematic for the eloboration of this itype by the code generator at library level. gcc/ada/ * freeze.adb (Check_Large_Modular_Array): Fix head comment, use Standard_Long_Long_Integer_Size directly and generate a reference just before the raise statement if the Etype of the object is an itype declared in an open scope.