From: Jakub Jelinek Date: Thu, 7 Apr 2011 18:22:50 +0000 (+0200) Subject: re PR tree-optimization/47391 (read from const volatile incorrectly eliminated) X-Git-Tag: releases/gcc-4.5.3~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fea577bd07eaa4cd4ee6d7bf4f7e80e9f2bf842;p=thirdparty%2Fgcc.git re PR tree-optimization/47391 (read from const volatile incorrectly eliminated) PR tree-optimization/47391 * tree-ssa-ccp.c (get_symbol_constant_value): Don't optimize if sym is volatile. Backport from mainline 2011-01-21 Jakub Jelinek PR tree-optimization/47391 * gcc.dg/pr47391.c: New test. From-SVN: r172112 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d04de4db30a2..0d6cf493cd8d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2011-04-07 Jakub Jelinek + PR tree-optimization/47391 + * tree-ssa-ccp.c (get_symbol_constant_value): Don't optimize + if sym is volatile. + Backported from mainline 2010-07-01 Richard Guenther diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e4d4f5cd3fc..b8f8cb752852 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-04-07 Jakub Jelinek + + Backport from mainline + 2011-01-21 Jakub Jelinek + + PR tree-optimization/47391 + * gcc.dg/pr47391.c: New test. + 2011-04-07 Andrey Belevantsev Backport from mainline diff --git a/gcc/testsuite/gcc.dg/pr47391.c b/gcc/testsuite/gcc.dg/pr47391.c new file mode 100644 index 000000000000..5ec98f10850c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr47391.c @@ -0,0 +1,22 @@ +/* PR tree-optimization/47391 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +const volatile int v = 1; +int i = 0; + +void +foo (void) +{ + i = v; +} + +int +main (void) +{ + foo (); + return 0; +} + +/* { dg-final { scan-tree-dump-not "i = 1;" "optimized" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index b570548d55aa..9f2c59b4f49d 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -277,7 +277,7 @@ tree get_symbol_constant_value (tree sym) { if (TREE_STATIC (sym) - && (TREE_READONLY (sym) + && ((TREE_READONLY (sym) && !TREE_THIS_VOLATILE (sym)) || TREE_CODE (sym) == CONST_DECL)) { tree val = DECL_INITIAL (sym);