[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 10 Oct 2014 14:42:22 +0000 (16:42 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 10 Oct 2014 14:42:22 +0000 (16:42 +0200)
2014-10-10  Ed Schonberg  <schonberg@adacore.com>

* sem_ch13.adb (Analyze_Aspect_Specifications, Library_Unit_Aspects):
Aspect specification is legal on a local instantiation of a
library-level generic unit.

2014-10-10  Gary Dismukes  <dismukes@adacore.com>

* gnat1drv.adb (Adjust_Global_Switches): Set Front_End_Inlining
if inlining has been enabled via -gnatn and the target is not GCC.

2014-10-10  Ed Schonberg  <schonberg@adacore.com>

* freeze.adb (Freeze_Entity): Freezing a subprogram does
not always freeze its profile. In particular, an attribute
reference that takes the access type does not freeze the types
of the formals.

From-SVN: r216090

gcc/ada/ChangeLog
gcc/ada/freeze.adb
gcc/ada/gnat1drv.adb
gcc/ada/sem_ch13.adb

index 6de6c99a669289fedb3110b1b05c0af5fb7abac7..50e654ca3d93277e3d131cc32d96b1b831b4676f 100644 (file)
@@ -1,3 +1,21 @@
+2014-10-10  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch13.adb (Analyze_Aspect_Specifications, Library_Unit_Aspects):
+       Aspect specification is legal on a local instantiation of a
+       library-level generic unit.
+
+2014-10-10  Gary Dismukes  <dismukes@adacore.com>
+
+       * gnat1drv.adb (Adjust_Global_Switches): Set Front_End_Inlining
+       if inlining has been enabled via -gnatn and the target is not GCC.
+
+2014-10-10  Ed Schonberg  <schonberg@adacore.com>
+
+       * freeze.adb (Freeze_Entity): Freezing a subprogram does
+       not always freeze its profile.  In particular, an attribute
+       reference that takes the access type does not freeze the types
+       of the formals.
+
 2014-10-10  Robert Dewar  <dewar@adacore.com>
 
        * errout.adb (Adjust_Name_Case): New procedure.
index 7fdd2ab5289f030238bdc5ba680c67ed4e1aad75..bdc2ea15e7c66e00c2184190422ac2ff7e905f93 100644 (file)
@@ -4004,7 +4004,17 @@ package body Freeze is
             --  any extra formal parameters are created since we now know
             --  whether the subprogram will use a foreign convention.
 
-            if not Is_Internal (E) then
+            --  In Ada 2012, freezing a subprogram does not always freeze
+            --  the corresponding profile (see AI05-019). An attribute
+            --  reference is not a freezing point of the profile.
+            --  Other constructs that should not freeze ???
+
+            if Ada_Version > Ada_2005
+              and then Nkind (N) = N_Attribute_Reference
+            then
+               null;
+
+            elsif not Is_Internal (E) then
                declare
                   F_Type    : Entity_Id;
                   R_Type    : Entity_Id;
index 50f4befcc10bc76dd1cb301c9ce6587eb03462e3..545d1436b3bdb6c759e1f8ba84eebb1aff70d7c7 100644 (file)
@@ -583,6 +583,12 @@ procedure Gnat1drv is
          end if;
       end if;
 
+      --  Treat -gnatn as equivalent to -gnatN for non-GCC targets
+
+      if Inline_Active and then not Front_End_Inlining then
+         Front_End_Inlining := VM_Target /= No_VM or else AAMP_On_Target;
+      end if;
+
       --  Set back end inlining indication
 
       Back_End_Inlining :=
index 709dabe29db055c555f5c61dad9f6cc2736eca53..ca11c72e37ba6c24e8c50589b43d22b58a66831c 100644 (file)
@@ -3018,12 +3018,15 @@ package body Sem_Ch13 is
                   --  of a package declaration, the pragma needs to be inserted
                   --  in the list of declarations for the associated package.
                   --  There is no issue of visibility delay for these aspects.
+                  --  Aspect is legal on a local instantiation of a library-
+                  --  level generic unit.
 
                   if A_Id in Library_Unit_Aspects
                     and then
                       Nkind_In (N, N_Package_Declaration,
                                    N_Generic_Package_Declaration)
                     and then Nkind (Parent (N)) /= N_Compilation_Unit
+                    and then not Is_Generic_Instance (Defining_Entity (N))
                   then
                      Error_Msg_N
                        ("incorrect context for library unit aspect&", Id);