sem_attr.adb (Analyze_Attribute, case 'Old): The reference is legal if within an...
authorEd Schonberg <schonberg@adacore.com>
Thu, 31 Jul 2014 13:24:48 +0000 (13:24 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 31 Jul 2014 13:24:48 +0000 (15:24 +0200)
2014-07-31  Ed Schonberg  <schonberg@adacore.com>

* sem_attr.adb (Analyze_Attribute, case 'Old):  The reference is
legal if within an aspect specification for a generic subprogram.

From-SVN: r213362

gcc/ada/ChangeLog
gcc/ada/sem_attr.adb

index 1c684825746bdf4821de2232b7375885fdafc54c..41f233cd27cb3021af697197495a8f8d10538dcc 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-31  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_attr.adb (Analyze_Attribute, case 'Old):  The reference is
+       legal if within an aspect specification for a generic subprogram.
+
 2014-07-31  Javier Miranda  <miranda@adacore.com>
 
        * gnat1drv.adb (Back_End_Inlining): Set to false if
index 88c3c5d6e27dc389bb6afef9de5e7e84e8b4bf87..951ec06e4639e14a8fc868535030ce664a78aba6 100644 (file)
@@ -4664,7 +4664,10 @@ package body Sem_Attr is
          --  process of being preanalyzed. Perform the semantic checks now
          --  before the pragma is relocated and/or expanded.
 
-         if In_Spec_Expression then
+         --  For a generic subprogram, postconditions are preanalyzed as well
+         --  for name capture, and still appear within an aspect spec.
+
+         if In_Spec_Expression or Inside_A_Generic then
             Prag := N;
             while Present (Prag)
                and then not Nkind_In (Prag, N_Aspect_Specification,
@@ -4677,10 +4680,11 @@ package body Sem_Attr is
             end loop;
 
             --  In ASIS mode, the aspect itself is analyzed, in addition to the
-            --  corresponding pragma. Do not issue errors when analyzing the
-            --  aspect.
+            --  corresponding pragma. Don't issue errors when analyzing aspect.
 
-            if Nkind (Prag) = N_Aspect_Specification then
+            if Nkind (Prag) = N_Aspect_Specification
+              and then Chars (Identifier (Prag)) = Name_Post
+            then
                null;
 
             --  In all other cases the related context must be a pragma