From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by sourceware.org (Postfix) with ESMTPS id B36333851A96 for ; Tue, 6 Sep 2022 07:15:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B36333851A96 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-wm1-x332.google.com with SMTP id k17so6363718wmr.2 for ; Tue, 06 Sep 2022 00:15:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date; bh=g9BolQ8ONk3ovL8OfEfbQU84cERoUo+fkiA5dFHu1Bo=; b=CHaL/dQ+Zlkq+YMH+aXDL1R0UT8H45goPN7pOOiVkpF+9BvuZS2/eKQg13hRQ+JAtc 6KLPiEWYVXHLi9GsiUjvwYm0HJw5w8QUBjgO8MPtANG1crr62aBGVywTBcSrgkrpgg1g u99Vrd9lPLkgjTw0oQjznA8JraIPU7bOcQpsDSqoI4j0rHLvtoxrgoUf8r+9rrgyCJMF JFacBcjvsmHunBSEZlZTzK6tbeVmRjqK0rTVOatR8ThG8NkCkwtMuP5qwB2LDi7Tj2yC zs/Z2XHGbNbpHVnp9xaFPX4qu0huFMKaNTtvXTgOpPxg8mHVi+VVOK2dUQyXw7p4FI5n XgVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date; bh=g9BolQ8ONk3ovL8OfEfbQU84cERoUo+fkiA5dFHu1Bo=; b=heCi+eWhWHzBG6jrkaqEh2uqUyZN3aezJRlUvyVEcxypz9weoGQchWKu/FCymBIQhX 8Cy2TKR79CYCoyuiQktrBH3wyGEVE9GjF4psHMvc5Lkx4Nape/WdKmieSs3meJbYhrrn V8SdBuFHb1gJQJ1mNdouTw1wkjkfeCDmDrgUtAKbqxDsht0+iZwfK2RiBPx65EAZgv6w SiCGYCWg1y+s+5T79NYcxE1r0BnwSyvAXrDsA/kbnLEt+b78okDwRWgTxfdStq0stYsV ks0ftmtEXmpMXzDEz3mhYLyrEz9w0d29VB0Iea9rN2htzJn1SODeBtd3OT+LwEsF/jOJ 4dhw== X-Gm-Message-State: ACgBeo1UqX0XmxUF5lX2hc3j9JRwiTUCGqIhZpBJYyqWLi7Ml7bnG0US jJ8aOURebtiJ4LL/HYQ2dkpNXkbT/mIuiw== X-Google-Smtp-Source: AA6agR69rTYmV60vxbDao59haVJqg3LlsqqUoid4OpjiKQYx0GTqQJ1TNQb8ceOUX+Oto6P0GprvMA== X-Received: by 2002:a05:600c:4f48:b0:3a5:e707:bb8c with SMTP id m8-20020a05600c4f4800b003a5e707bb8cmr12971821wmq.198.1662448549434; Tue, 06 Sep 2022 00:15:49 -0700 (PDT) Received: from poulhies-Precision-5550 (static-176-191-105-132.ftth.abo.bbox.fr. [176.191.105.132]) by smtp.gmail.com with ESMTPSA id r7-20020a05600c35c700b003a5b6086381sm21760805wmq.48.2022.09.06.00.15.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Sep 2022 00:15:48 -0700 (PDT) Date: Tue, 6 Sep 2022 09:15:48 +0200 From: Marc =?iso-8859-1?Q?Poulhi=E8s?= To: gcc-patches@gcc.gnu.org Cc: Bob Duff Subject: [Ada] Place "at end" on body nodes Message-ID: <20220906071548.GA1280329@poulhies-Precision-5550> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="YiEDa0DAkWCtVeE4" Content-Disposition: inline X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --YiEDa0DAkWCtVeE4 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline This patch fixes a bug where finalization code might refer to variables outside their lifetime. The previous version moved declarations into the Handled_Statement_Sequence (HSS), so that the "at end" handler of the HSS could handle exceptions raised by those declarations. The First_Real_Statement field was used to find the first statement after the moved declarations. In addition, if the HSS already had exception handlers, it was wrapped in another layer of block_statement. This doesn't work if there are variable-sized objects allocated on the (primary) stack, because the stack will be popped before the "at end" is invoked. In the new version, we allow "at end" on nodes such as N_Subprogram_Body, in addition to HSS. We modify gigi so that such an "at end" applies to the whole body (declarations and HSS) by extending support for At_End_Proc mechanism to N_Block_Statement and N_*_Body nodes. This also removes the support for First_Real_Statement. In particular, an exception raised by the declarations will trigger the "at end". We no longer move declarations into the HSS, we no longer have a First_Real_Statement field, and we no longer do the wrapping mentioned above. This change requires various other changes, in cases where we depended on the First_Real_Statement and the moving/wrapping mentioned above. Tested on x86_64-pc-linux-gnu, committed on trunk gcc/ada/ * gen_il-fields.ads (First_Real_Statement): Remove this field. * gen_il-gen-gen_nodes.adb: Remove the First_Real_Statement field. Add the At_End_Proc field to nodes that have both Declarations and HSS. * sinfo.ads (At_End_Proc): Document new semantics. (First_Real_Statement): Remove comment. * exp_ch11.adb (Expand_N_Handled_Sequence_Of_Statements): Remove First_Real_Statement. * exp_ch7.adb (Build_Cleanup_Statements): Remove "Historical note"; it doesn't seem useful, and we have revision history. (Create_Finalizer): Insert the finalizer later, typically in the statement list, in some cases. (Build_Finalizer_Call): Attach the "at end" handler to the parent of the HSS node in most cases, so it applies to declarations. (Expand_Cleanup_Actions): Remove Wrap_HSS_In_Block and the call to it. Remove the code that moves declarations. Remove some redundant code. * exp_ch9.adb (Build_Protected_Entry): Copy the At_End_Proc. (Build_Protected_Subprogram_Body): Reverse the sense of Exc_Safe, to avoid double negatives. Remove "Historical note" as in exp_ch7.adb. (Build_Unprotected_Subprogram_Body): Copy the At_End_Proc from the protected version. (Expand_N_Conditional_Entry_Call): Use First (Statements(...)) instead of First_Real_Statement(...). (Expand_N_Task_Body): Put the Abort_Undefer call at the beginning of the declarations, rather than in the HSS. Use First (Statements(...)) instead of First_Real_Statement(...). Copy the At_End_Proc. * inline.adb (Has_Initialized_Type): Return False if the declaration does not come from source. * libgnarl/s-tpoben.ads (Lock_Entries, Lock_Entries_With_Status): Document when these things raise Program_Error. It's not clear that Lock_Entries_With_Status ought to be raising exceptions, but at least it's documented now. * sem.ads: Minor comment fixes. * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use First (Statements(...)) instead of First_Real_Statement(...). (Analyze_Null_Procedure): Minor comment fix. * sem_util.adb (Might_Raise): Return True for N_Raise_Expression. Adjust the part about exceptions generated by the back end to match the reality of what the back end generates. (Update_First_Real_Statement): Remove. * sem_util.ads: Remove First_Real_Statement from comment. * sinfo-utils.ads (First_Real_Statement): New function that always returns Empty. This should be removed once gnat-llvm and codepeer have been updated to not refer to First_Real_Statement. * sprint.adb (Sprint_At_End_Proc): Deal with printing At_End_Proc. * sem_prag.adb: Minor comment fixes. * gcc-interface/trans.cc (At_End_Proc_to_gnu): New function. (Subprogram_Body_to_gnu): Call it to handle an At_End_Proc. (Handled_Sequence_Of_Statements_to_gnu): Likewise. Remove the support for First_Real_Statement and clean up the rest. (Exception_Handler_to_gnu): Do not push binding levels. (Compilation_Unit_to_gnu): Adjust call to process_decls. (gnat_to_gnu) : Likewise. : Likewise. : Likewise. : Likewise and call At_End_Proc_to_gnu to handle an At_End_Proc. : Likewise. (process_decls): Remove GNAT_END_LIST parameter and adjust recursive calls. Co-authored-by: Eric Botcazou --YiEDa0DAkWCtVeE4 Content-Type: application/gzip Content-Disposition: attachment; filename="patch.diff.gz" Content-Transfer-Encoding: base64 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 b5bonj//P7y8m8jW5QAA --YiEDa0DAkWCtVeE4--