[PATCH] Mimic MSVC whitespace collapse for incompatible token pasting

Will Wilson will at indefiant.com
Fri Apr 10 14:06:00 PDT 2015


Actually looking at the ownership semantics for the TokenLexer::Tokens
array, I'd say it has to remain immutable. So modifying RHS looks like a
no-go...

- Will.

On 10 April 2015 at 23:03, Will Wilson <will at indefiant.com> wrote:

> 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
>



-- 
*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/03cd2ed2/attachment.html>


More information about the cfe-commits mailing list