This fixes an error in the handling of attributes where the prefix
raises an exception. This resulted from other errors in the program.
No simple test case has been found, but the correction is clearly
safe.

Tested on x86_64-pc-linux-gnu, committed on trunk

2014-10-17  Robert Dewar  <de...@adacore.com>

        * sem_attr.adb (Eval_Attribute): Ensure that attribute
        reference is not marked as being a static expression if the
        prefix evaluation raises CE.

Index: sem_attr.adb
===================================================================
--- sem_attr.adb        (revision 216367)
+++ sem_attr.adb        (working copy)
@@ -7553,15 +7553,17 @@
                Static :=
                  Static and then not Is_Constr_Subt_For_U_Nominal (P_Type);
                Set_Is_Static_Expression (N, Static);
-
             end if;
 
             while Present (Nod) loop
                if not Is_Static_Subtype (Etype (Nod)) then
                   Static := False;
                   Set_Is_Static_Expression (N, False);
+
                elsif not Is_OK_Static_Subtype (Etype (Nod)) then
                   Set_Raises_Constraint_Error (N);
+                  Static := False;
+                  Set_Is_Static_Expression (N, False);
                end if;
 
                --  If however the index type is generic, or derived from
@@ -7591,6 +7593,7 @@
 
       begin
          E := E1;
+
          while Present (E) loop
 
             --  If expression is not static, then the attribute reference
@@ -7638,6 +7641,7 @@
          end loop;
 
          if Raises_Constraint_Error (Prefix (N)) then
+            Set_Is_Static_Expression (N, False);
             return;
          end if;
       end;

Reply via email to