From dc874b53e5529e2a76d610500345e1f469366346 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 26 Jan 2009 09:52:48 +0000 Subject: [PATCH] re PR middle-end/38851 (Compiler warns about uninitialized variable that is an object with a constructor) 2009-01-26 Richard Guenther PR middle-end/38851 * Makefile.in (tree-ssa-dse.o): Add langhooks.h. * tree-ssa-dse.c: Include langhooks.h (execute_simple_dse): Remove stores with zero size. * g++.dg/warn/Wuninitialized-1.C: New testcase. From-SVN: r143672 --- gcc/ChangeLog | 7 ++++++ gcc/Makefile.in | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/Wuninitialized-1.C | 15 +++++++++++++ gcc/tree-ssa-dse.c | 32 +++++++++++++++++++++------- 5 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wuninitialized-1.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ecf9e46..f9ca880 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-01-26 Richard Guenther + + PR middle-end/38851 + * Makefile.in (tree-ssa-dse.o): Add langhooks.h. + * tree-ssa-dse.c: Include langhooks.h + (execute_simple_dse): Remove stores with zero size. + 2009-01-24 Jakub Jelinek PR c/38957 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 8b214b9..ab461e7 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2110,7 +2110,7 @@ tree-outof-ssa.o : tree-outof-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \ tree-ssa-dse.o : tree-ssa-dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \ $(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) domwalk.h $(FLAGS_H) \ - $(DIAGNOSTIC_H) $(TIMEVAR_H) + $(DIAGNOSTIC_H) $(TIMEVAR_H) langhooks.h tree-ssa-forwprop.o : tree-ssa-forwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(GGC_H) $(TREE_H) $(RTL_H) $(TM_P_H) $(BASIC_BLOCK_H) \ $(TREE_FLOW_H) tree-pass.h $(TREE_DUMP_H) $(DIAGNOSTIC_H) $(TIMEVAR_H) \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d079da9..ea1493a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-26 Richard Guenther + + PR middle-end/38851 + * g++.dg/warn/Wuninitialized-1.C: New testcase. + 2009-01-25 Hans-Peter Nilsson * gcc.dg/bitfld-15.c: Gate warning on target diff --git a/gcc/testsuite/g++.dg/warn/Wuninitialized-1.C b/gcc/testsuite/g++.dg/warn/Wuninitialized-1.C new file mode 100644 index 0000000..7b1b90b --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wuninitialized-1.C @@ -0,0 +1,15 @@ +/* { dg-options "-O2 -Wuninitialized" } */ + +struct Empty { Empty() {} }; /* { dg-bogus "uninitialized" } */ +struct Other { + Other(const Empty& e_) : e(e_) {} + Empty e; +}; +void bar(Other&); +void foo() +{ + Empty e; + Other o(e); + bar(o); +} + diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c index b4be514..8a72495 100644 --- a/gcc/tree-ssa-dse.c +++ b/gcc/tree-ssa-dse.c @@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-dump.h" #include "domwalk.h" #include "flags.h" +#include "langhooks.h" /* This file implements dead store elimination. @@ -660,20 +661,35 @@ execute_simple_dse (void) tree op; bool removed = false; ssa_op_iter iter; + tree size; - if (gimple_stored_syms (stmt) - && !bitmap_empty_p (gimple_stored_syms (stmt)) - && (is_gimple_assign (stmt) - || (is_gimple_call (stmt) - && gimple_call_lhs (stmt))) - && !bitmap_intersect_p (gimple_stored_syms (stmt), variables_loaded)) + if (is_gimple_assign (stmt) + && AGGREGATE_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt))) + && (size = lang_hooks.expr_size (gimple_assign_lhs (stmt))) + && integer_zerop (size)) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, " Deleted zero-sized store '"); + print_gimple_stmt (dump_file, stmt, 0, dump_flags); + fprintf (dump_file, "'\n"); + } + removed = true; + gsi_remove (&gsi, true); + todo |= TODO_cleanup_cfg; + } + else if (gimple_stored_syms (stmt) + && !bitmap_empty_p (gimple_stored_syms (stmt)) + && (is_gimple_assign (stmt) + || (is_gimple_call (stmt) + && gimple_call_lhs (stmt))) + && !bitmap_intersect_p (gimple_stored_syms (stmt), + variables_loaded)) { unsigned int i; bitmap_iterator bi; bool dead = true; - - /* See if STMT only stores to write-only variables and verify that there are no volatile operands. tree-ssa-operands sets has_volatile_ops flag for all statements involving -- 2.7.4