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

login
register
mail settings
Submitter Arnaud Charlet
Date Nov. 21, 2011, 1:24 p.m.
Message ID <20111121132419.GA32691@adacore.com>
Download mbox | patch
Permalink /patch/126776/
State New
Headers show

Comments

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

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);