From patchwork Sat Dec 7 20:28:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Martin X-Patchwork-Id: 2019669 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nasilyan.com header.i=@nasilyan.com header.a=rsa-sha256 header.s=tey23rxsjton5kop5bydp3vc5ylkyjkg header.b=ZeE8vmXs; dkim=pass (1024-bit key; unprotected) header.d=amazonses.com header.i=@amazonses.com header.a=rsa-sha256 header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=XXrzQDA5; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Y5KV43N5bz1yRL for ; Sun, 8 Dec 2024 07:29:12 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 42468385842A for ; Sat, 7 Dec 2024 20:29:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 42468385842A Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=nasilyan.com header.i=@nasilyan.com header.a=rsa-sha256 header.s=tey23rxsjton5kop5bydp3vc5ylkyjkg header.b=ZeE8vmXs; dkim=pass (1024-bit key, unprotected) header.d=amazonses.com header.i=@amazonses.com header.a=rsa-sha256 header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=XXrzQDA5 X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from a7-17.smtp-out.eu-west-1.amazonses.com (a7-17.smtp-out.eu-west-1.amazonses.com [54.240.7.17]) by sourceware.org (Postfix) with ESMTPS id C1E73385840C for ; Sat, 7 Dec 2024 20:28:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C1E73385840C Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=nasilyan.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eu-west-1.amazonses.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C1E73385840C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=54.240.7.17 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733603315; cv=none; b=TMarcNvpl+L/kcx5hEsyHA0dkHP1DfQWaF1NXc1zI18t6srKIusrcNSb8KChzKaG/mH88ar3I43piLf6K6xoDp/X4pT0Nk7gNhUFQ49h4uEOAyB72Rch8OgKJ14BpSNa3PxEyMf42cqvAWHUl06T1WQlFfKnc7NZx+3nRzg6Gs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733603315; c=relaxed/simple; bh=LWJ2D8a3wmB5/3Ve/Og2BOUB59thFXWSXGlRz3l4ic0=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=IjHPBgCwdbejIQBAcKTGolw/33n8cK6dofVVKEKvgSvWxjADm1COQGBUo9BlQsMOL5YmYfffEn3YAkWfzF4Cmwt28kvTjguejSa5M62ygD9ZLwQAtTLUkEV1RbP1hav21ScFi0GJdq1bVwLq/hfXh+hbcZJ6kHSolok+NxfPCW8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C1E73385840C DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=tey23rxsjton5kop5bydp3vc5ylkyjkg; d=nasilyan.com; t=1733603313; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Transfer-Encoding; bh=LWJ2D8a3wmB5/3Ve/Og2BOUB59thFXWSXGlRz3l4ic0=; b=ZeE8vmXsrbZu1zzlkwYOLMs7bMBL4lcY3O7flJQ/urqrSIif0oX++gkKI25YW0w/ 4CRURyI7eu/nPVxBFviGzMgu90KilFRx7HnK8N3AIA6d/TAZmFSrsNOm28/fUxPjjnF ydd+ModM0ijDJcfwMkhgLEtoxfDPxnOtJFAJ+PYg= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=uku4taia5b5tsbglxyj6zym32efj7xqv; d=amazonses.com; t=1733603313; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Transfer-Encoding:Feedback-ID; bh=LWJ2D8a3wmB5/3Ve/Og2BOUB59thFXWSXGlRz3l4ic0=; b=XXrzQDA56XvNyhds8rmlp33z0bLHnniWv+/zYMSa+nRfNhLsffV4E9JTDFeihxk/ OIxReptzmoA18Vi8xwEke3H2k9YiswvrgzRNmn64nvXUaoodNvA3oGWYU6h4QOXLzZw McZqVpcdO3E120w6+q8JxRm6QTVulAO3TVG/Czic= From: Simon Martin To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, jakub@redhat.com Subject: [PATCH] tree-eh: Don't crash on GIMPLE_TRY_FINALLY with empty cleanup sequence [PR117845] Date: Sat, 7 Dec 2024 20:28:33 +0000 Message-ID: <01020193a2cf46a4-2383fe98-a968-46ae-aed3-6f407ddc8e29-000000@eu-west-1.amazonses.com> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Feedback-ID: ::1.eu-west-1.sMDMtMBSIJpOhM8kCarpRYeKFuDfm/WoE5+9WtFxb8w=:AmazonSES X-SES-Outgoing: 2024.12.07-54.240.7.17 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org The following valid code triggers an ICE with -fsanitize=address === cut here === void l() { auto const ints = {0,1,2,3,4,5}; for (auto i : { 3 } ) { __builtin_printf("%d ", i); } } === cut here === The problem is that honor_protect_cleanup_actions does not expect the cleanup sequence of a GIMPLE_TRY_FINALLY to be empty. It is however the case here since r14-8681-gceb242f5302027, because lower_stmt removes the only statement in the sequence: a ASAN_MARK statement for the array that backs the initializer_list). This patch simply checks that the finally block is not 0 before accessing it in honor_protect_cleanup_actions. Successfully tested on x86_64-pc-linux-gnu. OK for trunk and gcc-14? PR c++/117845 gcc/ChangeLog: * tree-eh.cc (honor_protect_cleanup_actions): Support empty finally sequences. gcc/testsuite/ChangeLog: * g++.dg/asan/pr117845-2.C: New test. * g++.dg/asan/pr117845.C: New test. --- gcc/testsuite/g++.dg/asan/pr117845-2.C | 12 ++++++++++++ gcc/testsuite/g++.dg/asan/pr117845.C | 12 ++++++++++++ gcc/tree-eh.cc | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/asan/pr117845-2.C create mode 100644 gcc/testsuite/g++.dg/asan/pr117845.C diff --git a/gcc/testsuite/g++.dg/asan/pr117845-2.C b/gcc/testsuite/g++.dg/asan/pr117845-2.C new file mode 100644 index 00000000000..c0556397009 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr117845-2.C @@ -0,0 +1,12 @@ +// PR c++/117845 - Actually valid variant +// { dg-do "compile" } +// { dg-options "-fsanitize=address" } + +#include + +void l() { + auto const ints = {0,1,2,3,4,5}; + for (auto i : { 3 } ) { + __builtin_printf("%d ", i); + } +} diff --git a/gcc/testsuite/g++.dg/asan/pr117845.C b/gcc/testsuite/g++.dg/asan/pr117845.C new file mode 100644 index 00000000000..d90d351e270 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr117845.C @@ -0,0 +1,12 @@ +// PR c++/117845 - Initially reported case. +// { dg-do "compile" } +// { dg-options "-fsanitize=address" } + +#include + +void l() { + auto const ints = {0,1,2,3,4,5}; + for (int i : ints | h) { // { dg-error "was not declared" } + __builtin_printf("%d ", i); + } +} diff --git a/gcc/tree-eh.cc b/gcc/tree-eh.cc index 769785fad2b..dc920de9b38 100644 --- a/gcc/tree-eh.cc +++ b/gcc/tree-eh.cc @@ -1026,7 +1026,8 @@ honor_protect_cleanup_actions (struct leh_state *outer_state, MUST_NOT_THROW filter. */ gimple_stmt_iterator gsi = gsi_start (finally); gimple *x = gsi_stmt (gsi); - if (gimple_code (x) == GIMPLE_TRY + if (x + && gimple_code (x) == GIMPLE_TRY && gimple_try_kind (x) == GIMPLE_TRY_CATCH && gimple_try_catch_is_cleanup (x)) {