From 5f396397f6ed41e58f5708a645dbbb218421d4e3 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Wed, 8 Jul 2020 09:04:16 -0400 Subject: [PATCH] [Ada] Compiler abort on in_out function parameter with type invariant 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 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 20506c807ef..aa67343a1c7 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -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); -- 2.30.2