diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-03-29 20:32:20 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-03-29 20:32:20 +0100 |
commit | 77527d8ac499e55ff609ce112e0c68ebd8836704 (patch) | |
tree | 8e23034ccb567298fa80d06f1ade4bea3437fb49 /gcc | |
parent | 7ad99f7d21983de63725701832e03d095842b3ae (diff) | |
download | gcc-77527d8ac499e55ff609ce112e0c68ebd8836704.zip gcc-77527d8ac499e55ff609ce112e0c68ebd8836704.tar.gz gcc-77527d8ac499e55ff609ce112e0c68ebd8836704.tar.bz2 |
re PR c/89872 (GCC does not generate read access to volatile compound literal)
PR c/89872
* gimplify.c (gimplify_compound_literal_expr): Don't optimize a
non-addressable complit into its initializer if it is volatile.
* gcc.dg/tree-ssa/pr89872.c: New test.
From-SVN: r270023
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr89872.c | 27 |
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15b2408..5639435 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-03-29 Jakub Jelinek <jakub@redhat.com> + + PR c/89872 + * gimplify.c (gimplify_compound_literal_expr): Don't optimize a + non-addressable complit into its initializer if it is volatile. + 2019-03-29 Roman Zhuykov <zhroma@ispras.ru> * opts-common.c (integral_argument): Set errno properly in one case. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index e264700..6ac1b71 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -4665,6 +4665,7 @@ gimplify_compound_literal_expr (tree *expr_p, gimple_seq *pre_p, otherwise we'd generate a new temporary, and we can as well just use the decl we already have. */ else if (!TREE_ADDRESSABLE (decl) + && !TREE_THIS_VOLATILE (decl) && init && (fallback & fb_lvalue) == 0 && gimple_test_f (init)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9d6743d..1398b23 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-03-29 Jakub Jelinek <jakub@redhat.com> + + PR c/89872 + * gcc.dg/tree-ssa/pr89872.c: New test. + 2019-03-29 Roman Zhuykov <zhroma@ispras.ru> * gcc.dg/diag-sanity.c: New test. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr89872.c b/gcc/testsuite/gcc.dg/tree-ssa/pr89872.c new file mode 100644 index 0000000..c081cd5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr89872.c @@ -0,0 +1,27 @@ +/* PR c/89872 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ +/* { dg-final { scan-tree-dump-times " ={v} 1;" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times " ={v} 2;" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times " ={v} 3;" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times " ={v} 4;" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times " ={v} 0;" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times " ={v} " 10 "optimized" } } */ + +void +foo (void) +{ + (volatile int){1} + (volatile int){2}; +} + +void +bar (void) +{ + (volatile int){3}; +} + +void +baz (void) +{ + (volatile int){4} / (volatile int){0}; +} |