sem_prag.adb (Analyze_Pragma, [...]): Pragma legally applies to an abstract subprogra...
authorEd Schonberg <schonberg@adacore.com>
Fri, 20 Feb 2015 14:38:28 +0000 (14:38 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 20 Feb 2015 14:38:28 +0000 (15:38 +0100)
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.

From-SVN: r220870

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

index 60acc83cbcd1af4aa8a1a8ea0b758711a03ed24e..cc49e4cabb0d3b7fd41713bd32bc14cc98df44ca 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 c16a4e29cf6caa805e070a264367e0b24a73c87c..e01b9cc6f8db3057589b5261f29a432f46b55763 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 ac745e7706decd529798561fa34285be150d739a..dd3e78b27edfac71496a67a8b1fa09e17b8df253 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, "