diff options
author | Richard Guenther <rguenther@suse.de> | 2010-11-03 11:05:39 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-11-03 11:05:39 +0000 |
commit | 02ff830b5812b80a0bdd747cb0bb85e0ee0253b6 (patch) | |
tree | 3a710f09f8952506b559b229473ed352a0fefa49 /gcc/tree-ssa.c | |
parent | 2e681adf5db47a5230dd6159c202f89383f98eff (diff) | |
download | gcc-02ff830b5812b80a0bdd747cb0bb85e0ee0253b6.zip gcc-02ff830b5812b80a0bdd747cb0bb85e0ee0253b6.tar.gz gcc-02ff830b5812b80a0bdd747cb0bb85e0ee0253b6.tar.bz2 |
re PR tree-optimization/46217 (store to volatile is removed)
2010-11-03 Richard Guenther <rguenther@suse.de>
PR tree-optimization/46217
* tree-ssa.c (non_rewritable_mem_ref_base): Check if volatile
flag matches.
(execute_update_addresses_taken): Likewise.
* gcc.dg/pr46217.c: New testcase.
From-SVN: r166239
Diffstat (limited to 'gcc/tree-ssa.c')
-rw-r--r-- | gcc/tree-ssa.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 60abc6b..ca51c66 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1877,7 +1877,8 @@ non_rewritable_mem_ref_base (tree ref) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (base, 1)) || (DECL_SIZE (decl) - != TYPE_SIZE (TREE_TYPE (base))))) + != TYPE_SIZE (TREE_TYPE (base))) + || TREE_THIS_VOLATILE (decl) != TREE_THIS_VOLATILE (base))) return decl; } @@ -1993,7 +1994,9 @@ execute_update_addresses_taken (void) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (lhs, 1)) || (DECL_SIZE (decl) - != TYPE_SIZE (TREE_TYPE (orig_lhs))))) + != TYPE_SIZE (TREE_TYPE (orig_lhs))) + || (TREE_THIS_VOLATILE (lhs) + != TREE_THIS_VOLATILE (decl)))) bitmap_set_bit (not_reg_needs, DECL_UID (decl)); } } @@ -2040,7 +2043,9 @@ execute_update_addresses_taken (void) if (DECL_P (decl) && (!integer_zerop (TREE_OPERAND (lhs, 1)) || (TYPE_MAIN_VARIANT (TREE_TYPE (decl)) - != TYPE_MAIN_VARIANT (TREE_TYPE (orig_lhs))))) + != TYPE_MAIN_VARIANT (TREE_TYPE (orig_lhs))) + || (TREE_THIS_VOLATILE (lhs) + != TREE_THIS_VOLATILE (decl)))) bitmap_set_bit (not_reg_needs, DECL_UID (decl)); } } |