diff options
author | Bob Duff <duff@adacore.com> | 2022-01-28 14:40:27 -0500 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2022-05-11 08:53:19 +0000 |
commit | 6281d36342c29cdd9acb32032f59bf440953c942 (patch) | |
tree | ca109690a0c1cfd96417b991e962f397ff623c19 | |
parent | 470fff3d8e48ede98f0a74a1beb9eafc7452f4b4 (diff) | |
download | gcc-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.adb | 4 |
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); |