]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 14 Oct 2013 12:35:51 +0000 (14:35 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 14 Oct 2013 12:35:51 +0000 (14:35 +0200)
2013-10-14  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_prag.adb (Analyze_Global_Item): Allow
references to enclosing formal parameters.

2013-10-14  Thomas Quinot  <quinot@adacore.com>

* einfo.adb (Equivalent_Type): Add missing case
E_Access_Subprogram_Type in guard (for remote access to
subprograms) * sem_ch8.adb (Find_Direct_Name, Find_Expanded_Name):
Add missing guards to account for the presence of RAS types
that have already been replaced with the corresponding fat
pointer type.

From-SVN: r203523

gcc/ada/ChangeLog
gcc/ada/einfo.adb
gcc/ada/sem_ch8.adb
gcc/ada/sem_prag.adb

index f9c6ace636c397258e7e88e211e61ee702ae0dc9..1c86e5ccf188dc4b383015d01659d32bef561433 100644 (file)
@@ -1,3 +1,17 @@
+2013-10-14  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_prag.adb (Analyze_Global_Item): Allow
+       references to enclosing formal parameters.
+
+2013-10-14  Thomas Quinot  <quinot@adacore.com>
+
+       * einfo.adb (Equivalent_Type): Add missing case
+       E_Access_Subprogram_Type in guard (for remote access to
+       subprograms) * sem_ch8.adb (Find_Direct_Name, Find_Expanded_Name):
+       Add missing guards to account for the presence of RAS types
+       that have already been replaced with the corresponding fat
+       pointer type.
+
 2013-10-14  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * aspects.adb: Add an entry in table Canonical_Aspect for
index 2c1a094a4bb06a6a7b4531cf86b398bf2794c45e..10b4aac2cd6c21508318590b48eaadd6535a3c23 100644 (file)
@@ -1112,6 +1112,7 @@ package body Einfo is
       pragma Assert
         (Ekind_In (Id, E_Class_Wide_Type,
                        E_Class_Wide_Subtype,
+                       E_Access_Subprogram_Type,
                        E_Access_Protected_Subprogram_Type,
                        E_Anonymous_Access_Protected_Subprogram_Type,
                        E_Access_Subprogram_Type,
index ee2749f86560b431faca44df71554ae639e67117..c970192bfc49b8d91f0a965b6ec088df84e3b52e 100644 (file)
@@ -4987,6 +4987,7 @@ package body Sem_Ch8 is
 
          if Comes_From_Source (N)
            and then Is_Remote_Access_To_Subprogram_Type (E)
+           and then Ekind (E) = E_Access_Subprogram_Type
            and then Expander_Active
            and then Get_PCS_Name /= Name_No_DSA
          then
@@ -5488,6 +5489,7 @@ package body Sem_Ch8 is
       <<Found>>
       if Comes_From_Source (N)
         and then Is_Remote_Access_To_Subprogram_Type (Id)
+        and then Ekind (Id) = E_Access_Subprogram_Type
         and then Present (Equivalent_Type (Id))
       then
          --  If we are not actually generating distribution code (i.e. the
index 070d7cbb48b300c45ee91d666aa8f6e2da4bd7d0..09c0473cc7bcba901bdc4a3ca89579a11c9776fa 100644 (file)
@@ -1428,13 +1428,16 @@ package body Sem_Prag is
 
             if Present (Item_Id) then
 
-               --  A global item cannot reference a formal parameter. Do this
-               --  check first to provide a better error diagnostic.
+               --  A global item may denote a formal parameter of an enclosing
+               --  subprogram. Do this check first to provide a better error
+               --  diagnostic.
 
                if Is_Formal (Item_Id) then
-                  Error_Msg_N
-                    ("global item cannot reference formal parameter", Item);
-                  return;
+                  if Scope (Item_Id) = Subp_Id then
+                     Error_Msg_N
+                       ("global item cannot reference formal parameter", Item);
+                     return;
+                  end if;
 
                --  The only legal references are those to abstract states and
                --  variables.