re PR c++/36478 (warning not emitted when code expanded from macro)
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Nov 2008 22:18:03 +0000 (23:18 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 12 Nov 2008 22:18:03 +0000 (23:18 +0100)
PR c++/36478
Revert:
2007-05-07  Mike Stump  <mrs@apple.com>
* doc/invoke.texi (Warning Options): Document that -Wempty-body
also checks for and while statements in C++.

Revert:
2007-05-07  Mike Stump  <mrs@apple.com>
* parser.c (check_empty_body): Add.
(cp_parser_iteration_statement): Add call to check_empty_body.

* g++.old-deja/g++.mike/empty.C: Remove.

From-SVN: r141810

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.mike/empty.C [deleted file]

index 2cd719a87ae5ecb3a4c91fb08b108a0333f4b5ac..f36a6667f3c4e80b89813a0e78bc4f59930643dd 100644 (file)
@@ -1,3 +1,11 @@
+2008-11-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/36478
+       Revert:
+       2007-05-07  Mike Stump  <mrs@apple.com>
+       * doc/invoke.texi (Warning Options): Document that -Wempty-body
+       also checks for and while statements in C++.
+
 2008-11-12  Dodji Seketeli  <dodji@redhat.com>
 
        PR debug/27574
index 769e4cbc75540ae8aa8227b7323b6dd9466bc7ec..0a956d835844fa405347d8aee50635c2f20d4341 100644 (file)
@@ -1,3 +1,11 @@
+2008-11-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/36478
+       Revert:
+       2007-05-07  Mike Stump  <mrs@apple.com>
+       * parser.c (check_empty_body): Add.
+       (cp_parser_iteration_statement): Add call to check_empty_body.
+
 2008-11-12  Jason Merrill  <jason@redhat.com>
 
        PR c++/38007
index ec9624e69b28524421804fc9c439fa1e3680df2c..ba8759c954c8c4b054a9ab55f6898c4c1c0aacca 100644 (file)
@@ -7427,48 +7427,6 @@ cp_parser_condition (cp_parser* parser)
   return cp_parser_expression (parser, /*cast_p=*/false);
 }
 
-/* We check for a ) immediately followed by ; with no whitespacing
-   between.  This is used to issue a warning for:
-
-     while (...);
-
-   and:
-
-     for (...);
-
-   as the semicolon is probably extraneous.
-
-   On parse errors, the next token might not be a ), so do nothing in
-   that case. */
-
-static void
-check_empty_body (cp_parser* parser, const char* type)
-{
-  cp_token *token;
-  cp_token *close_paren;
-  expanded_location close_loc;
-  expanded_location semi_loc;
-  
-  close_paren = cp_lexer_peek_token (parser->lexer);
-  if (close_paren->type != CPP_CLOSE_PAREN)
-    return;
-
-  close_loc = expand_location (close_paren->location);
-  token = cp_lexer_peek_nth_token (parser->lexer, 2);
-
-  if (token->type != CPP_SEMICOLON
-      || (token->flags & PREV_WHITE))
-    return;
-
-  semi_loc =  expand_location (token->location);
-  if (close_loc.line == semi_loc.line
-      && close_loc.column+1 == semi_loc.column)
-    warning (OPT_Wempty_body,
-            "suggest a space before %<;%> or explicit braces around empty "
-            "body in %<%s%> statement",
-            type);
-}
-
 /* Parse an iteration-statement.
 
    iteration-statement:
@@ -7511,7 +7469,6 @@ cp_parser_iteration_statement (cp_parser* parser)
        /* Parse the condition.  */
        condition = cp_parser_condition (parser);
        finish_while_stmt_cond (condition, statement);
-       check_empty_body (parser, "while");
        /* Look for the `)'.  */
        cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
        /* Parse the dependent statement.  */
@@ -7573,7 +7530,6 @@ cp_parser_iteration_statement (cp_parser* parser)
        if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
          expression = cp_parser_expression (parser, /*cast_p=*/false);
        finish_for_expr (expression, statement);
-       check_empty_body (parser, "for");
        /* Look for the `)'.  */
        cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
 
index 9016949ec96b90ba02ce9b429e16ebe1b53430cc..3f6f400f6dcc593fc966bd4a751550b5bef18b69 100644 (file)
@@ -3678,9 +3678,7 @@ integers are disabled by default in C++ unless
 @opindex Wempty-body
 @opindex Wno-empty-body
 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
-while} statement.  Additionally, in C++, warn when an empty body occurs
-in a @samp{while} or @samp{for} statement with no whitespacing before
-the semicolon.  This warning is also enabled by @option{-Wextra}.
+while} statement.  This warning is also enabled by @option{-Wextra}.
 
 @item -Wenum-compare @r{(C++ and Objective-C++ only)}
 @opindex Wenum-compare
index 7a07fbda3442848c1e6842e293ba02852a65b235..74c5006ae5d1be87bd6147015e2722ddb670d2bc 100644 (file)
@@ -1,3 +1,8 @@
+2008-11-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/36478
+       * g++.old-deja/g++.mike/empty.C: Remove.
+
 2008-11-12  Dodji Seketeli  <dodji@redhat.com>
 
        PR debug/27574
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/empty.C b/gcc/testsuite/g++.old-deja/g++.mike/empty.C
deleted file mode 100644 (file)
index c36942e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-// { dg-options "-W" }
-
-#define NOPE
-
-void foo() {
-  while (1); /* { dg-warning "suggest a space before " } */
-    {
-    }
-  for (;;); /* { dg-warning "suggest a space before " } */
-    {
-    }
-  while (1)
-    ;
-  for (;;)
-    ;
-  while (1) ;
-  for (;;) ;
-  /* These two work when using mapped locations */
-  while (1) NOPE; /* { dg-bogus "suggest a space before " "suggest" } */
-  for (;;) NOPE; /* { dg-bogus "suggest a space before " "suggest" } */
-  while (1)
-    NOPE;
-  for (;;)
-    NOPE;
-}