From f3f7e335f02d71b8a08e7ff19d5b433d8534b7ad Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 19 Feb 2011 21:15:01 +0000 Subject: [PATCH] re PR tree-optimization/46620 (32-bit structures containing bitfields are not copied correctly on -O2 , x86 backend) PR tree-optimization/46620 * tree-sra.c (try_instantiate_multiple_fields): Don't get stuck at padding within accessed words. From-SVN: r170328 --- gcc/ChangeLog | 6 ++++++ gcc/tree-sra.c | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7743ae0d4935..76fd7eb5944c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-02-19 Alexandre Oliva + + PR tree-optimization/46620 + * tree-sra.c (try_instantiate_multiple_fields): Don't get stuck at + padding within accessed words. + 2011-02-18 John David Anglin * config.gcc (hppa[12]*-*-hpux11*): Set extra_parts. diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index b693ddd178dd..b0200cd1ffe8 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1661,13 +1661,13 @@ try_instantiate_multiple_fields (struct sra_elt *elt, tree f) || mbit + msize <= fbit) continue; - if (fbit <= mbit) + if (fbit < bit) { unsigned HOST_WIDE_INT diff = fbit + fsize - mbit; mbit += diff; msize -= diff; } - else if (fbit > mbit) + else if (fbit > bit) msize -= (mbit + msize - fbit); else gcc_unreachable (); -- 2.47.2