exp_aggr.adb (Static_Array_Aggregate): When a static array aggregate with a range...
authorGary Dismukes <dismukes@adacore.com>
Fri, 22 Aug 2008 12:12:04 +0000 (14:12 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 22 Aug 2008 12:12:04 +0000 (14:12 +0200)
2008-08-22  Gary Dismukes  <dismukes@adacore.com>

* exp_aggr.adb (Static_Array_Aggregate): When a static array aggregate
with a range is transformed into a positional aggregate, any copied
component literals should be marked Is_Static_Expression.

* sem_eval.adb (Compile_Time_Known_Value): Don't treat null literals as
not being known at at compile time when Configurable_Run_Time_Mode is
true.

From-SVN: r139442

gcc/ada/exp_aggr.adb
gcc/ada/sem_eval.adb

index bc3b954..e8b1e73 100644 (file)
@@ -6442,6 +6442,12 @@ package body Exp_Aggr is
                   Append_To
                     (Expressions (Agg), New_Copy (Expression (Expr)));
                   Set_Etype (Last (Expressions (Agg)), Component_Type (Typ));
+
+                  --  Integer literals should always be marked as static
+
+                  if Nkind (Expression (Expr)) = N_Integer_Literal then
+                     Set_Is_Static_Expression (Last (Expressions (Agg)));
+                  end if;
                end loop;
 
                Set_Aggregate_Bounds (Agg, Bounds);
index d806791..3e90538 100644 (file)
@@ -998,14 +998,17 @@ package body Sem_Eval is
          return False;
       end if;
 
-      --  If this is not a static expression and we are in configurable run
-      --  time mode, then we consider it not known at compile time. This
-      --  avoids anomalies where whether something is permitted with a given
-      --  configurable run-time library depends on how good the compiler is
-      --  at optimizing and knowing that things are constant when they
-      --  are non-static.
-
-      if Configurable_Run_Time_Mode and then not Is_Static_Expression (Op) then
+      --  If this is not a static expression or a null literal, and we are in
+      --  configurable run-time mode, then we consider it not known at compile
+      --  time. This avoids anomalies where whether something is allowed with a
+      --  given configurable run-time library depends on how good the compiler
+      --  is at optimizing and knowing that things are constant when they are
+      --  nonstatic.
+
+      if Configurable_Run_Time_Mode
+        and then K /= N_Null
+        and then not Is_Static_Expression (Op)
+      then
          return False;
       end if;