aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2021-05-10 09:40:22 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-06 14:46:55 +0000
commit3a7961c89914cf544018e731693418f18b5cc984 (patch)
treef21ed754905cbdc28fba42d7965834c62077b663
parentcb338455b39c13cc2385b653dc9bb89edca24b62 (diff)
downloadgcc-3a7961c89914cf544018e731693418f18b5cc984.zip
gcc-3a7961c89914cf544018e731693418f18b5cc984.tar.gz
gcc-3a7961c89914cf544018e731693418f18b5cc984.tar.bz2
[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.
-rw-r--r--gcc/ada/exp_ch4.adb10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 21b2c22..738d651 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 =>