From 725c2d321c429ef8f09b8474e0f3d693c6a5d1d8 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 10 Mar 2008 18:20:23 +0000 Subject: [PATCH] re PR tree-optimization/35494 (Revision 132991 breaks C++ static member) gcc/ 2008-03-10 H.J. Lu PR tree-optimization/35494 * tree-ssa-ccp.c (get_symbol_constant_value): Check if value may be overriden at link and run time. gcc/testsuite/ 2008-03-10 H.J. Lu PR tree-optimization/35494 * g++.dg/tree-ssa/ssa-store-ccp-1.C: New. * gcc.dg/tree-ssa/ssa-store-ccp-2.c: Likewise. * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Likewise. * gcc.dg/tree-ssa/ssa-store-ccp-4.c: Likewise. From-SVN: r133082 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 21 +++++++------------ .../g++.dg/tree-ssa/ssa-store-ccp-1.C | 19 +++++++++++++++++ .../gcc.dg/tree-ssa/ssa-store-ccp-2.c | 14 +++++++++++++ .../gcc.dg/tree-ssa/ssa-store-ccp-3.c | 14 +++++++++++++ .../gcc.dg/tree-ssa/ssa-store-ccp-4.c | 15 +++++++++++++ gcc/tree-ssa-ccp.c | 5 ++++- 7 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/g++.dg/tree-ssa/ssa-store-ccp-1.C create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 21ec0bdf3b8..9d3ba56ca53 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-03-10 H.J. Lu + + PR tree-optimization/35494 + * tree-ssa-ccp.c (get_symbol_constant_value): Check if value + may be overriden at link and run time. + 2008-03-10 Richard Guenther PR tree-optimization/34677 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 98466dc9677..693a2a1a7be 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,19 +1,14 @@ +2008-03-10 H.J. Lu + + PR tree-optimization/35494 + * g++.dg/tree-ssa/ssa-store-ccp-1.C: New. + * gcc.dg/tree-ssa/ssa-store-ccp-2.c: Likewise. + * gcc.dg/tree-ssa/ssa-store-ccp-3.c: Likewise. + * gcc.dg/tree-ssa/ssa-store-ccp-4.c: Likewise. + 2008-03-10 Richard Guenther PR tree-optimization/34677 - * tree-ssa-pre.c (modify_expr_node_pool): Remove. - (poolify_tree): Likewise. - (modify_expr_template): Likewise. - (poolify_modify_stmt): Likewise. - (insert_fake_stores): Handle all component-ref style stores - in addition to INDIRECT_REF. Also handle complex types. - Do not poolify the inserted load. - (realify_fake_stores): Do not rebuild the tree but only - make it a SSA_NAME copy. - (init_pre): Remove initialzation of modify_expr_template. - Do not allocate modify_expr_node_pool. - (fini_pre): Do not free modify_expr_node_pool. - * gcc.dg/tree-ssa/loadpre23.c: New testcase. * gcc.dg/tree-ssa/loadpre24.c: Likewise. * gcc.dg/tree-ssa/loadpre25.c: Likewise. diff --git a/gcc/testsuite/g++.dg/tree-ssa/ssa-store-ccp-1.C b/gcc/testsuite/g++.dg/tree-ssa/ssa-store-ccp-1.C new file mode 100644 index 00000000000..06e9b1e35f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/ssa-store-ccp-1.C @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +class bar +{ +public: + static const int conststaticvariable; +}; + + +int f(void) +{ + return bar::conststaticvariable; +} + +/* There should be a reference to conststaticvariable since it may + be overriden at link time. */ +/* { dg-final { scan-tree-dump-times "conststaticvariable" 1 "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c new file mode 100644 index 00000000000..be37a21d415 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-2.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +const int conststaticvariable; + +int f(void) +{ + return conststaticvariable; +} + +/* There should be a reference to conststaticvariable since it may + may be overriden at link time. */ +/* { dg-final { scan-tree-dump-times "conststaticvariable" 1 "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c new file mode 100644 index 00000000000..2f028a283ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-3.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-common -fdump-tree-optimized" } */ + +const int conststaticvariable; + +int f(void) +{ + return conststaticvariable; +} + +/* There should be no reference to conststaticvariable as we should have + inlined the 0. */ +/* { dg-final { scan-tree-dump-times "conststaticvariable" 0 "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c new file mode 100644 index 00000000000..cbf8bab3a62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-store-ccp-4.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-O2 -fno-common -fpic -fdump-tree-optimized" } */ + +const int conststaticvariable; + +int f(void) +{ + return conststaticvariable; +} + +/* There should be a reference to conststaticvariable since it may + may be overriden at run time. */ +/* { dg-final { scan-tree-dump-times "conststaticvariable" 1 "optimized"} } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index b9211a5df9c..7cefbf83893 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -300,7 +300,10 @@ get_symbol_constant_value (tree sym) { if (TREE_STATIC (sym) && TREE_READONLY (sym) - && !MTAG_P (sym)) + && !MTAG_P (sym) + /* Check if a read-only definition may be overridden at + link and run time. */ + && targetm.binds_local_p (sym)) { tree val = DECL_INITIAL (sym); if (val -- 2.30.2