https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81216
--- Comment #9 from Marek Polacek <mpolacek at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #8) > --- 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. Thanks for looking. I'll go with the initializing, as is done cp_parser_implicitly_scoped_statement. Not sure why I didn't set it in cp_parser_already_scoped_statement :(.