Commit 8cb3ee37 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/35609 ("is used uninitialized in this function" should be may warning)

2008-03-19  Richard Guenther  <rguenther@suse.de>

	PR middle-end/35609
	* tree-ssa.c (always_executed): New global flag.
	(warn_uninitialized_var): If !always_executed warn with "maybe"
	instead of "is".
	(execute_early_warn_uninitialized): Compute post-dominators.
	Initialize always_executed before processing each basic block.

	* gcc.dg/testsuite/uninit-15.c: New testcase.
	* gcc.dg/testsuite/uninit-16.c: Likewise.

From-SVN: r133341
parent 21c2d075
2008-03-19 Richard Guenther <rguenther@suse.de>
PR middle-end/35609
* tree-ssa.c (always_executed): New global flag.
(warn_uninitialized_var): If !always_executed warn with "maybe"
instead of "is".
(execute_early_warn_uninitialized): Compute post-dominators.
Initialize always_executed before processing each basic block.
2008-03-18 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> 2008-03-18 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
PR target/35504 PR target/35504
......
2008-03-19 Richard Guenther <rguenther@suse.de>
PR middle-end/35609
* gcc.dg/testsuite/uninit-15.c: New testcase.
* gcc.dg/testsuite/uninit-16.c: Likewise.
2008-03-18 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> 2008-03-18 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
PR target/35504 PR target/35504
/* { dg-do compile } */
/* { dg-options "-O -Wuninitialized" } */
inline int foo (int i)
{
if (i) return 1; /* { dg-warning "is used uninitialized" } */
return 0;
}
void baz();
void bar()
{
int j; /* { dg-message "was declared here" } */
for (; foo(j); ++j)
baz();
}
/* { dg-do compile } */
/* { dg-options "-O2 -Wuninitialized" } */
int foo, bar;
void decode_reloc(int reloc, int *is_alt)
{
if (reloc >= 20)
*is_alt = 1;
else if (reloc >= 10)
*is_alt = 0;
}
void testfunc()
{
int alt_reloc;
decode_reloc(foo, &alt_reloc);
if (alt_reloc) /* { dg-warning "may be used uninitialized" } */
bar = 42;
}
...@@ -1417,12 +1417,18 @@ warn_uninit (tree t, const char *gmsgid, void *data) ...@@ -1417,12 +1417,18 @@ warn_uninit (tree t, const char *gmsgid, void *data)
TREE_NO_WARNING (var) = 1; TREE_NO_WARNING (var) = 1;
} }
struct walk_data {
tree stmt;
bool always_executed;
};
/* Called via walk_tree, look for SSA_NAMEs that have empty definitions /* Called via walk_tree, look for SSA_NAMEs that have empty definitions
and warn about them. */ and warn about them. */
static tree static tree
warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data) warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data_)
{ {
struct walk_data *data = (struct walk_data *)data_;
tree t = *tp; tree t = *tp;
switch (TREE_CODE (t)) switch (TREE_CODE (t))
...@@ -1430,7 +1436,12 @@ warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data) ...@@ -1430,7 +1436,12 @@ warn_uninitialized_var (tree *tp, int *walk_subtrees, void *data)
case SSA_NAME: case SSA_NAME:
/* We only do data flow with SSA_NAMEs, so that's all we /* We only do data flow with SSA_NAMEs, so that's all we
can warn about. */ can warn about. */
warn_uninit (t, "%H%qD is used uninitialized in this function", data); if (data->always_executed)
warn_uninit (t, "%H%qD is used uninitialized in this function",
data->stmt);
else
warn_uninit (t, "%H%qD may be used uninitialized in this function",
data->stmt);
*walk_subtrees = 0; *walk_subtrees = 0;
break; break;
...@@ -1478,13 +1489,20 @@ execute_early_warn_uninitialized (void) ...@@ -1478,13 +1489,20 @@ execute_early_warn_uninitialized (void)
{ {
block_stmt_iterator bsi; block_stmt_iterator bsi;
basic_block bb; basic_block bb;
struct walk_data data;
calculate_dominance_info (CDI_POST_DOMINATORS);
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{
data.always_executed = dominated_by_p (CDI_POST_DOMINATORS,
single_succ (ENTRY_BLOCK_PTR), bb);
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{ {
tree context = bsi_stmt (bsi); data.stmt = bsi_stmt (bsi);
walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var, walk_tree (bsi_stmt_ptr (bsi), warn_uninitialized_var,
context, NULL); &data, NULL);
}
} }
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment