xref: /aosp_15_r20/external/clang/test/Preprocessor/stringize_misc.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li #ifdef TEST1
2*67e74705SXin Li // RUN: %clang_cc1 -E %s -DTEST1 | FileCheck -strict-whitespace %s
3*67e74705SXin Li 
4*67e74705SXin Li #define M(x, y) #x #y
5*67e74705SXin Li 
6*67e74705SXin Li M( f(1, 2), g((x=y++, y)))
7*67e74705SXin Li // CHECK: "f(1, 2)" "g((x=y++, y))"
8*67e74705SXin Li 
9*67e74705SXin Li M( {a=1 , b=2;} ) /* A semicolon is not a comma */
10*67e74705SXin Li // CHECK: "{a=1" "b=2;}"
11*67e74705SXin Li 
12*67e74705SXin Li M( <, [ ) /* Passes the arguments < and [ */
13*67e74705SXin Li // CHECK: "<" "["
14*67e74705SXin Li 
15*67e74705SXin Li M( (,), (...) ) /* Passes the arguments (,) and (...) */
16*67e74705SXin Li // CHECK: "(,)" "(...)"
17*67e74705SXin Li 
18*67e74705SXin Li #define START_END(start, end) start c=3; end
19*67e74705SXin Li 
20*67e74705SXin Li START_END( {a=1 , b=2;} ) /* braces are not parentheses */
21*67e74705SXin Li // CHECK: {a=1 c=3; b=2;}
22*67e74705SXin Li 
23*67e74705SXin Li /*
24*67e74705SXin Li  * To pass a comma token as an argument it is
25*67e74705SXin Li  * necessary to write:
26*67e74705SXin Li  */
27*67e74705SXin Li #define COMMA ,
28*67e74705SXin Li 
29*67e74705SXin Li M(a COMMA b, (a, b))
30*67e74705SXin Li // CHECK: "a COMMA b" "(a, b)"
31*67e74705SXin Li 
32*67e74705SXin Li #endif
33*67e74705SXin Li 
34*67e74705SXin Li #ifdef TEST2
35*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST2
36*67e74705SXin Li 
37*67e74705SXin Li #define HASH #
38*67e74705SXin Li #define INVALID() #
39*67e74705SXin Li // expected-error@-1{{'#' is not followed by a macro parameter}}
40*67e74705SXin Li 
41*67e74705SXin Li #endif
42