From: Ed Schonberg Date: Mon, 10 May 2021 13:40:22 +0000 (-0400) Subject: [Ada] Crash on use of 'Img on record type in expression X-Git-Tag: basepoints/gcc-13~6247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a7961c89914cf544018e731693418f18b5cc984;p=thirdparty%2Fgcc.git [Ada] Crash on use of 'Img on record type in expression gcc/ada/ * exp_ch4.adb (Process_Transient_In_Expression): Ensure that Fin_Context, used to insert finalization code for the expression, is a list member: the value returned by Find_Hook_Context may be an expression node when the transient is part of a larger expression and it has a non-boolean type. --- diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 21b2c2225eb5..738d651c6938 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -14952,7 +14952,17 @@ package body Exp_Ch4 is -- Hook := null; -- end if; + -- Note that the value returned by Find_Hook_Context may be an + -- operator node, which is not a list member. We must locate in the + -- tree the proper node after which to inwert the finaliation code. + else + while not Is_List_Member (Fin_Context) loop + Fin_Context := Parent (Fin_Context); + end loop; + + pragma Assert (Present (Fin_Context)); + Insert_Action_After (Fin_Context, Make_Implicit_If_Statement (Obj_Decl, Condition =>