From: Steve Baird Date: Thu, 15 Feb 2024 22:49:18 +0000 (-0800) Subject: ada: Formal_Derived_Type'Size is not static X-Git-Tag: basepoints/gcc-16~9009 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=91c6302c8d641990f8977bf8eb5a40370da6efa9;p=thirdparty%2Fgcc.git ada: Formal_Derived_Type'Size is not static In deciding whether a Size attribute reference is static, the compiler could get confused about whether an implicitly-declared subtype of a generic formal type is itself a generic formal type, possibly resulting in an assertion failure and then a bugbox. gcc/ada/ * sem_attr.adb (Eval_Attribute): Expand existing checks for generic formal types for which Is_Generic_Type returns False. In that case, mark the attribute reference as nonstatic. --- diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 65442d45a85..2fa7d7d25d2 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -8685,10 +8685,20 @@ package body Sem_Attr is -- If the root type or base type is generic, then we cannot fold. This -- test is needed because subtypes of generic types are not always -- marked as being generic themselves (which seems odd???) + -- + -- Should this situation be addressed instead by either + -- a) setting Is_Generic_Type in more cases + -- or b) replacing preceding calls to Is_Generic_Type with calls to + -- Sem_Util.Some_New_Function + -- so that we wouldn't have to deal with these cases here ??? if Is_Generic_Type (P_Root_Type) or else Is_Generic_Type (P_Base_Type) + or else (Present (Associated_Node_For_Itype (P_Base_Type)) + and then Is_Generic_Type (Defining_Identifier + (Associated_Node_For_Itype (P_Base_Type)))) then + Set_Is_Static_Expression (N, False); return; end if;