aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-02-19 12:30:47 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2022-05-13 08:04:34 +0000
commit85df62468c26335d7d771f319620f7a51f58e448 (patch)
treeec6a9b944f4ca04a7974908bd11a022396f17a92
parent18e278727e1a0430f50e878dbfadb35dae54baff (diff)
downloadgcc-85df62468c26335d7d771f319620f7a51f58e448.zip
gcc-85df62468c26335d7d771f319620f7a51f58e448.tar.gz
gcc-85df62468c26335d7d771f319620f7a51f58e448.tar.bz2
[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.
-rw-r--r--gcc/ada/aspects.adb4
-rw-r--r--gcc/ada/sem_ch4.adb13
-rw-r--r--gcc/ada/sem_ch5.adb1
3 files changed, 4 insertions, 14 deletions
diff --git a/gcc/ada/aspects.adb b/gcc/ada/aspects.adb
index 62603d6..3471a81 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 5987b79..ad7448f 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 a0f2206..0a83608 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;