diff options
author | James A. Morrison <phython@gcc.gnu.org> | 2005-08-09 04:21:26 +0000 |
---|---|---|
committer | James A. Morrison <phython@gcc.gnu.org> | 2005-08-09 04:21:26 +0000 |
commit | f14e694e82ff0a1aff4a9b8da707fda2209fded7 (patch) | |
tree | c109122a3afbc79c870fd4e7a196f2c92de42a6a | |
parent | 2ef571e2c282999a7c3f46e6a0b85a1a46500135 (diff) | |
download | gcc-f14e694e82ff0a1aff4a9b8da707fda2209fded7.zip gcc-f14e694e82ff0a1aff4a9b8da707fda2209fded7.tar.gz gcc-f14e694e82ff0a1aff4a9b8da707fda2209fded7.tar.bz2 |
re PR c/23161 (Labels and empty statement warnings)
2005-08-09 James A. Morrison <phython@gcc.gnu.org>
PR c/23161
PR c/23165
* c-typeck.c (c_finish_if_stmt): Look into STATEMENT_LISTs to see
if the if is really empty.
From-SVN: r102896
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-typeck.c | 29 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr23165.c | 9 |
4 files changed, 41 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 751668f..a712bb9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-08-09 James A. Morrison <phython@gcc.gnu.org> + + PR c/23161 + PR c/23165 + * c-typeck.c (c_finish_if_stmt): Look into STATEMENT_LISTs to see + if the if is really empty. + 2005-08-09 Steven Bosscher <stevenb@suse.de> PR tree-optimization/23234 diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 9078730..29d9067 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -7003,20 +7003,31 @@ c_finish_if_stmt (location_t if_locus, tree cond, tree then_block, /* Diagnose ";" via the special empty statement node that we create. */ if (extra_warnings) { - if (TREE_CODE (then_block) == NOP_EXPR && !TREE_TYPE (then_block)) + tree *inner_then = &then_block, *inner_else = &else_block; + + if (TREE_CODE (*inner_then) == STATEMENT_LIST + && STATEMENT_LIST_TAIL (*inner_then)) + inner_then = &STATEMENT_LIST_TAIL (*inner_then)->stmt; + if (*inner_else && TREE_CODE (*inner_else) == STATEMENT_LIST + && STATEMENT_LIST_TAIL (*inner_else)) + inner_else = &STATEMENT_LIST_TAIL (*inner_else)->stmt; + + if (TREE_CODE (*inner_then) == NOP_EXPR && !TREE_TYPE (*inner_then)) { - if (!else_block) + if (!*inner_else) warning (0, "%Hempty body in an if-statement", - EXPR_LOCUS (then_block)); - then_block = alloc_stmt_list (); + EXPR_LOCUS (*inner_then)); + + *inner_then = alloc_stmt_list (); } - if (else_block - && TREE_CODE (else_block) == NOP_EXPR - && !TREE_TYPE (else_block)) + if (*inner_else + && TREE_CODE (*inner_else) == NOP_EXPR + && !TREE_TYPE (*inner_else)) { warning (0, "%Hempty body in an else-statement", - EXPR_LOCUS (else_block)); - else_block = alloc_stmt_list (); + EXPR_LOCUS (*inner_else)); + + *inner_else = alloc_stmt_list (); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57681cd..7a0cbd5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,8 @@ -2005-08-09 Stevem Bosscher <stevenb@suse.de> +2005-08-09 James A. Morrison <phython@gcc.gnu.org> + + * gcc.dg/pr23165.c: New test. + +2005-08-09 Steven Bosscher <stevenb@suse.de> PR tree-optimization/23234 * gcc.dg/tree-ssa/pr23234.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr23165.c b/gcc/testsuite/gcc.dg/pr23165.c new file mode 100644 index 0000000..2c63eb1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr23165.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-Wextra" } */ +void foo (void) +{ + if (0) + a: ; /* { dg-warning "empty body in an if-statement" } */ + + +} |