https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81216

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Marek Polacek from comment #9)
> > 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.

Here is a reduced testcase that shows the ICE with that patch:
template <typename A, typename B>
static bool
equal (A a, A b, B c)
{
  for (; a != b; ++a, (void)++c)
    if (!(*a == *c))
      return false;
  return true;
}

Seems there are many reasons why it can not set *loc_after_labels, if it parses
something into non-NULL statement, or various pragmas, or EOF.

Reply via email to