[Bug middle-end/51994] [4.6/4.7 Regression] git-1.7.8.3 miscompiled due to negative bitpos from get_inner_reference
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jan 25 20:25:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51994
--- Comment #14 from Uros Bizjak <ubizjak at gmail dot com> 2012-01-25 19:44:03 UTC ---
(In reply to comment #13)
> Perhpaps the return of get_inner_reference can be adjusted to return equivalent
> negative offset expression instead of negative bit position?
Like this:
Index: expr.c
===================================================================
--- expr.c (revision 183524)
+++ expr.c (working copy)
@@ -6300,6 +6300,22 @@ get_inner_reference (tree exp, HOST_WIDE_INT *pbit
*poffset = offset;
}
+ /* Negative bit positions are not allowed. */
+ if (*pbitpos < 0)
+ {
+ tree cst = build_int_cst (NULL_TREE, *pbitpos / BITS_PER_UNIT);
+
+ if (*poffset)
+ *poffset = fold_convert (sizetype,
+ fold_build2 (PLUS_EXPR,
+ sizetype,
+ *poffset, cst));
+ else
+ *poffset = cst;
+
+ *pbitpos = 0;
+ }
+
/* We can use BLKmode for a byte-aligned BLKmode bitfield. */
if (mode == VOIDmode
&& blkmode_bitfield
More information about the Gcc-bugs
mailing list