https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81216
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- parser.c~ 2017-06-26 12:21:40.000000000 +0200 +++ parser.c 2017-06-27 08:19:49.317629661 +0200 @@ -12438,7 +12438,7 @@ cp_parser_already_scoped_statement (cp_p { token_indent_info body_tinfo = get_token_indent_info (cp_lexer_peek_token (parser->lexer)); - location_t loc_after_labels; + location_t loc_after_labels = (location_t) 0xaaaaaaaaU; cp_parser_statement (parser, NULL_TREE, false, if_p, NULL, &loc_after_labels); @@ -12447,9 +12447,12 @@ cp_parser_already_scoped_statement (cp_p warn_for_misleading_indentation (guard_tinfo, body_tinfo, next_tinfo); if (next_tinfo.type != CPP_SEMICOLON) +{ +gcc_assert (loc_after_labels != (location_t) 0xaaaaaaaaU); warn_for_multistatement_macros (loc_after_labels, next_tinfo.location, guard_tinfo.location, guard_tinfo.keyword); +} } else { is what I've tried and it ICEs on that. So, either just initializing loc_after_labels to UNKNOWN_LOCATION and calling warn_for_multistatement_macros only if loc_after_labels != UNKNOWN_LOCATION like done in other spots should cure it, or we want to figure out why cp_parser_statement doesn't store anything.