From 5d3983bca523f337333cf6f749d6489014264572 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Thu, 12 Dec 2019 10:02:27 +0000 Subject: [PATCH] [Ada] Crash on Descriptor_Size attribute 2019-12-12 Bob Duff 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 | 7 +++++++ gcc/ada/sem_attr.adb | 3 +++ 2 files changed, 10 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a4dc13890e0..4ad9092bd3a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2019-12-12 Bob Duff + + * 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 * exp_ch5.adb (Expand_N_Assognment_Statement): Extend the diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 95de2e4fef4..0cd8e083899 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -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); -- 2.30.2