From patchwork Wed Aug 5 11:34:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 140647 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9CD9C4BAE7E4 for ; Wed, 5 Aug 2026 11:34:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9CD9C4BAE7E4 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lMSSwUwV; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=BcDbKH/P; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=v7f1u4oV; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=eROxd8tr X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by sourceware.org (Postfix) with ESMTPS id C15354BAE7E4 for ; Wed, 5 Aug 2026 11:34:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C15354BAE7E4 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 C15354BAE7E4 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=195.135.223.130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785929653; cv=none; b=PYLj6qack8bBt9RzkEQhDNCeNH1A7358u5yhKrsxVnig/rtFpmVqw8j9uQZ8FE3zjiGuGuslwKWpsgk4D8NvZ+b4AE9ROZEwXo4+1xcGbz6rnw/dZPR903vYzyM5rLipaR64aOopN/Zi1BKBz1jUP46MaFIU0Wjl4704lBUIDa0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785929653; c=relaxed/simple; bh=5x+Z/MERSDBbP1aK41ByOIv6m/g5VZqb0YCbcTKJnm8=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:Message-ID:MIME-Version; b=qGqMTFUAXP1d7KX9Gq/jThstOA4D6811VekqJo4V4urLtEelPh4QtQhokc8gg7Ws2FCnQJyRo0KSXM6BOIXa/HUYOF9ON/L1WzzvRica8MPOGY0qwWMm+9K7eGSmDUibHKfrDcpgai8yhnD/PNiylw4GReFTaVdavyiYx3duzOs= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=lMSSwUwV; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=BcDbKH/P; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=v7f1u4oV; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=eROxd8tr DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C15354BAE7E4 Received: from murzim.nue2.suse.org (unknown [10.168.4.243]) (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-out1.suse.de (Postfix) with ESMTPS id 61F697FD9D for ; Wed, 5 Aug 2026 11:34:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1785929648; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=2jn0ck0UWS1r79YFqnHV1+E5SDaMeDeRlQs9xz6TAiA=; b=lMSSwUwVm0uXmy2VVfSZmDjR8o1KFqvbXEOZvd0RXrIk8gqqk2sDd8XizHIYIw/6G9V6eD Ud+96MzZggCJWXe55PfjV/dAMiDiqEKlh7y7qLvWV6kGWHw8Xz/UrJG0xyZCRN7aKHNs1N dqfNkbWENX+nS1CpIKfuQI1yt1/duYU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1785929648; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=2jn0ck0UWS1r79YFqnHV1+E5SDaMeDeRlQs9xz6TAiA=; b=BcDbKH/PXQGaLEuAfGk1t6DMdESr3g4cEn6uFYlVqB6sRZ9fl+iSk42F0OKfD/b17yD6aQ 7pT5RYPSsYtOgPBQ== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1785929644; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=2jn0ck0UWS1r79YFqnHV1+E5SDaMeDeRlQs9xz6TAiA=; b=v7f1u4oVGFn8dKrW+AVf6YzvCW3EEHig0dk/L8/XVvwpzJc4CVAtEFPcBPRV/zGCMh7sJQ hgp7TSvXUFKZ1lfAnqX7J0FZJr6ebiTgLZiv21+ZB//PVN55d4iUpzM7e4ZK+0ivfM9PML ByXR46Qg8mXX1ST2W4to22SpzYwH9K0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1785929644; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=2jn0ck0UWS1r79YFqnHV1+E5SDaMeDeRlQs9xz6TAiA=; b=eROxd8tr4fR2ewM299SXmBQWWoHd/scLSUf8K8EPaU9ePg3aWyvE0D0QlNkqJPly4A8g/t q2SiwLk9mOPwDWCg== Date: Wed, 5 Aug 2026 13:34:03 +0200 (CEST) From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] tree-optimization/126650 - get_inner_reference_aff and bitfields Message-ID: <79r2s4rn-n813-69s3-8466-0qnp22o4386r@fhfr.qr> MIME-Version: 1.0 X-Spamd-Result: default: False [-4.30 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MISSING_XM_UA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_ZERO(0.00)[0]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_NONE(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[murzim.nue2.suse.org:helo, fhfr.qr:mid, tree-affine.cc:url] X-Spam-Score: -4.30 X-Spam-Level: X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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~patchwork=sourceware.org@gcc.gnu.org get_inner_reference_aff tries to compensate for bit precision offsets and sizes by rounding down and up, but fails to do this correctly. The following makes it more obviously correct by rounding positions and computing the rounded size based on those. Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed. PR tree-optimization/126650 * tree-affine.cc (get_inner_reference_aff): Fixup rounding of size. * gcc.dg/torture/pr126650.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr126650.c | 35 +++++++++++++++++++++++++ gcc/tree-affine.cc | 5 ++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr126650.c diff --git a/gcc/testsuite/gcc.dg/torture/pr126650.c b/gcc/testsuite/gcc.dg/torture/pr126650.c new file mode 100644 index 00000000000..166705d9cfe --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr126650.c @@ -0,0 +1,35 @@ +/* { dg-do run } */ + +#include +#include + +long a; + +void __attribute__((noipa)) foo (int n, ...) +{ + va_list list; + va_start (list, n); + int val = va_arg (list, int); + if (val != -64) + abort (); + va_end (list); +} + +int main() +{ + struct b { + int : 7; + int : 2; + int : 6; + int : 3; + int c : 7; + }; + union { + int d; + struct b bf; + char e[4]; + } f; + f.d = a; + f.e[3] = 7; + foo (1, f.bf.c); +} diff --git a/gcc/tree-affine.cc b/gcc/tree-affine.cc index b5b7249c675..181fd6fb33c 100644 --- a/gcc/tree-affine.cc +++ b/gcc/tree-affine.cc @@ -1030,10 +1030,11 @@ get_inner_reference_aff (tree ref, aff_tree *addr, poly_widest_int *size) aff_combination_add (addr, &tmp); } - aff_combination_const (&tmp, sizetype, bits_to_bytes_round_down (bitpos)); + poly_int64 bytepos = bits_to_bytes_round_down (bitpos); + aff_combination_const (&tmp, sizetype, bytepos); aff_combination_add (addr, &tmp); - *size = bits_to_bytes_round_up (bitsize); + *size = bits_to_bytes_round_up (bitpos + bitsize) - bytepos; return base; }