[Ada] In Alfa mode, do not force evaluation of expressions for checks

Submitted by Arnaud Charlet on Nov. 21, 2011, 1:24 p.m.

Details

Message ID 20111121132419.GA32691@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet Nov. 21, 2011, 1:24 p.m.
In Alfa mode, checks are not generated by the frontend, hence there is no need
to force the evaluation of expressions for checks. This avoids inserting
useless actions in expressions.

Tested on x86_64-pc-linux-gnu, committed on trunk

2011-11-21  Yannick Moy  <moy@adacore.com>

	* sem_ch3.adb (Constrain_Index, Process_Range_Expr_In_Decl):
	Use Full_Expander_Active instead of Expander_Active to control
	the forced evaluation of expressions for the sake of generating
	checks.

Patch hide | download patch | download mbox

Index: sem_ch3.adb
===================================================================
--- sem_ch3.adb	(revision 181572)
+++ sem_ch3.adb	(working copy)
@@ -11786,7 +11786,7 @@ 
          --  needed, since checks may cause duplication of the expressions
          --  which must not be reevaluated.
 
-         if Expander_Active then
+         if Full_Expander_Active then
             Force_Evaluation (Low_Bound (R));
             Force_Evaluation (High_Bound (R));
          end if;
@@ -18326,7 +18326,7 @@ 
             --  if needed, before applying checks, since checks may cause
             --  duplication of the expression without forcing evaluation.
 
-            if Expander_Active then
+            if Full_Expander_Active then
                Force_Evaluation (Lo);
                Force_Evaluation (Hi);
             end if;
@@ -18436,7 +18436,7 @@ 
 
       --  Case of other than an explicit N_Range node
 
-      elsif Expander_Active then
+      elsif Full_Expander_Active then
          Get_Index_Bounds (R, Lo, Hi);
          Force_Evaluation (Lo);
          Force_Evaluation (Hi);