[cfe-dev] Another clang-cl preprocessor problem
Edward Diener via cfe-dev
cfe-dev at lists.llvm.org
Sat Apr 16 01:36:09 PDT 2016
I posted bug 27382 at https://llvm.org/bugs/show_bug.cgi?id=27382, which
illustrates a problem with clang-cl's emulation of VC++. The code is:
#define TEST_EXPAND(x) TEST_EXPAND_I(x)
#define TEST_EXPAND_I(x) x
#define TEST_REM(...) __VA_ARGS__
#define TEST_CAT(a, b) TEST_CAT_I(a, b)
#define TEST_CAT_I(a, b) a ## b
#define TEST_ELEM(n, ...) TEST_ELEM_I(n,__VA_ARGS__)
#define TEST_ELEM_I(n, ...) TEST_CAT(TEST_CAT(TEST_ELEM_, n)(__VA_ARGS__,),)
#define TEST_ELEM_0(e0, ...) e0
#define TEST_ELEM_1(e0, e1, ...) e1
#define TEST_MACRO(x,y) TEST_ELEM(x, TEST_EXPAND(TEST_REM y))
int main()
{
int x = TEST_MACRO(1,(1,0));
return x;
}
VC++14 compiles this without error. Clang-cl gives:
test_clang2.cpp(17,29): error: too many arguments provided to
function-like macro invocation
int x = TEST_MACRO(1,(1,0));
^
test_clang2.cpp(2,9): note: macro 'TEST_EXPAND_I' defined here
#define TEST_EXPAND_I(x) x
^
test_clang2.cpp(17,32): error: expected expression
int x = TEST_MACRO(1,(1,0));
My reason for posting this here is not to embarrass clang but in case
anybody knows of a compiler option workaround. I am discovering problems
testing the Boost Preprocessor library with clang-cl, and the above code
is a simplified version of code in Boost PP which illustates the
problem. The clang-cl compiler options used are:
-TP /Od /Ob0 /W3 /GR /MDd /Zc:forScope /Zc:wchar_t -fmsc-version=1900
/wd4675 /EHs -fmacro-backtrace-limit=0 -Wno-invalid-token-paste -c
More information about the cfe-dev
mailing list