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 :(.

Reply via email to