When analysing aspect Yield we were adding a minimum decoration to the
annotated entity by setting its kind to E_Function/E_Procedure. This
kind was then correctly reset to E_Generic_Function/E_Generic_Procedure
after all aspects has been analysed.
It seems cleaner to set this kind once and correctly before analysing
aspects on generic subprograms. This way we don't need to repeat this
minimal decoration for other aspects, e.g. Relaxed_Initialization.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Call
Analyze_Aspect_Specifications after setting Ekind of the
analyzed entity.
* sem_ch13.adb (Analyze_Aspect_Yield): Remove minimal decoration
of generic subprograms.
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -3860,13 +3860,6 @@ package body Sem_Ch12 is
Enter_Name (Id);
Set_Scope_Depth_Value (Id, Scope_Depth (Current_Scope) + 1);
- -- Analyze the aspects of the generic copy to ensure that all generated
- -- pragmas (if any) perform their semantic effects.
-
- if Has_Aspects (N) then
- Analyze_Aspect_Specifications (N, Id);
- end if;
-
Push_Scope (Id);
Enter_Generic_Scope (Id);
Set_Inner_Instances (Id, New_Elmt_List);
@@ -3880,6 +3873,13 @@ package body Sem_Ch12 is
Set_Ekind (Id, E_Generic_Procedure);
end if;
+ -- Analyze the aspects of the generic copy to ensure that all generated
+ -- pragmas (if any) perform their semantic effects.
+
+ if Has_Aspects (N) then
+ Analyze_Aspect_Specifications (N, Id);
+ end if;
+
-- Set SPARK_Mode from context
Set_SPARK_Pragma (Id, SPARK_Mode_Pragma);
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -2563,22 +2563,6 @@ package body Sem_Ch13 is
end if;
if Expr_Value then
-
- -- Adding minimum decoration to generic subprograms to set
- -- the Yield attribute (since at this stage it may not be
- -- set; see Analyze_Generic_Subprogram_Declaration).
-
- if Nkind (N) in N_Generic_Subprogram_Declaration
- and then Ekind (E) = E_Void
- then
- if Nkind (Specification (N)) = N_Function_Specification
- then
- Set_Ekind (E, E_Function);
- else
- Set_Ekind (E, E_Procedure);
- end if;
- end if;
-
Set_Has_Yield_Aspect (E);
end if;