2015-02-20 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Feb 2015 14:38:28 +0000 (14:38 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 20 Feb 2015 14:38:28 +0000 (14:38 +0000)
* sem_prag.adb (Analyze_Pragma, case Obsolescent): Pragma
legally applies to an abstract subprogram declaration.
* freeze.adb: Minor comment addition.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220870 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/freeze.adb
gcc/ada/sem_prag.adb

index 60acc83..cc49e4c 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-20  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_prag.adb (Analyze_Pragma, case Obsolescent): Pragma
+       legally applies to an abstract subprogram declaration.
+       * freeze.adb: Minor comment addition.
+
 2015-02-20  Robert Dewar  <dewar@adacore.com>
 
        * errout.ads: Document replacement of Name_uPre/Post/Type_Invariant.
index c16a4e2..e01b9cc 100644 (file)
@@ -8035,7 +8035,13 @@ package body Freeze is
          end if;
 
          --  If a pragma Import follows, we assume that it is for the current
-         --  target of the address clause, and skip the warning.
+         --  target of the address clause, and skip the warning. There may be
+         --  a source pragma or an aspect that specifies import and generates
+         --  the corresponding pragma. These will indicate that the entity is
+         --  imported and that is checked above so that the spurious warning
+         --  (generated when the entity is frozen) will be suppressed. The
+         --  pragma may be attached to the aspect, so it is not yet a list
+         --  member.
 
          if Is_List_Member (Parent (Expr)) then
             Decl := Next (Parent (Expr));
index ac745e7..dd3e78b 100644 (file)
@@ -17233,13 +17233,16 @@ package body Sem_Prag is
                   end;
                end if;
 
-            --  Cases where we must follow a declaration
+            --  Cases where we must follow a declaration, including an
+            --  abstract subprogram declaration, which is not in the
+            --  other node subtypes.
 
             else
                if         Nkind (Decl) not in N_Declaration
                  and then Nkind (Decl) not in N_Later_Decl_Item
                  and then Nkind (Decl) not in N_Generic_Declaration
                  and then Nkind (Decl) not in N_Renaming_Declaration
+                 and then Nkind (Decl) /= N_Abstract_Subprogram_Declaration
                then
                   Error_Pragma
                     ("pragma% misplaced, "