From d2d56bbae32be728ff82191b6d328e3a8d7c1530 Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Wed, 14 Aug 2019 09:51:07 +0000 Subject: [PATCH] [Ada] Fix a recent ACATS regression (c552001) 2019-08-14 Javier Miranda gcc/ada/ * exp_aggr.adb (Is_CCG_Supported_Aggregate): Return False for arrays with bounds not known at compile time. From-SVN: r274450 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/exp_aggr.adb | 33 +++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e7bebe62554..72528d3f018 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2019-08-14 Javier Miranda + + * exp_aggr.adb (Is_CCG_Supported_Aggregate): Return False for + arrays with bounds not known at compile time. + 2019-08-14 Ed Schonberg * sem_util.adb (New_Copy_Tree, Visit_Entity): A quantified diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 8668188f8d8..174da6eb63e 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -7707,15 +7707,36 @@ package body Exp_Aggr is P := Parent (P); end loop; - -- Cases where aggregates are supported by the CCG backend + -- Check cases where aggregates are supported by the CCG backend if Nkind (P) = N_Object_Declaration then - return True; + declare + P_Typ : constant Entity_Id := Etype (Defining_Identifier (P)); - elsif Nkind (P) = N_Qualified_Expression - and then Nkind_In (Parent (P), N_Allocator, N_Object_Declaration) - then - return True; + begin + if Is_Record_Type (P_Typ) then + return True; + else + return Compile_Time_Known_Bounds (P_Typ); + end if; + end; + + elsif Nkind (P) = N_Qualified_Expression then + if Nkind (Parent (P)) = N_Object_Declaration then + declare + P_Typ : constant Entity_Id := + Etype (Defining_Identifier (Parent (P))); + begin + if Is_Record_Type (P_Typ) then + return True; + else + return Compile_Time_Known_Bounds (P_Typ); + end if; + end; + + elsif Nkind (Parent (P)) = N_Allocator then + return True; + end if; end if; return False; -- 2.30.2