[C PATCH] Follow-up fix to the misclassified token problem (PR c/67784)
Jakub Jelinek
jakub@redhat.com
Tue Apr 26 13:10:00 GMT 2016
On Tue, Apr 26, 2016 at 03:06:16PM +0200, Marek Polacek wrote:
> On Tue, Apr 26, 2016 at 11:44:52AM +0000, Joseph Myers wrote:
> > On Tue, 26 Apr 2016, Marek Polacek wrote:
> >
> > > This PR was reopened, because the exact same problem with treating a TYPENAME
> > > wrongly as an ID was found when using just if-clause, without an enclosing for
> > > loop. More details: <https://gcc.gnu.org/ml/gcc-patches/2015-11/msg01588.html>.
> > > That fix had a follow-up, because it broke some ObjC code.
> > >
> > > To fix this, we need to use the (amended) token reclassification even when
> > > parsing an if statement. I factored the code into a separate function so as to
> > > not repeat the very same code.
> > >
> > > Bootstrapped/regtested on x86_64-linux, ok for trunk?
> >
> > I think you need more thorough testcases, to cover the cases where the if
> > statement with no else forms the body of a switch or while statement, and
> > the declaration in question appears in the expression of that switch or
> > while statement, e.g.
> >
> > typedef int T;
> >
> > switch (sizeof (enum { T }))
> > if (1)
> > ;
> > T x;
>
> Ah, right, that revealed two more places that were missing the
> c_parser_maybe_reclassify_token call.
Bet there are many more, the various OpenMP/OpenACC/Cilk+ loops (if without
{}s around the body or in between collapsed loops), perhaps even #pragma GCC
ivdep. But I can handle those incrementally.
Jakub
More information about the Gcc-patches
mailing list