------- Comment #4 from hjl dot tools at gmail dot com  2008-09-30 16:10 -------
http://gcc.gnu.org/ml/gcc-patches/2008-08/msg01620.html

makes nested_if uninitialized for g++.dg/warn/Wparentheses-3.C:

--- gcc/cp/parser.c     (revision 138452)
+++ gcc/cp/parser.c     (working copy)
@@ -7120,7 +7120,17 @@ cp_parser_selection_statement (cp_parser
            /* Parse the then-clause.  */
            in_statement = parser->in_statement;
            parser->in_statement |= IN_IF_STMT;
-           cp_parser_implicitly_scoped_statement (parser, &nested_if);
+           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
+             {
+               location_t loc = cp_lexer_peek_token (parser->lexer)->location;
+               add_stmt (build_empty_stmt ());
+               cp_lexer_consume_token (parser->lexer);
+               if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
+                 warning (OPT_Wempty_body, "%Hsuggest braces around "
+                          "empty body in an %<if%> statement", &loc);
+             }
+           else
+             cp_parser_implicitly_scoped_statement (parser, &nested_if);
            parser->in_statement = in_statement;

I saw this bug on Linux/ia32 and Linux/ia64. This patch:

--- ./parser.c.foo      2008-09-30 08:41:24.000000000 -0700
+++ ./parser.c  2008-09-30 09:06:05.000000000 -0700
@@ -7163,6 +7163,7 @@ cp_parser_selection_statement (cp_parser
                if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
                  warning_at (loc, OPT_Wempty_body, "suggest braces around "
                              "empty body in an %<if%> statement");
+               nested_if = false;
              }
            else
              cp_parser_implicitly_scoped_statement (parser, &nested_if);

works for me.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37683

Reply via email to