]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Compiler abort on in_out function parameter with type invariant
authorEd Schonberg <schonberg@adacore.com>
Wed, 8 Jul 2020 13:04:16 +0000 (09:04 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 19 Oct 2020 09:53:40 +0000 (05:53 -0400)
gcc/ada/

* exp_ch6.adb (Add_View_Conversion_Invariants): Do not insert
generated invariant checks when the call is a function call.
These tests are properly inserted in the code in procedure
Insert_Post_Call_Actions, which takes care of finding the proper
insertion point for the checks.
(Insert_Post_Call_Actions): Add question marks to indicate
possible gap in handling function calls that appear as aggregate
components.

gcc/ada/exp_ch6.adb

index 20506c807ef6b557fb5e5d3b4e10a98520980cfb..aa67343a1c7970740e3df4cb20d18ae31edd6c66 100644 (file)
@@ -2943,7 +2943,12 @@ package body Exp_Ch6 is
             Par_Typ := Base_Type (Etype (Curr_Typ));
          end loop;
 
-         if not Is_Empty_List (Inv_Checks) then
+         --  If the node is a function call the generated tests have been
+         --  already handled in Insert_Post_Call_Actions.
+
+         if not Is_Empty_List (Inv_Checks)
+           and then Nkind (Call_Node) = N_Procedure_Call_Statement
+         then
             Insert_Actions_After (Call_Node, Inv_Checks);
          end if;
       end Add_View_Conversion_Invariants;
@@ -8388,6 +8393,7 @@ package body Exp_Ch6 is
       --  The only exception is when the function call acts as an actual in a
       --  procedure call. In this case the function call is in a list, but the
       --  post-call actions must be inserted after the procedure call.
+      --  What if the function call is an aggregate component ???
 
       elsif Nkind (Context) = N_Procedure_Call_Statement then
          Insert_Actions_After (Context, Post_Call);