From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1914) id 476E93858C50; Mon, 16 May 2022 08:45:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 476E93858C50 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Pierre-Marie de Rodat To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-501] [Ada] Fix expansion of attribute Loop_Entry wrt value propagation X-Act-Checkin: gcc X-Git-Author: Piotr Trojanek X-Git-Refname: refs/heads/master X-Git-Oldrev: 20652c7f22b86d3cd646ecc2227a670f81302509 X-Git-Newrev: 7e0c853c6f6a2987ac7616cbfdd52bb41d598bd5 Message-Id: <20220516084509.476E93858C50@sourceware.org> Date: Mon, 16 May 2022 08:45:09 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 May 2022 08:45:09 -0000 https://gcc.gnu.org/g:7e0c853c6f6a2987ac7616cbfdd52bb41d598bd5 commit r13-501-g7e0c853c6f6a2987ac7616cbfdd52bb41d598bd5 Author: Piotr Trojanek Date: Wed Mar 16 13:36:40 2022 +0100 [Ada] Fix expansion of attribute Loop_Entry wrt value propagation When expanding attribute Loop_Entry we create constant object declarations and put them just before the loop. The current values of variables at the point of Loop_Entry attribute must not be used when analysing the initialization expressions of these constants, because they might be different from the values at the loop entry itself. gcc/ada/ * exp_attr.adb (Expand_Loop_Entry_Attribute): Disable value propagation when analysing the constant that holds the Loop_Entry prefix value. Diff: --- gcc/ada/exp_attr.adb | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index e6d3e74971f..daab82fe11a 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -26,6 +26,7 @@ with Aspects; use Aspects; with Atree; use Atree; with Checks; use Checks; +with Debug; use Debug; with Einfo; use Einfo; with Einfo.Entities; use Einfo.Entities; with Einfo.Utils; use Einfo.Utils; @@ -1792,23 +1793,30 @@ package body Exp_Attr is Push_Scope (Scope (Loop_Id)); end if; - -- The analysis of the conditional block takes care of the constant - -- declaration. + -- Analyze constant declaration with simple value propagation disabled, + -- because the values at the loop entry might be different than the + -- values at the occurrence of Loop_Entry attribute. - if Present (Result) then - Rewrite (Loop_Stmt, Result); - Analyze (Loop_Stmt); - - -- The conditional block was analyzed when a previous 'Loop_Entry was - -- expanded. There is no point in reanalyzing the block, simply analyze - -- the declaration of the constant. + declare + Save_Debug_Flag_MM : constant Boolean := Debug_Flag_MM; + begin + Debug_Flag_MM := True; - else if Present (Aux_Decl) then Analyze (Aux_Decl); end if; Analyze (Temp_Decl); + + Debug_Flag_MM := Save_Debug_Flag_MM; + end; + + -- If the conditional block has just been created, then analyze it; + -- otherwise it was analyzed when a previous 'Loop_Entry was expanded. + + if Present (Result) then + Rewrite (Loop_Stmt, Result); + Analyze (Loop_Stmt); end if; Rewrite (N, New_Occurrence_Of (Temp_Id, Loc));