From patchwork Wed Apr 12 06:49:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 82279 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp114569vqo; Tue, 11 Apr 2023 23:50:09 -0700 (PDT) X-Google-Smtp-Source: AKy350ZM/Bf8+bfU/GRcdLGnJM53pGo+4nukJndBpWl8UTakm+Oj5HQJnH88O0bHtCF9SCNWxhIF X-Received: by 2002:aa7:c04f:0:b0:504:99eb:34ad with SMTP id k15-20020aa7c04f000000b0050499eb34admr4465873edo.24.1681282208924; Tue, 11 Apr 2023 23:50:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681282208; cv=none; d=google.com; s=arc-20160816; b=xFpxTEeviEh9sjLoie8YP/1N6b19CKO+X/YZVgYghHvOxSxOPF0ii17p3tFBInXOZQ vrx2lR3nbQ4tSeVuxhxkQ3bt4Go1UHmhuT7q5bSB2jMvyuLl14qTNj1Ca6B9JxIJCxPT Lw2b9x0ySAE998ni3pYHzwIhDymhXpfq468/Cy5adIhEkE2Gh4JKvIPFL/FCv0mU3tUB DfxzYadrHFlR1Ix4OWYlIhqMMLuC62fNZPQGVuvlM00kF9jZtluRvc11CCuDQy2//hFX F8hWC1WdbO0gSQ0VAMzOQcsRswf/2wRWaal+vaduV2+F+RGlpxEiMh/n5v+RDfUFchSY aivA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:sender:errors-to:reply-to:from:list-subscribe:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mime-version:user-agent:subject:to:date:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=1KMDa7HYrLMZM8W7L28vhhrVo3V+rBuopkqed80mG7M=; b=S6mavRnY81rnPOfhWinWA3JbbYhmcTVijo1rQd6DzCO69RiUnIcxrei/ACkxat+6QP TH/kpPZ2uc4bwonOqcoSEMNZA0VoMEtXhbBX13A+Nigqmdl8z7VYO/fIfXRzdD1ISfbt hscwzCgxwqkhIfo1F8GC8Decs9Gr4t3eKTTKve4LkD1VLYtMpUc+3q1ExS3Nd/4mkXws gdS4CGghiFgDTQHF/DFC37SFZHz3/e/eny+Uom+AhCN2VVuTr4QSnGLNyVtSqOJ1LpQ9 JZXnkEBMwnsmmk2EgEQLH8/k42+flU69LTarUcghHuTpQCH/hnEC+O7e+27JDLVKH4a0 doAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=Wv7zOsOc; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c7-20020aa7c987000000b005049298481csi958874edt.406.2023.04.11.23.50.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Apr 2023 23:50:08 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=Wv7zOsOc; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 231153856940 for ; Wed, 12 Apr 2023 06:49:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 231153856940 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681282186; bh=1KMDa7HYrLMZM8W7L28vhhrVo3V+rBuopkqed80mG7M=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Wv7zOsOcuFLDjyzSEgPO3ZbCNDGcDDKT/1jeOJocj0Ham4vQ/B6nzBKlLE9tkoaDl ZVNzwuhey4/j3tnzxDosbcDMDEXgB5wi+pHkeu30rlTcgNmABJAl2tU6sSxnzhpLjJ JoD1wUBlYvLVDovn0Z0NW86jIsBP2RF0zwOSL3II= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id 85394385840D for ; Wed, 12 Apr 2023 06:49:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 85394385840D Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id A1FC11F6E6 for ; Wed, 12 Apr 2023 06:49:01 +0000 (UTC) Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id 981622C143 for ; Wed, 12 Apr 2023 06:49:01 +0000 (UTC) Date: Wed, 12 Apr 2023 06:49:01 +0000 (UTC) To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/109434 - bogus DSE of throwing call LHS User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MISSING_MID, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Richard Biener via Gcc-patches From: Richard Biener Reply-To: Richard Biener Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" Message-Id: <20230412064946.231153856940@sourceware.org> X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1762952173729748690?= X-GMAIL-MSGID: =?utf-8?q?1762952173729748690?= The byte tracking of call LHS didn't properly handle possibly throwing calls correctly which cases bogus DSE and in turn, for the testcase a bogus uninit diagnostic and (unreliable) wrong-code. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/109434 * tree-ssa-dse.cc (initialize_ao_ref_for_dse): Properly handle possibly throwing calls when processing the LHS and may-defs are not OK. * g++.dg/opt/pr109434.C: New testcase. --- gcc/testsuite/g++.dg/opt/pr109434.C | 28 ++++++++++++++++++++++++++++ gcc/tree-ssa-dse.cc | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/opt/pr109434.C diff --git a/gcc/testsuite/g++.dg/opt/pr109434.C b/gcc/testsuite/g++.dg/opt/pr109434.C new file mode 100644 index 00000000000..cffa327fd9b --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr109434.C @@ -0,0 +1,28 @@ +// { dg-do compile } +// { dg-require-effective-target c++17 } +// { dg-options "-O2 -Wall" } + +#include +#include + +std::optional foo() +{ + volatile int x = 1; + if (x) + throw std::runtime_error("haha"); + return 42; +} + +int main() +{ + std::optional optInt; + try { + // We falsely DSEd the LHS of the call even though foo throws + // which results in an uninitialized diagnostic + optInt = foo(); + } catch (...) { + return optInt.has_value(); + } + std::optional optDbl{optInt}; + return optDbl ? optDbl.value () : 2.0; +} diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc index 4f8a44fbba0..eabe8ba4522 100644 --- a/gcc/tree-ssa-dse.cc +++ b/gcc/tree-ssa-dse.cc @@ -179,7 +179,8 @@ initialize_ao_ref_for_dse (gimple *stmt, ao_ref *write, bool may_def_ok = false) } if (tree lhs = gimple_get_lhs (stmt)) { - if (TREE_CODE (lhs) != SSA_NAME) + if (TREE_CODE (lhs) != SSA_NAME + && (may_def_ok || !stmt_could_throw_p (cfun, stmt))) { ao_ref_init (write, lhs); return true;