2014-02-24 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Feb 2014 16:56:25 +0000 (16:56 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 24 Feb 2014 16:56:25 +0000 (16:56 +0000)
* sem_ch5.adb (Analyze_Loop_Parameter_Specification): If the
domain of iteration is an attribute reference 'Old, this is an
Ada 2012 iterator and the loop must be rewritten as such.

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

gcc/ada/ChangeLog
gcc/ada/sem_ch5.adb

index e31ec1e..126bce3 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-24  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch5.adb (Analyze_Loop_Parameter_Specification): If the
+       domain of iteration is an attribute reference 'Old, this is an
+       Ada 2012 iterator and the loop must be rewritten as such.
+
 2014-02-24  Thomas Quinot  <quinot@adacore.com>
 
        * s-fileio.adb (Errno_Message): Remove, use shared version from
index 2126f70..ead28bf 100644 (file)
@@ -2362,12 +2362,21 @@ package body Sem_Ch5 is
          Set_Parent (DS_Copy, Parent (DS));
          Preanalyze_Range (DS_Copy);
 
-         --  Ada 2012: If the domain of iteration is a function call, it is the
-         --  new iterator form.
+         --  Ada 2012: If the domain of iteration is:
+
+         --  a)  a function call,
+         --  b)  an identifier that is not a type,
+         --  c)  an attribute reference 'Old (within a postcondition)
+
+         --  then it is an iteration over a container. It was classified as
+         --  a loop specification by the parser, and must be rewritten now
+         --  to activate container iteration.
 
          if Nkind (DS_Copy) = N_Function_Call
            or else (Is_Entity_Name (DS_Copy)
                      and then not Is_Type (Entity (DS_Copy)))
+           or else (Nkind (DS_Copy) = N_Attribute_Reference
+             and then Attribute_Name (DS_Copy) = Name_Old)
          then
             --  This is an iterator specification. Rewrite it as such and
             --  analyze it to capture function calls that may require