1*67e74705SXin Li // RUN: %clang_cc1 -E -fms-compatibility %s -o %t 2*67e74705SXin Li // RUN: FileCheck %s < %t 3*67e74705SXin Li 4*67e74705SXin Li # define M2(x, y) x + y 5*67e74705SXin Li # define P(x, y) {x, y} 6*67e74705SXin Li # define M(x, y) M2(x, P(x, y)) 7*67e74705SXin Li M(a, b) // CHECK: a + {a, b} 8*67e74705SXin Li 9*67e74705SXin Li // Regression test for PR13924 10*67e74705SXin Li #define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar) 11*67e74705SXin Li #define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar 12*67e74705SXin Li 13*67e74705SXin Li #define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 14*67e74705SXin Li 15*67e74705SXin Li #define GMOCK_ACTION_CLASS_(name, value_params)\ 16*67e74705SXin Li GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) 17*67e74705SXin Li 18*67e74705SXin Li #define ACTION_TEMPLATE(name, template_params, value_params)\ 19*67e74705SXin Li class GMOCK_ACTION_CLASS_(name, value_params) {\ 20*67e74705SXin Li } 21*67e74705SXin Li 22*67e74705SXin Li ACTION_TEMPLATE(InvokeArgument, 23*67e74705SXin Li HAS_1_TEMPLATE_PARAMS(int, k), 24*67e74705SXin Li AND_2_VALUE_PARAMS(p0, p1)); 25*67e74705SXin Li 26*67e74705SXin Li // This tests compatibility with behaviour needed for type_traits in VS2012 27*67e74705SXin Li // Test based on _VARIADIC_EXPAND_0X macros in xstddef of VS2012 28*67e74705SXin Li #define _COMMA , 29*67e74705SXin Li 30*67e74705SXin Li #define MAKER(_arg1, _comma, _arg2) \ 31*67e74705SXin Li void func(_arg1 _comma _arg2) {} 32*67e74705SXin Li #define MAKE_FUNC(_makerP1, _makerP2, _arg1, _comma, _arg2) \ 33*67e74705SXin Li _makerP1##_makerP2(_arg1, _comma, _arg2) 34*67e74705SXin Li 35*67e74705SXin Li MAKE_FUNC(MAK, ER, int a, _COMMA, int b); 36*67e74705SXin Li // CHECK: void func(int a , int b) {} 37*67e74705SXin Li 38*67e74705SXin Li #define macro(a, b) (a - b) 39*67e74705SXin Li void function(int a); 40*67e74705SXin Li #define COMMA_ELIDER(...) \ 41*67e74705SXin Li macro(x, __VA_ARGS__); \ 42*67e74705SXin Li function(x, __VA_ARGS__); 43*67e74705SXin Li COMMA_ELIDER(); 44*67e74705SXin Li // CHECK: (x - ); 45*67e74705SXin Li // CHECK: function(x); 46