]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/47391 (read from const volatile incorrectly eliminated)
authorJakub Jelinek <jakub@redhat.com>
Thu, 7 Apr 2011 18:22:50 +0000 (20:22 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 7 Apr 2011 18:22:50 +0000 (20:22 +0200)
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  <jakub@redhat.com>

PR tree-optimization/47391
* gcc.dg/pr47391.c: New test.

From-SVN: r172112

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

index d04de4db30a2fe945a1c67c0555ae902ee953cb0..0d6cf493cd8d4616e162592b2b37524880b3a431 100644 (file)
@@ -1,5 +1,9 @@
 2011-04-07  Jakub Jelinek  <jakub@redhat.com>
 
+       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  <rguenther@suse.de>
 
index 7e4d4f5cd3fcf8ea3789029c98c9b012ab785d71..b8f8cb752852904b4a56efbd17b8351875a4a350 100644 (file)
@@ -1,3 +1,11 @@
+2011-04-07  Jakub Jelinek  <jakub@redhat.com>
+
+       Backport from mainline
+       2011-01-21  Jakub Jelinek  <jakub@redhat.com>
+       PR tree-optimization/47391
+       * gcc.dg/pr47391.c: New test.
+
 2011-04-07  Andrey Belevantsev  <abel@ispras.ru>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.dg/pr47391.c b/gcc/testsuite/gcc.dg/pr47391.c
new file mode 100644 (file)
index 0000000..5ec98f1
--- /dev/null
@@ -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" } } */
index b570548d55aab628abfa1d6bd872a76db72f8670..9f2c59b4f49de6f8d71499661c565b253e0c364e 100644 (file)
@@ -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);