From: Eric Botcazou Date: Sat, 19 Feb 2022 11:30:47 +0000 (+0100) Subject: [Ada] Do not overwrite limited view of result type X-Git-Tag: basepoints/gcc-14~6811 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85df62468c26335d7d771f319620f7a51f58e448;p=thirdparty%2Fgcc.git [Ada] Do not overwrite limited view of result type This removes obsolete code that overwrites a limited view present as the result type of a function during the tentative analysis of prefixed views for function calls involving tagged types. The original view is necessary for the code generator to break the circularity present in this setup. The change also adds a couple of guards for the illegal case where the limited view is the only view available when the function is invoked. gcc/ada/ * aspects.adb (Find_Value_Of_Aspect): Add guard. * sem_ch4.adb (Complete_Object_Operation): Remove obsolete code. * sem_ch5.adb (Has_Sec_Stack_Default_Iterator): Add guard. --- diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb index 62603d6b4ba..3471a81f176 100644 --- a/gcc/ada/aspects.adb +++ b/gcc/ada/aspects.adb @@ -285,7 +285,9 @@ package body Aspects is begin if Present (Spec) then - if A = Aspect_Default_Iterator then + if A = Aspect_Default_Iterator + and then Present (Aspect_Rep_Item (Spec)) + then return Expression (Aspect_Rep_Item (Spec)); else return Expression (Spec); diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 5987b796ae2..ad7448fedb5 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -9248,19 +9248,6 @@ package body Sem_Ch4 is Save_Interps (Subprog, Node_To_Replace); else - -- The type of the subprogram may be a limited view obtained - -- transitively from another unit. If full view is available, - -- use it to analyze call. If there is no nonlimited view, then - -- this is diagnosed when analyzing the rewritten call. - - declare - T : constant Entity_Id := Etype (Subprog); - begin - if From_Limited_With (T) then - Set_Etype (Entity (Subprog), Available_View (T)); - end if; - end; - Analyze (Node_To_Replace); -- If the operation has been rewritten into a call, which may get diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index a0f22060007..0a836089d95 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -3675,6 +3675,7 @@ package body Sem_Ch5 is begin return Present (Def_Iter) + and then Present (Etype (Def_Iter)) and then Requires_Transient_Scope (Etype (Def_Iter)); end Has_Sec_Stack_Default_Iterator;