[PATCH] Mimic MSVC whitespace collapse for incompatible token pasting

Will Wilson will at indefiant.com
Fri Apr 10 14:03:43 PDT 2015


Hi Reid,

RHS is a const reference to the Tokens array. So RHS is only mutable if we
make some ugly changes... I haven't tried it, but I can if you think it's
worth the fallout?

- Will.

On 10 April 2015 at 21:59, Reid Kleckner <rnk at google.com> wrote:

> Sure, this is http://llvm.org/pr23071.
>
> Can this be handled locally by this code?
>           // If we're in microsoft extensions mode, downgrade this from a
> hard
>           // error to an extension that defaults to an error.  This allows
>           // disabling it.
>           PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ?
> diag::ext_pp_bad_paste_ms
>                                                      :
> diag::err_pp_bad_paste)
>               << Buffer;
>
> Any reason we can't do RHS.clearFlag(Token::LeadingSpace) here in
> -fms-extensions mode?
>
> On Fri, Apr 10, 2015 at 12:45 PM, Will Wilson <will at indefiant.com> wrote:
>
>> Hi Reid,
>>
>> Attached is a patch to handle a corner case supported by MSVC. I decided
>> to attempt to workaround the behaviour in clang after encountering it in
>> public MS headers for XAudio where clang would fail to generate a valid
>> UUID due to the UUID components being combined with the '-' UUID
>> separators. Clang was attempting to recover but would preserve the leading
>> whitespace from the tokens after each failed paste leading to spaces
>> creeping into the UUID and causing an error in the __declspace(uuid())
>> parsing.
>>
>> Reference: Microsoft DirectX SDK (June 2010)\Include\XAudio2.h(51)
>>
>> Test case included and tested against latest trunk.
>>
>> Let me know if it looks acceptable!
>>
>> Cheers,
>> Will.
>>
>
>


-- 
*Indefiant *: http://www.indefiant.com
Home of Recode : Runtime C++ Editing for VS
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150410/024f2a25/attachment.html>


More information about the cfe-commits mailing list