aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-10-19 10:24:46 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-10-19 10:24:46 -0700
commita8afd3ac1468d88711b8ca0496744c459811d27d (patch)
treef19d2e20ee8123aed347debb17ed4b5e94b0966a /gcc/tree.c
parente61d7b781ecc1493975fdcf58ba28a34f4b5cc7d (diff)
downloadgcc-a8afd3ac1468d88711b8ca0496744c459811d27d.zip
gcc-a8afd3ac1468d88711b8ca0496744c459811d27d.tar.gz
gcc-a8afd3ac1468d88711b8ca0496744c459811d27d.tar.bz2
re PR middle-end/17885 (gimplifing of volatile &a->)
PR middle-end/17885 * tree.c (recompute_tree_invarant_for_addr_expr): Always poll address of INDIRECT_REF. From-SVN: r89280
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 26b5f1b..e07bd47 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2311,16 +2311,13 @@ do { tree _node = (NODE); \
}
/* Now see what's inside. If it's an INDIRECT_REF, copy our properties from
- it. If it's a decl, it's invariant and constant if the decl is static.
- It's also invariant if it's a decl in the current function. (Taking the
- address of a volatile variable is not volatile.) If it's a constant,
- the address is both invariant and constant. Otherwise it's neither. */
+ the address, since &(*a)->b is a form of addition. If it's a decl, it's
+ invariant and constant if the decl is static. It's also invariant if it's
+ a decl in the current function. Taking the address of a volatile variable
+ is not volatile. If it's a constant, the address is both invariant and
+ constant. Otherwise it's neither. */
if (TREE_CODE (node) == INDIRECT_REF)
- {
- /* If this is &((T*)0)->field, then this is a form of addition. */
- if (TREE_CODE (TREE_OPERAND (node, 0)) != INTEGER_CST)
- UPDATE_TITCSE (node);
- }
+ UPDATE_TITCSE (TREE_OPERAND (node, 0));
else if (DECL_P (node))
{
if (staticp (node))