1*f4a2713aSLionel Sambuc // RUN: %clang_cc1 -E %s | FileCheck -strict-whitespace %s 2*f4a2713aSLionel Sambuc 3*f4a2713aSLionel Sambuc #define M(x, y) #x #y 4*f4a2713aSLionel Sambuc 5*f4a2713aSLionel Sambuc M( f(1, 2), g((x=y++, y))) 6*f4a2713aSLionel Sambuc // CHECK: "f(1, 2)" "g((x=y++, y))" 7*f4a2713aSLionel Sambuc 8*f4a2713aSLionel Sambuc M( {a=1 , b=2;} ) /* A semicolon is not a comma */ 9*f4a2713aSLionel Sambuc // CHECK: "{a=1" "b=2;}" 10*f4a2713aSLionel Sambuc 11*f4a2713aSLionel Sambuc M( <, [ ) /* Passes the arguments < and [ */ 12*f4a2713aSLionel Sambuc // CHECK: "<" "[" 13*f4a2713aSLionel Sambuc 14*f4a2713aSLionel Sambuc M( (,), (...) ) /* Passes the arguments (,) and (...) */ 15*f4a2713aSLionel Sambuc // CHECK: "(,)" "(...)" 16*f4a2713aSLionel Sambuc 17*f4a2713aSLionel Sambuc #define START_END(start, end) start c=3; end 18*f4a2713aSLionel Sambuc 19*f4a2713aSLionel Sambuc START_END( {a=1 , b=2;} ) /* braces are not parentheses */ 20*f4a2713aSLionel Sambuc // CHECK: {a=1 c=3; b=2;} 21*f4a2713aSLionel Sambuc 22*f4a2713aSLionel Sambuc /* 23*f4a2713aSLionel Sambuc * To pass a comma token as an argument it is 24*f4a2713aSLionel Sambuc * necessary to write: 25*f4a2713aSLionel Sambuc */ 26*f4a2713aSLionel Sambuc #define COMMA , 27*f4a2713aSLionel Sambuc 28*f4a2713aSLionel Sambuc M(a COMMA b, (a, b)) 29*f4a2713aSLionel Sambuc // CHECK: "a COMMA b" "(a, b)" 30*f4a2713aSLionel Sambuc 31