diff options
author | Richard Henderson <rth@redhat.com> | 2004-10-19 10:24:46 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-10-19 10:24:46 -0700 |
commit | a8afd3ac1468d88711b8ca0496744c459811d27d (patch) | |
tree | f19d2e20ee8123aed347debb17ed4b5e94b0966a /gcc | |
parent | e61d7b781ecc1493975fdcf58ba28a34f4b5cc7d (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree.c | 15 |
2 files changed, 12 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d4e95c1..6bf70ad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-10-19 Richard Hendeson <rth@redhat.com> + + PR middle-end/17885 + * tree.c (recompute_tree_invarant_for_addr_expr): Always poll address + of INDIRECT_REF. + 2004-10-19 Kazu Hirata <kazu@cs.umass.edu> * tree-cfg.c (thread_jumps): Use a do-while loop instead of a @@ -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)) |