From a9b39de805384725f09b3b80c928bdf8aeca8d1f Mon Sep 17 00:00:00 2001 From: rguenth Date: Wed, 13 Jan 2010 13:31:13 +0000 Subject: 2010-01-13 Richard Guenther PR middle-end/42716 * fold-const.c (fold_unary_loc): Fold INDIRECT_REFs. * gcc.c-torture/compile/pr42716.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155859 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fold-const.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gcc/fold-const.c') diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e1126219689..9e40296123c 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -8942,6 +8942,19 @@ fold_unary_loc (location_t loc, enum tree_code code, tree type, tree op0) } return NULL_TREE; + case INDIRECT_REF: + /* Fold *&X to X if X is an lvalue. */ + if (TREE_CODE (op0) == ADDR_EXPR) + { + tree op00 = TREE_OPERAND (op0, 0); + if ((TREE_CODE (op00) == VAR_DECL + || TREE_CODE (op00) == PARM_DECL + || TREE_CODE (op00) == RESULT_DECL) + && !TREE_READONLY (op00)) + return op00; + } + return NULL_TREE; + default: return NULL_TREE; } /* switch (code) */ -- cgit v1.2.1