diff options
author | Richard Stallman <rms@gnu.org> | 1992-05-13 05:02:10 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-05-13 05:02:10 +0000 |
commit | d8f6dbb9115d00af2eb319d4e65fbbc74dfc7d20 (patch) | |
tree | a70dad7407c57ef19c9062f8a0bfa1cf21538953 /gcc/fold-const.c | |
parent | 94a580761093abc1ff2d2930916ef01bae9b3bf1 (diff) | |
download | gcc-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.c | 8 |
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. */ |