[Ada] Analyze aspects once generic subprograms are recognized
authorPiotr Trojanek <trojanek@adacore.com>
Thu, 14 May 2020 10:11:52 +0000 (12:11 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 8 Jul 2020 14:55:53 +0000 (10:55 -0400)
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.

gcc/ada/sem_ch12.adb
gcc/ada/sem_ch13.adb

index 11b6ce215f428759e11e484d3a1256be2dc64792..c04a20af7c60505c9439c8c0389e7da6042d67b7 100644 (file)
@@ -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);
index 2131bb3719add33c52a494df3e857f464624e7ec..88d3124e10579cb1db6ed7da8ce0e08b9550e580 100644 (file)
@@ -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;