From: Jakub Jelinek Date: Fri, 30 Aug 2019 12:33:40 +0000 (+0200) Subject: backport: re PR c/89872 (GCC does not generate read access to volatile compound literal) X-Git-Tag: releases/gcc-7.5.0~219 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da2620146d5d918106371eb92544367c575d50e2;p=thirdparty%2Fgcc.git backport: re PR c/89872 (GCC does not generate read access to volatile compound literal) Backported from mainline 2019-03-29 Jakub Jelinek 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3832f25eed7f..ad1c2881b53d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-29 Jakub Jelinek + + 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 PR middle-end/89621 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 8cc081e83117..0e92ffe4ea2c 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0a2b800f679f..0f6129a4ba23 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-29 Jakub Jelinek + + PR c/89872 + * gcc.dg/tree-ssa/pr89872.c: New test. + 2019-03-28 Jakub Jelinek 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 index 000000000000..c081cd5f9ec0 --- /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}; +}