From patchwork Tue Apr 2 18:54:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Uecker X-Patchwork-Id: 1918936 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=tugraz.at header.i=@tugraz.at header.a=rsa-sha256 header.s=mailrelay header.b=h8Dnr9gs; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; 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 [8.43.85.97]) (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 4V8HBh173Wz1yYw for ; Wed, 3 Apr 2024 05:55:22 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4BF7B385842B for ; Tue, 2 Apr 2024 18:55:20 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mailrelay.tugraz.at (mailrelay.tugraz.at [129.27.2.202]) by sourceware.org (Postfix) with ESMTPS id D98E33858D28 for ; Tue, 2 Apr 2024 18:54:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D98E33858D28 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=tugraz.at Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tugraz.at ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D98E33858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=129.27.2.202 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712084101; cv=none; b=JODZgBWQ+K/DtQoNp6sVmyey5+DhUYDtpKuMc4FFHfEThZljBNz61p2Ngxbu6Rj31nEZGuwZYHBVu0/OqdcDexoDOnflHWrucYkrPu4L/lg6Fq2uu/jN7jNcW2O6MRmJoM7UvibgKzD3gmsuse7gaq4WpJ+7w7IQHAhx6AQxMFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712084101; c=relaxed/simple; bh=K/KboiSDLKcSR1r0rNRX7rBhPEGF3jNCYVM4E77hruk=; h=DKIM-Signature:Message-ID:Subject:From:To:Date:MIME-Version; b=NaqKQ+/4IrC8R6SGCTesrShAcgPKXlrv2Q/uI0PVnBrs9RQpbSf7mJWrnF36/9vGm9ufWMyySG/sCBshc+x8PqtZK/fE+E43c79oOwOn+Gz2sAYCEzKjsTFWEfLIiw09nkLlSWv55QLYpjdOUBF+mEfqcrc0TeCh3XJIFm2/pVU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from vra-169-244.tugraz.at (vra-169-244.tugraz.at [129.27.169.244]) by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4V8HB725Z5z3xCn; Tue, 2 Apr 2024 20:54:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at; s=mailrelay; t=1712084095; bh=je21BIw/lNDqe+tmFbBMeCvpPXK0wg3cVIBiBhPFwXg=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=h8Dnr9gsgaO0d76prXOz2qv7/bC4+s6VJGcIf/iAiDbXGd1P1G3AuQi7vqf9ht7am 1uiI0IAvntLuZlw4Uix+vAJlpACRPHSthDqHUrxLr8ACbf/yCXM8hcbqxHRkVqyxPA TlMo30RQNZTG2NT2UZCt/Ag+imjytedjw6iQT93M= Message-ID: Subject: [C PATCH] Fix ICE with -g and -std=c23 related to incomplete types [PR114361] From: Martin Uecker To: gcc-patches@gcc.gnu.org Cc: Joseph Myers Date: Tue, 02 Apr 2024 20:54:54 +0200 In-Reply-To: <02a9b94e4d653b6f1b9f89a1b62187f46e871738.camel@tugraz.at> References: <02a9b94e4d653b6f1b9f89a1b62187f46e871738.camel@tugraz.at> User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 X-TUG-Backscatter-control: G/VXY7/6zeyuAY/PU2/0qw X-Spam-Scanner: SpamAssassin 3.003001 X-Spam-Score-relay: -1.9 X-Scanned-By: MIMEDefang 2.74 on 129.27.10.116 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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.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 I did not copy TYPE_CANONICAL to incomplete variants when they are completed. Bootstrapped and regession tested on x86_64 Fix ICE with -g and -std=c23 related to incomplete types [PR114361] We did not copy TYPE_CANONICAL to the incomplete variants when completing a structure. PR c/114361 gcc/c/ * c-decl.c (finish_struct): Set TYPE_CANONICAL when completing strucute types. gcc/testsuite/ * gcc.dg/pr114361.c: New test. * gcc.dg/c23-tag-incomplete-1.c: New test. * gcc.dg/c23-tag-incomplete-2.c: New test. --- gcc/c/c-decl.cc | 1 + gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c | 14 ++++++++++++++ gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/pr114361.c | 11 +++++++++++ 4 files changed, 39 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c create mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c create mode 100644 gcc/testsuite/gcc.dg/pr114361.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index c747abe9f4e..f2083b9d96f 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9722,6 +9722,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); C_TYPE_VARIABLY_MODIFIED (x) = C_TYPE_VARIABLY_MODIFIED (t); C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE; + TYPE_CANONICAL (x) = TYPE_CANONICAL (t); } /* Update type location to the one of the definition, instead of e.g. diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c new file mode 100644 index 00000000000..82d652569e9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } + * { dg-options "-std=c23 -g" } */ + +struct a; +typedef struct a b; + +void g() { + struct a { b* x; }; +} + +struct a { b* x; }; + + + diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c new file mode 100644 index 00000000000..bc47a04ece5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } + * { dg-options "-std=c23 -g" } */ + +struct a; +typedef struct a b; + +void f() { + extern struct a { b* x; } t; +} + +extern struct a { b* x; } t; + + diff --git a/gcc/testsuite/gcc.dg/pr114361.c b/gcc/testsuite/gcc.dg/pr114361.c new file mode 100644 index 00000000000..0f3feb53566 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114361.c @@ -0,0 +1,11 @@ +/* PR c/114361 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu23 -g" } */ + +void f() +{ + typedef struct foo bar; + typedef __typeof( ({ (struct foo { bar *x; }){ }; }) ) wuz; + struct foo { wuz *x; }; +} +