aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-03-29 20:32:20 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2019-03-29 20:32:20 +0100
commit77527d8ac499e55ff609ce112e0c68ebd8836704 (patch)
tree8e23034ccb567298fa80d06f1ade4bea3437fb49 /gcc
parent7ad99f7d21983de63725701832e03d095842b3ae (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr89872.c27
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};
+}