aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-13 05:02:10 +0000
committerRichard Stallman <rms@gnu.org>1992-05-13 05:02:10 +0000
commitd8f6dbb9115d00af2eb319d4e65fbbc74dfc7d20 (patch)
treea70dad7407c57ef19c9062f8a0bfa1cf21538953 /gcc/fold-const.c
parent94a580761093abc1ff2d2930916ef01bae9b3bf1 (diff)
downloadgcc-d8f6dbb9115d00af2eb319d4e65fbbc74dfc7d20.zip
gcc-d8f6dbb9115d00af2eb319d4e65fbbc74dfc7d20.tar.gz
gcc-d8f6dbb9115d00af2eb319d4e65fbbc74dfc7d20.tar.bz2
*** empty log message ***
From-SVN: r968
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 75f5c18..029f25c 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -2748,9 +2748,13 @@ fold (expr)
return convert (TREE_TYPE (t), TREE_OPERAND (TREE_OPERAND (t, 0), 0));
if (TREE_CODE (TREE_OPERAND (t, 0)) == MODIFY_EXPR
- && TREE_CONSTANT (TREE_OPERAND (TREE_OPERAND (t, 0), 1)))
+ && TREE_CONSTANT (TREE_OPERAND (TREE_OPERAND (t, 0), 1))
+ /* Detect assigning a bitfield. */
+ && !(TREE_CODE (TREE_OPERAND (TREE_OPERAND (t, 0), 0)) == COMPONENT_REF
+ && DECL_BIT_FIELD (TREE_OPERAND (TREE_OPERAND (TREE_OPERAND (t, 0), 0), 1))))
{
- /* Don't leave an assignment inside a conversion. */
+ /* Don't leave an assignment inside a conversion
+ unless assiging a bitfield. */
tree prev = TREE_OPERAND (t, 0);
TREE_OPERAND (t, 0) = TREE_OPERAND (prev, 1);
/* First do the assignment, then return converted constant. */