When generating constraint checks for types whose size depend on a
discriminant, the frontend would generate a reference to the
discriminant. This would result in a crash as the backend actually needs
a reference to the object itself.

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

gcc/ada/

        * exp_attr.adb (Expand_N_Attribute_Reference): Check if type
        depends on discriminant.
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -3456,8 +3456,12 @@ package body Exp_Attr is
          --  replace this attribute with a direct reference to the attribute of
          --  the appropriate index subtype (since otherwise the back end will
          --  try to give us the value of 'First for this implementation type).
+         --  Do not do this if Ptyp depends on a discriminant as its bounds
+         --  are only available through N.
 
-         if Is_Constrained_Packed_Array (Ptyp) then
+         if Is_Constrained_Packed_Array (Ptyp)
+           and then not Size_Depends_On_Discriminant (Ptyp)
+         then
             Rewrite (N,
               Make_Attribute_Reference (Loc,
                 Attribute_Name => Attribute_Name (N),


Reply via email to