r200787 - Fix whitespace handling in empty macro expansions

Harald van Dijk harald at gigawatt.nl
Wed Feb 5 13:08:40 PST 2014


On 05/02/14 00:42, Richard Smith wrote:
> Here's an easy test:
> 
> #define foo() bar() b
> #define bar()
> a
> foo()
> c
> 
> This should produce:
> 
> # 1 "..."
> 
> 
> a
>  b
> c
> 
> ... but currently produces:
> 
> #1 "..."
> 
> 
> a b
> 
> c

Thanks Richard, I don't know how I managed to miss that.

Setting Token::StartOfLine as mentioned gets this right in the lexer.
However, even though the b token in the output has both
Token::StartOfLine and Token::LeadingSpace set,
PrintPPOutputPPCallbacks::HandleFirstTokOnLine uses the column number to
determine whether to print spaces, not the flag. As a result, the output
becomes not

a
 b
c

but

a
b
c

Given that the lexer behaviour is now right, would it be okay to leave
this as it is, and only add a test to check that b is on a separate
line, like attached? (I used first/second/third instead of a/b/c in an
attempt to get FileCheck to print a better suggestion when the test
fails, but it neither helps nor hurts.)

Cheers,
Harald van Dijk
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Set-Token-StartOfLine-after-empty-macro-expansion.patch
Type: text/x-patch
Size: 1609 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140205/7cbcfbfc/attachment.bin>


More information about the cfe-commits mailing list