From: Bob Duff Date: Fri, 28 Jan 2022 19:40:27 +0000 (-0500) Subject: [Ada] fix crash on Secondary_Stack_Size with discriminant X-Git-Tag: basepoints/gcc-14~6909 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6281d36342c29cdd9acb32032f59bf440953c942;p=thirdparty%2Fgcc.git [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. --- diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 53b0ec994c9..d4464e2b8c9 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);