From: Gary Dismukes Date: Wed, 8 Jan 2025 22:51:41 +0000 (+0000) Subject: ada: Unbounded recursion on character aggregates with predicated component subtype X-Git-Tag: basepoints/gcc-16~2699 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6989fbbf2f195e874245409635a856d74bf6945;p=thirdparty%2Fgcc.git ada: Unbounded recursion on character aggregates with predicated component subtype The compiler was recursing endlessly when analyzing an aggregate of an array type whose component subtype has a static predicate and the component expressions are static, repeatedly transforming the aggregate first into a string literal and then back into an aggregate. This is fixed by suppressing the transformation to a string literal in the case where the component subtype has predicates. gcc/ada/ChangeLog: * sem_aggr.adb (Resolve_Aggregate): Add another condition to prevent rewriting an aggregate whose type is an array of characters, testing for the presence of predicates on the component type. --- diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 095093cc76b..f6db5cb97a4 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -1382,11 +1382,11 @@ package body Sem_Aggr is -- Do not perform this transformation if this was a string literal -- to start with, whose components needed constraint checks, or if - -- the component type is non-static, because it will require those - -- checks and be transformed back into an aggregate. If the index - -- type is not Integer the aggregate may represent a user-defined - -- string type but the context might need the original type so we - -- do not perform the transformation at this point. + -- the component type is nonstatic or has predicates, because it will + -- require those checks and be transformed back into an aggregate. + -- If the index type is not Integer, then the aggregate may represent + -- a user-defined string type but the context might need the original + -- type, so we do not perform the transformation at this point. if Number_Dimensions (Typ) = 1 and then Is_Standard_Character_Type (Component_Type (Typ)) @@ -1396,6 +1396,7 @@ package body Sem_Aggr is and then not Is_Bit_Packed_Array (Typ) and then Nkind (Original_Node (Parent (N))) /= N_String_Literal and then Is_OK_Static_Subtype (Component_Type (Typ)) + and then not Has_Predicates (Component_Type (Typ)) and then Base_Type (Etype (First_Index (Typ))) = Base_Type (Standard_Integer) and then not Has_Static_Empty_Array_Bounds (Typ)