diff mbox

Fix bitfield reduction during expansion

Message ID alpine.LNX.2.00.1106151324470.810@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener June 15, 2011, 11:26 a.m. UTC
We handle integer types with bitfield precision but not other
integral types which the middle-end considers equivalent.  Noticed
while working on bitfield reference lowering where this causes
some miscompiles with boolean bitfields.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2011-06-15  Richard Guenther  <rguenther@suse.de>

	* expr.c (expand_expr_real_2): Reduce all integral types to
	bitfield precision.
	(expand_expr_real_1): Likewise.
diff mbox

Patch

Index: gcc/expr.c
===================================================================
--- gcc/expr.c	(revision 175011)
+++ gcc/expr.c	(working copy)
@@ -7264,7 +7264,7 @@  expand_expr_real_2 (sepops ops, rtx targ
   /* An operation in what may be a bit-field type needs the
      result to be reduced to the precision of the bit-field type,
      which is narrower than that of the type's mode.  */
-  reduce_bit_field = (TREE_CODE (type) == INTEGER_TYPE
+  reduce_bit_field = (INTEGRAL_TYPE_P (type)
 		      && GET_MODE_PRECISION (mode) > TYPE_PRECISION (type));
 
   if (reduce_bit_field && modifier == EXPAND_STACK_PARM)
@@ -8333,7 +8333,7 @@  expand_expr_real_1 (tree exp, rtx target
      result to be reduced to the precision of the bit-field type,
      which is narrower than that of the type's mode.  */
   reduce_bit_field = (!ignore
-		      && TREE_CODE (type) == INTEGER_TYPE
+		      && INTEGRAL_TYPE_P (type)
 		      && GET_MODE_PRECISION (mode) > TYPE_PRECISION (type));
 
   /* If we are going to ignore this result, we need only do something