[Ada] Fix a recent ACATS regression (c552001)
authorJavier Miranda <miranda@adacore.com>
Wed, 14 Aug 2019 09:51:07 +0000 (09:51 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Aug 2019 09:51:07 +0000 (09:51 +0000)
2019-08-14  Javier Miranda  <miranda@adacore.com>

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
gcc/ada/exp_aggr.adb

index e7bebe6..72528d3 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-14  Javier Miranda  <miranda@adacore.com>
+
+       * exp_aggr.adb (Is_CCG_Supported_Aggregate): Return False for
+       arrays with bounds not known at compile time.
+
 2019-08-14  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_util.adb (New_Copy_Tree, Visit_Entity): A quantified
index 8668188..174da6e 100644 (file)
@@ -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;