aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Duff <duff@adacore.com>2022-01-28 14:40:27 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2022-05-11 08:53:19 +0000
commit6281d36342c29cdd9acb32032f59bf440953c942 (patch)
treeca109690a0c1cfd96417b991e962f397ff623c19
parent470fff3d8e48ede98f0a74a1beb9eafc7452f4b4 (diff)
downloadgcc-6281d36342c29cdd9acb32032f59bf440953c942.zip
gcc-6281d36342c29cdd9acb32032f59bf440953c942.tar.gz
gcc-6281d36342c29cdd9acb32032f59bf440953c942.tar.bz2
[Ada] fix crash on Secondary_Stack_Size with discriminant
This patch fixes a crash caused by specifying the Secondary_Stack_Size aspect of a task type as the value of a discriminant of the task type, and then declaring a record component whose type is the task type, constrained to a discriminant of the record. gcc/ada/ * sem_ch3.adb (Get_Discr_Value): Copy the result. Otherwise, the "tree" can be malformed (a DAG, not a tree) because Get_Discr_Value could be returning some subtree already attached to the tree.
-rw-r--r--gcc/ada/sem_ch3.adb4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 53b0ec9..d4464e2 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -13963,7 +13963,7 @@ package body Sem_Ch3 is
or else D = CR_Discriminant (Discr_Id)
or else Corresponding_Discriminant (D) = Discr_Id
then
- return Node (E);
+ return New_Copy_Tree (Node (E));
end if;
Next_Discriminant (D);
@@ -13987,7 +13987,7 @@ package body Sem_Ch3 is
E := First_Elmt (Constraints);
while Present (D) loop
if D = Discr_Id then
- return Node (E);
+ return New_Copy_Tree (Node (E));
end if;
Next_Discriminant (D);