From: sayle Date: Mon, 24 May 2004 03:02:44 +0000 (+0000) Subject: * fold-const.c (non_lvalue): Explicitly list the tree codes that X-Git-Tag: upstream/4.9.2~71079 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f4d47aeb11c54dcd532e998132fdf22f75d31f01;p=platform%2Fupstream%2Flinaro-gcc.git * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82195 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + + * 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 * 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); }