<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 15, 2016 at 3:04 PM, Edward Diener via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">I have reported bug 27380 located at <a href="https://llvm.org/bugs/show_bug.cgi?id=27380" rel="noreferrer" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=27380</a> for a clang-cl preprocessor problem as it emulates the VC++ preprocessor. The problem can be illustrated wit the code:<br>
<br>
#define TEST_MACRO(x,y) TEST_EXPAND(2, 0, TEST_SOMETHING(x,y,1))<br>
#define TEST_SOMETHING(x,y,z) 2<br>
<br>
#define TEST_EXPAND(...) TEST_EXPAND_I(TEST_OVR(TEST_NAME, __VA_ARGS__), (__VA_ARGS__))<br>
#define TEST_OVR(name,...) TEST_SOMENAME<br>
#define TEST_EXPAND_I(m, args) TEST_EXPAND_II(m, args)<br>
#define TEST_EXPAND_II(m, args) TEST_CAT(m ## args,)<br>
#define TEST_SOMENAME(x,y,z) ;<br>
<br>
#define TEST_CAT(a, b) TEST_CAT_I(a, b)<br>
#define TEST_CAT_I(a, b) TEST_CAT_II(~, a ## b)<br>
#define TEST_CAT_II(p, res) res<br>
<br>
int main()<br>
        {<br>
        TEST_MACRO(1,2)<br>
    }<br>
<br>
which compiles correctly with VC++14 but with the latest clang-cl built from the trunk gives:<br>
<br>
test_clang.cpp(17,2):  error: pasting formed 'TEST_SOMENAME(', an invalid preprocessing token [-Winvalid-token-paste]<br>
        TEST_MACRO(1,2)<br>
        ^<br>
test_clang.cpp(2,25):  note: expanded from macro 'TEST_MACRO'<br>
#define TEST_MACRO(x,y) TEST_EXPAND(2, 0, TEST_SOMETHING(x,y,1))<br>
                        ^<br>
test_clang.cpp(5,26):  note: expanded from macro 'TEST_EXPAND'<br>
#define TEST_EXPAND(...) TEST_EXPAND_I(TEST_OVR(TEST_NAME, __VA_ARGS__), (__VA_ARGS__))<br>
                         ^<br>
test_clang.cpp(7,32):  note: expanded from macro 'TEST_EXPAND_I'<br>
#define TEST_EXPAND_I(m, args) TEST_EXPAND_II(m, args)<br>
                               ^<br>
test_clang.cpp(8,44):  note: expanded from macro 'TEST_EXPAND_II'<br>
#define TEST_EXPAND_II(m, args) TEST_CAT(m ## args,)<br>
<br>
The bug is instrumental in keeping Boost PP from working correctly with clang-cl, and therefore keeping many other Boost libraries, which use Boost PP, from working with clang-cl. There appear to be other problems but until this gets fixed I won't know for sure, since fixing this problem may make any others which have shown up go away.<br>
<br>
Thanks for listening !<br></blockquote><div><br></div><div>Did you try disabling <span style="font-size:12.8px">-Winvalid-token-paste (-Wno-invalid-token-paste)?  Possibly it should be disabled by default in MSVC emulation mode, but macro_paste_identifier_error.c explicitly turns it off as well as specifying -fms-extensions.</span></div><div><span style="font-size:12.8px"><br></span></div><div>-- James</div><div><br></div></div></div></div>