From patchwork Sat Jan 20 18:37:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Uecker X-Patchwork-Id: 1888795 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=heOHlAIc; 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 4THQGP01ftz1yWl for ; Sun, 21 Jan 2024 05:38:03 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EE12F3858427 for ; Sat, 20 Jan 2024 18:37:59 +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 BECFB3858D39 for ; Sat, 20 Jan 2024 18:37:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BECFB3858D39 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 BECFB3858D39 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=1705775863; cv=none; b=Au7h+HkIwrSDJJRnt/BjgCiZENOYor0UVxCzJWSPkHfLPJbhzkczYlhJKDzvnNWzVKJCZuCHUt9VXPMDSCz7EgvzhRhV8QSVdt1mlQWdAd78XB7Sup8ld9wyfxCF31N1KoP0a1Xw/e3d3qteiMoiTgzj2T5waOk/R5P25R5r5Fo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705775863; c=relaxed/simple; bh=uTlQ4qC6RaBPhm3G+U7dkpmSkx4qeeaLSy+WZlUepj4=; h=DKIM-Signature:Message-ID:Subject:From:To:Date:MIME-Version; b=tD0UFmG/T3dKmd6OSXlJCeUA2XUVPj6CkjskU22JKO51FdJ/GKbrBp8hFDnJXA4PGlEb7mxQ9B+CiNl2MmtzCgeeHPShlP9YNHYNkBBLTkGaZAOP7a7AyjziI06t/+2ye0hhCJVPxEhtJhkNH5MNdq80Xi875+PXVq+bwCWgjYY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from vra-174-249.tugraz.at (vra-174-249.tugraz.at [129.27.174.249]) by mailrelay.tugraz.at (Postfix) with ESMTPSA id 4THQFk1Qpbz3wD1; Sat, 20 Jan 2024 19:37:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tugraz.at; s=mailrelay; t=1705775850; bh=0Etswa9YXrDU24d1CEljxkWDofTTE8f3J5xoVy9aODI=; h=Subject:From:To:Cc:Date; b=heOHlAIcFUFs6AqvXOlE/G9q0jhKdX09hB6hT2a6q1W/BRDnvk772xz8da5uwCxUC KyDP4A3GZ31uIJQGX6BRMQCfGtH/bZM9RDXiWSgTQaQEWAPtt1/Va+Yr+p1rXPguJJ cZtjiAe2Cj1V4X8PoBdISWW1G6NFLt10UvQct1TM= Message-ID: <75930f8a30c3de6c45988fb0f8762ef07cad23a9.camel@tugraz.at> Subject: [C PATCH] Fix ICE for composite type for structs with unsigned bitfields [PR113492] From: Martin Uecker To: gcc-patches@gcc.gnu.org Cc: Joseph Myers Date: Sat, 20 Jan 2024 19:37:29 +0100 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.117 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, 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+incoming=patchwork.ozlabs.org@gcc.gnu.org C23: Fix ICE for composite type for structs with unsigned bitfields [PR113492] This patch fixes a bug when forming a composite type from structs that contain an unsigned bitfield declared with int while using -funsigned-bitfields. In such structs the unsigned integer type was not compatible to the regular unsigned integer type used elsewhere in the C FE. PR c/113492 gcc/c: * c-decl.cc (grokdeclarator): Use c_common_unsigned_type instead of unsigned_type_for to create the unsigned type for bitfields declared with int when using -funsigned-bitfields. gcc/testsuite: * gcc.dg/pr113492.c: New test. diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 4029bbc59fe..8d18a3e11f4 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -6947,7 +6947,7 @@ grokdeclarator (const struct c_declarator *declarator, "signed". */ if (bitfield && !flag_signed_bitfields && !declspecs->explicit_signed_p && TREE_CODE (type) == INTEGER_TYPE) - type = unsigned_type_for (type); + type = c_common_unsigned_type (type); /* Figure out the type qualifiers for the declaration. There are two ways a declaration can become qualified. One is something diff --git a/gcc/testsuite/gcc.dg/pr113492.c b/gcc/testsuite/gcc.dg/pr113492.c new file mode 100644 index 00000000000..56296c51072 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr113492.c @@ -0,0 +1,43 @@ +/* PR 113492 + * { dg-do compile } + * { dg-options "-std=c23 -funsigned-bitfields" } */ + +struct foo { + int i : 3; +} i; + +void test() +{ + struct foo { + unsigned i : 3; + } u; + + 1 ? i : u; + 1 ? u : i; +} + +struct bar { + unsigned i : 3; +} u; + +void test2() +{ + struct bar { + int i : 3; + } i; + + 1 ? i : u; + 1 ? u : i; +} + +void test3() +{ + typedef int myint; + struct bar { + myint i : 3; + } i; + + 1 ? i : u; + 1 ? u : i; +} +