From 6281d36342c29cdd9acb32032f59bf440953c942 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Fri, 28 Jan 2022 14:40:27 -0500 Subject: [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. --- gcc/ada/sem_ch3.adb | 4 ++-- 1 file 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); -- cgit v1.1