[cfe-commits] [PATCH] PR4111, PR5925, PR13210: Make tentative parsing smarter in the presence of undeclared identifiers

Richard Smith richard at metafoo.co.uk
Sun Jul 8 14:11:07 PDT 2012


Ping.

On Fri, Jun 29, 2012 at 12:49 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> On Fri, Jun 29, 2012 at 11:46 AM, Sean Silva <silvas at purdue.edu> wrote:
>
>> +      case ANK_TentativeDecl:
>> +      case ANK_TemplateName:
>> +        // These two shouldn't happen.
>> +      case ANK_Unresolved:
>>         break;
>>
>> assert?
>>
>
> Sorry, I forgot to update that comment after some refactoring. The second
> case is possible (but only for ill-formed code), and the first case is
> completely harmless. I've updated and simplified this code to remove the
> switch entirely:
>
>   case tok::identifier: {
>     Token Next = NextToken();
>     if (Next.is(tok::colon)) { // C99 6.8.1: labeled-statement
>       // identifier ':' statement
>       return ParseLabeledStatement(Attrs);
>     }
>
>     // Look up the identifier, and typo-correct it to a keyword if it's not
>     // found.
>     if (Next.isNot(tok::coloncolon)) {
>       // CorrectionCandidateCallback by default allows typo-correction to
>       // anything which can appear at the start of a statement.
>       CorrectionCandidateCallback DefaultValidator;
>        if (TryAnnotateName(/*IsAddressOfOperand*/false, &DefaultValidator)
>             == ANK_Error) {
>         // Handle errors here by skipping up to the next semicolon or '}',
> and
>         // eat the semicolon if that's what stopped us.
>         SkipUntil(tok::r_brace, /*StopAtSemi=*/true, /*DontConsume=*/true);
>         if (Tok.is(tok::semi))
>           ConsumeToken();
>         return StmtError();
>       }
>
>       // If the identifier was typo-corrected, try again.
>       if (Tok.isNot(tok::identifier))
>         goto Retry;
>     }
>
>     // Fall through
>   }
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120708/b13f7d01/attachment.html>


More information about the cfe-commits mailing list