sem_prag.adb (Check_Precondition_Postcondition): When scanning the list of declaratio...
authorEd Schonberg <schonberg@adacore.com>
Mon, 4 Aug 2008 08:38:06 +0000 (10:38 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Aug 2008 08:38:06 +0000 (10:38 +0200)
2008-08-04  Ed Schonberg  <schonberg@adacore.com>

* sem_prag.adb (Check_Precondition_Postcondition): When scanning the
list of declaration to find previous subprogram, do not go to the
original node of a generic unit.

From-SVN: r138579

gcc/ada/sem_prag.adb

index f62d6c8..84fff32 100644 (file)
@@ -1425,7 +1425,18 @@ package body Sem_Prag is
          P := N;
          while Present (Prev (P)) loop
             P := Prev (P);
-            PO := Original_Node (P);
+
+            --  If the previous node is a generic subprogram, do not go to
+            --  to the original node, which is the unanalyzed tree: we need
+            --  to attach the pre/postconditions to the analyzed version
+            --  at this point. They get propagated to the original tree when
+            --  analyzing the corresponding body.
+
+            if Nkind (P) not in N_Generic_Declaration then
+               PO := Original_Node (P);
+            else
+               PO := P;
+            end if;
 
             --  Skip past prior pragma