]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c/89872 (GCC does not generate read access to volatile compound literal)
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 12:33:40 +0000 (14:33 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 12:33:40 +0000 (14:33 +0200)
Backported from mainline
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.

* gcc.dg/tree-ssa/pr89872.c: New test.

From-SVN: r275144

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr89872.c [new file with mode: 0644]

index 3832f25eed7f20bc85296d9c1792f8cfd7394dd3..ad1c2881b53d5702cb707a6b20fddd0ddcf35637 100644 (file)
@@ -1,6 +1,12 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       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-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/89621
index 8cc081e83117a83a21296740a1605246357b0e96..0e92ffe4ea2cbb31a3b9d9a388b8f1dda179da66 100644 (file)
@@ -4498,6 +4498,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))
index 0a2b800f679f0cc580c30512dd2770a22dd484df..0f6129a4ba2349f1b377c4d09c7675f6944178e1 100644 (file)
@@ -1,6 +1,11 @@
 2019-08-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-03-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/89872
+       * gcc.dg/tree-ssa/pr89872.c: New test.
+
        2019-03-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/89621
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr89872.c b/gcc/testsuite/gcc.dg/tree-ssa/pr89872.c
new file mode 100644 (file)
index 0000000..c081cd5
--- /dev/null
@@ -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};
+}