diff options
author | Roger Sayle <roger@eyesopen.com> | 2004-05-24 03:02:44 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2004-05-24 03:02:44 +0000 |
commit | 8d4a2ff6c65aeb24104ad5daee443fa89a5d6652 (patch) | |
tree | 3fa78a3f02322b1c8e4ece468c0e107283801ce8 | |
parent | 15077df5dcd5c9fd996f31cd56ed12a677a2b771 (diff) | |
download | gcc-8d4a2ff6c65aeb24104ad5daee443fa89a5d6652.zip gcc-8d4a2ff6c65aeb24104ad5daee443fa89a5d6652.tar.gz gcc-8d4a2ff6c65aeb24104ad5daee443fa89a5d6652.tar.bz2 |
fold-const.c (non_lvalue): Explicitly list the tree codes that need to be wrapped by NON_LVALUE_EXPR...
* fold-const.c (non_lvalue): Explicitly list the tree codes that
need to be wrapped by NON_LVALUE_EXPR, instead of those that don't.
From-SVN: r82195
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fold-const.c | 48 |
2 files changed, 46 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b970d15..df40b59 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-05-23 Roger Sayle <roger@eyesopen.com> + + * fold-const.c (non_lvalue): Explicitly list the tree codes that + need to be wrapped by NON_LVALUE_EXPR, instead of those that don't. + 2004-05-23 Joseph S. Myers <jsm@polyomino.org.uk> * doc/gcc.texi, doc/gccint.texi, doc/include/gcc-common.texi: diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ba683ad..3fa46ca 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1993,14 +1993,48 @@ fold_convert (tree type, tree arg) tree non_lvalue (tree x) { - /* These things are certainly not lvalues. */ - if (TREE_CODE (x) == NON_LVALUE_EXPR - || TREE_CODE (x) == INTEGER_CST - || TREE_CODE (x) == REAL_CST - || TREE_CODE (x) == STRING_CST - || TREE_CODE (x) == ADDR_EXPR) + /* We only need to wrap lvalue tree codes. */ + switch (TREE_CODE (x)) + { + case VAR_DECL: + case PARM_DECL: + case RESULT_DECL: + case LABEL_DECL: + case FUNCTION_DECL: + case SSA_NAME: + + case COMPONENT_REF: + case INDIRECT_REF: + case ARRAY_REF: + case BIT_FIELD_REF: + case BUFFER_REF: + case ARRAY_RANGE_REF: + case VTABLE_REF: + + case REALPART_EXPR: + case IMAGPART_EXPR: + case PREINCREMENT_EXPR: + case PREDECREMENT_EXPR: + case SAVE_EXPR: + case UNSAVE_EXPR: + case TRY_CATCH_EXPR: + case WITH_CLEANUP_EXPR: + case COMPOUND_EXPR: + case MODIFY_EXPR: + case TARGET_EXPR: + case COND_EXPR: + case BIND_EXPR: + case MIN_EXPR: + case MAX_EXPR: + case RTL_EXPR: + break; + + default: + /* Assume the worst for front-end tree codes. */ + if ((int)TREE_CODE (x) >= NUM_TREE_CODES) + break; return x; - + } return build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x); } |