https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70922
--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> --- This should fix it then: diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index d275f8e..d31e915 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -5532,7 +5532,7 @@ c_parser_if_statement (c_parser *parser, bool *if_p, vec<tree> *chain) /* Set IF_P to true to indicate that this if statement has an else clause. This may trigger the Wparentheses warning below when we get back up to the parent if statement. */ - if (if_p != NULL) + if (if_p != NULL && !from_macro_expansion_at (loc)) *if_p = true; } else diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index da2ee3c..f6b8008 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10848,6 +10848,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p, { tree statement; tree condition; + location_t loc = cp_lexer_peek_token (parser->lexer)->location; /* Look for the `('. */ if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN)) @@ -10941,7 +10942,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p, indicate that this if statement has an else clause. This may trigger the Wparentheses warning below when we get back up to the parent if statement. */ - if (if_p != NULL) + if (if_p != NULL && !from_macro_expansion_at (loc)) *if_p = true; } else