From patchwork Tue Nov 28 15:57:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 170864 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce62:0:b0:403:3b70:6f57 with SMTP id o2csp4027311vqx; Tue, 28 Nov 2023 07:58:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IFzbrDh3wqBygv+re8s+iU9qDfbBqLYLb4byPgkIWihE4gkmhLtvpSns8OE9INGS3pAhrw7 X-Received: by 2002:ad4:40c5:0:b0:67a:2125:25f6 with SMTP id x5-20020ad440c5000000b0067a212525f6mr14934881qvp.41.1701187113858; Tue, 28 Nov 2023 07:58:33 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1701187113; cv=pass; d=google.com; s=arc-20160816; b=teTNmEm/QT9ZpTxahnlk0ytFAIMaAcS++kp0bK32cB2eg01xSWSI81z69g26zf71Vl rTZKjahV4MdXJ2dI1cJNuAOcaOvzU4ruIMzZXg0n3glMcBH04yL3NGH5vaVctYaHkVYb jyaak/QN6qBxhpKBIMIvQLVO0o2UkAxOtLmxjpPo+7uTkJN1gFz2jbqAlnDVSMy2WhOk v/n5V2Fjg8fLLJTnAtDI27LC9XJw3BbBE7koo37qmxcM12tWpOgSRbP/9caGjuMXFXK3 fgQcS2zIS0Nptnc4aUfM+y4oQ2/t9nXBcAUjnWyqNbtmXKCs8L/zVQbHQkvpGrjtQvEp qSTQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:message-id:mime-version:subject :to:from:date:arc-filter:dmarc-filter:delivered-to; bh=mN81Syu/oS70m5oAP8Pz/OwV2CCloT++DIjn7ZAV/JE=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=lUDx7Dm5fy80veyyf9VvTzr+0ebVQEPKAL5mtRQJPfWREOdxlp71FFUh1q2iurrn/J UkJkkD6hnlgIY7YhSu1lV76rzt0pTGKVFrGuWDVbO8RsFxRrpLPttAm6EryZF6Z0cPqH ZpcuHx3taKe8dW0I12DC9jH5nV4KTqfd++/B2J/SkquVV7mOG5f2WR/zCJ2rfXUqNPp6 hBUNXz7m3a32R04R0me5gyDqEByb+EupD2gEuUSTVwDTWX+XdsMt3lMTAbcYGjRXO2oD piZkDyBzn7UzEXXwTKMg1eMKKEj6sN+wJMdWiaj9dUmVRclz+PKMONXDOufEB1svYwcm GCLQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id gc7-20020a05622a59c700b0042393dc9d39si11173195qtb.102.2023.11.28.07.58.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 07:58:33 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 46CB03882644 for ; Tue, 28 Nov 2023 15:58:09 +0000 (GMT) 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:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id D573F3882049 for ; Tue, 28 Nov 2023 15:57:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D573F3882049 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D573F3882049 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701187036; cv=none; b=WfzgSK0LwFofQKLBmjzUiwUl6/DJOTDbmHrRy8Hy62xefs60jg82g9b9ssZ/I9hWauHBePTbRRl0Kbc2fU7lCf3135kpuBVtN8WFPPrPL4LohFr7n9CGxxChq56QZKzU6o7rXo6QuAmB0fRB+qMS4LL4REmj8m8gXQRlnxP6FRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701187036; c=relaxed/simple; bh=wyp819HXUWPhYIgXwIXmvk/FGbLAHJhu1PSQWn3GEYg=; h=Date:From:To:Subject:MIME-Version:Message-Id; b=RactthDHyViLxSR+UV+9H1ZSf0O+9Dlv+gKiYOsVR3GMe+Cz97UiKc5zeVKIM0M8QcdVzWivIrY2eOJlgWgnZkrfOo3tocMvPUUs69WCcRVO05Ss0V4fADVJQNeQkoWsL6XgnWEGBWKvgAikUjIY4bt5UickPhgRN+CfjR+qYRM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from imap2.dmz-prg2.suse.org (imap2.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:98]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id D8F4E1F853 for ; Tue, 28 Nov 2023 15:57:13 +0000 (UTC) Received: from imap2.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap2.dmz-prg2.suse.org (Postfix) with ESMTPS id BEC97133B5 for ; Tue, 28 Nov 2023 15:57:13 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap2.dmz-prg2.suse.org with ESMTPSA id 5dHpLNkNZmVNTwAAn2gu4w (envelope-from ) for ; Tue, 28 Nov 2023 15:57:13 +0000 Date: Tue, 28 Nov 2023 16:57:13 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] middle-end/112741 - ICE with gimple FE and later regimplification MIME-Version: 1.0 Message-Id: <20231128155713.BEC97133B5@imap2.dmz-prg2.suse.org> X-Spamd-Bar: ++++++++++ X-Spam-Score: 10.29 X-Rspamd-Server: rspamd1 Authentication-Results: smtp-out2.suse.de; dkim=none; spf=softfail (smtp-out2.suse.de: 2a07:de40:b281:104:10:150:64:98 is neither permitted nor denied by domain of rguenther@suse.de) smtp.mailfrom=rguenther@suse.de; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=suse.de (policy=none) X-Rspamd-Queue-Id: D8F4E1F853 X-Spamd-Result: default: False [10.29 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:98:from]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_SPAM_SHORT(3.00)[1.000]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[gcc-patches@gcc.gnu.org]; TO_DN_NONE(0.00)[]; R_SPF_SOFTFAIL(4.60)[~all:c]; RCPT_COUNT_ONE(0.00)[1]; RCVD_COUNT_THREE(0.00)[3]; MX_GOOD(-0.01)[]; NEURAL_SPAM_LONG(3.50)[1.000]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(2.20)[]; MIME_TRACE(0.00)[0:+]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-3.00)[100.00%]; DMARC_POLICY_SOFTFAIL(0.10)[suse.de : No valid SPF, No valid DKIM,none] X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, 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 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+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783823978896809685 X-GMAIL-MSGID: 1783823978896809685 The GIMPLE frontend, when bypassing gimplification, doesn't set DECL_SEEN_IN_BIND_EXPR_P given there are no such things in GIMPLE. But it probably should set the flag anyway to avoid later ICEs when regimplifying. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR middle-end/112741 gcc/c/ * gimple-parser.cc (c_parser_parse_gimple_body): Also set DECL_SEEN_IN_BIND_EXPR_Pfor locals. * gcc.dg/ubsan/pr112741.c: New testcase. --- gcc/c/gimple-parser.cc | 8 +++++++- gcc/testsuite/gcc.dg/ubsan/pr112741.c | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/ubsan/pr112741.c diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc index f43c0398655..72bff1cb305 100644 --- a/gcc/c/gimple-parser.cc +++ b/gcc/c/gimple-parser.cc @@ -280,7 +280,13 @@ c_parser_parse_gimple_body (c_parser *cparser, char *gimple_pass, for (tree var = BIND_EXPR_VARS (stmt); var; var = DECL_CHAIN (var)) if (VAR_P (var) && !DECL_EXTERNAL (var)) - add_local_decl (cfun, var); + { + add_local_decl (cfun, var); + /* When the middle-end re-gimplifies any expression we might + run into the assertion that we've seen the decl in a BIND. */ + if (!TREE_STATIC (var)) + DECL_SEEN_IN_BIND_EXPR_P (var) = 1; + } /* We have a CFG. Build the edges. */ for (unsigned i = 0; i < parser.edges.length (); ++i) { diff --git a/gcc/testsuite/gcc.dg/ubsan/pr112741.c b/gcc/testsuite/gcc.dg/ubsan/pr112741.c new file mode 100644 index 00000000000..13994f634a0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr112741.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple -fsanitize=undefined" } */ + +int __GIMPLE(ssa) foo(int j) +{ + int c[1][10][1]; + int _1; + +__BB(2): + c[0][1][0] = 1; + c[0][1] = _Literal (int[1]) {}; + _1 = c[0][j_2(D)][0]; + return _1; +} + +int main() +{ + if (foo (1) != 0) + __builtin_abort (); + return 0; +}