[PATCH] PR14795 : -frewrite-includes sometimes results in incorrect line number

Lubos Lunak l.lunak at suse.cz
Sun Jul 14 14:16:38 PDT 2013


On Monday 01 of July 2013, Eli Friedman wrote:
> On Sat, Jun 29, 2013 at 11:35 PM, Lubos Lunak <l.lunak at suse.cz> wrote:
> >  Hello,
> >
> >  could somebody please review and commit the atached patch for pr14795?
> > Thank
> > you.
>
> --- a/lib/Lex/Lexer.cpp
> +++ b/lib/Lex/Lexer.cpp
> @@ -2372,8 +2372,9 @@ bool Lexer::LexEndOfFile(Token &Result, const char
> *CurPtr) {
>      FormTokenWithChars(Result, CurPtr, tok::eod);
>
>      // Restore comment saving mode, in case it was disabled for directive.
> -    resetExtendedTokenMode();
> -    return true;  // Have a token.
> +    if (PP)
> +      resetExtendedTokenMode();
> +    return true; // Have a token.
>    }
>
>    // If we are in raw mode, return this event as an EOF token.  Let the
> caller
>
> How is this related?

 I had a crash there without this when I wrote the patch. I don't remember the 
circumstances though and the random testcase I tried doesn't trigger it.

> +            // We surround every #include by #if 0 to comment it out, but
> that
> +            // changes line numbers. These are fixed up right after that,
> but
> +            // the whole #include could be inside a preprocessor
> conditional
> +            // that is not processed. So it is necessary to fix the line
>
> This looks like it puts a line directive after every if/elif/else/endif.
>  That not really a problem, I guess, but it would be nice to avoid if
> possible.

 Maybe there can be a way to compute which ones need it (every change from 
ignored to non-ignored block), but that seems like way too much effort for a 
couple of lines.

> Otherwise, looks fine.

-- 
 Lubos Lunak
 l.lunak at suse.cz



More information about the cfe-commits mailing list