summaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-11 11:11:36 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-07-11 11:11:36 +0000
commitaec30911047d37b9d9c06caa5db277134863982d (patch)
tree1944207e0dcb55583dec29eca431076b6c360928 /gcc/expr.c
parent2a3a44da29f06293d66ca44969e046c48dd702c1 (diff)
downloadgcc-aec30911047d37b9d9c06caa5db277134863982d.tar.gz
* expr.c (store_expr): Don't fiddle subreg promotion for types
with precision smaller than the mode. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84501 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 6806f1f7d25..f9c65485bd2 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4144,7 +4144,10 @@ store_expr (tree exp, rtx target, int want_value)
more than just converting modes. */
if ((want_value & 1) == 0
&& INTEGRAL_TYPE_P (TREE_TYPE (exp))
- && TREE_TYPE (TREE_TYPE (exp)) == 0)
+ && TREE_TYPE (TREE_TYPE (exp)) == 0
+ && (!lang_hooks.reduce_bit_field_operations
+ || (GET_MODE_PRECISION (GET_MODE (target))
+ == TYPE_PRECISION (TREE_TYPE (exp)))))
{
if (TYPE_UNSIGNED (TREE_TYPE (exp))
!= SUBREG_PROMOTED_UNSIGNED_P (target))