aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames A. Morrison <phython@gcc.gnu.org>2005-08-09 04:21:26 +0000
committerJames A. Morrison <phython@gcc.gnu.org>2005-08-09 04:21:26 +0000
commitf14e694e82ff0a1aff4a9b8da707fda2209fded7 (patch)
treec109122a3afbc79c870fd4e7a196f2c92de42a6a
parent2ef571e2c282999a7c3f46e6a0b85a1a46500135 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/c-typeck.c29
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/pr23165.c9
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" } */
+
+
+}