[Ada] Crash on Descriptor_Size attribute
authorBob Duff <duff@adacore.com>
Thu, 12 Dec 2019 10:02:27 +0000 (10:02 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 12 Dec 2019 10:02:27 +0000 (10:02 +0000)
2019-12-12  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_attr.adb (Eval_Attribute): Never mark T'Descriptor_Size as
static, even if T is a static subtype, because otherwise we will
request the value of the attribute, which will crash because we
have not evaluated it.

From-SVN: r279287

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

index a4dc13890e00430d2a7eaa7f6fcc2c4c0bc4968b..4ad9092bd3a9be879e0a0b8407094bf86bf71ba0 100644 (file)
@@ -1,3 +1,10 @@
+2019-12-12  Bob Duff  <duff@adacore.com>
+
+       * sem_attr.adb (Eval_Attribute): Never mark T'Descriptor_Size as
+       static, even if T is a static subtype, because otherwise we will
+       request the value of the attribute, which will crash because we
+       have not evaluated it.
+
 2019-12-12  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch5.adb (Expand_N_Assognment_Statement): Extend the
index 95de2e4fef4ee1855834994b690a5963b6c69570..0cd8e083899985807e71badf5ab1d248254ec27b 100644 (file)
@@ -7852,6 +7852,8 @@ package body Sem_Attr is
 
       --  is legal, since here this expression appears in a statically
       --  unevaluated position, so it does not actually raise an exception.
+      --
+      --  T'Descriptor_Size is never static, even if T is static.
 
       if Is_Scalar_Type (P_Entity)
         and then (not Is_Generic_Type (P_Entity))
@@ -7865,6 +7867,7 @@ package body Sem_Attr is
           (No (E2)
             or else (Is_Static_Expression (E2)
                       and then Is_Scalar_Type (Etype (E1))))
+        and then Id /= Attribute_Descriptor_Size
       then
          Static := True;
          Set_Is_Static_Expression (N, True);