[PATCH] Mimic MSVC whitespace collapse for incompatible token pasting

Reid Kleckner rnk at google.com
Fri Apr 10 12:59:29 PDT 2015


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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150410/9fe59a7e/attachment.html>


More information about the cfe-commits mailing list