aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/expr.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 959edbb..d52725c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2011-06-15 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/48613
diff --git a/gcc/expr.c b/gcc/expr.c
index c4bba28..9535c96 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -7265,7 +7265,7 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode,
/* 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)
@@ -8334,7 +8334,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
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