/* PR preprocessor/101488 */ /* { dg-do preprocess } */ /* { dg-options "-std=gnu99" { target c } } */ /* { dg-options "-std=c++2a" { target c++ } } */ #define f0() n #define f1(x,...) a ## __VA_OPT__ (a) ## a #define f2(x,...) a ## __VA_OPT__ () ## a #define f3(x,...) a ## __VA_OPT__ (x) ## a #define f4(x,...) a ## __VA_OPT__ (x##x) ## a #define f5(x,...) a ## __VA_OPT__ (x##x 1) ## a #define f6(x,...) a ## __VA_OPT__ (1 x##x) ## a #define f7(x,...) __VA_OPT__ (f0 x ## x ) ## 1 #define f8(x,...) __VA_OPT__ (f0 x) ## 1 #define f9(x,...) f0 ## __VA_OPT__ (x 1) ## 1 #define f10(x,...) f0 ## __VA_OPT__ (x ## x 1) ## 1 #define f11(x, ...) __VA_OPT__(a x ## x) ## b #define f12(x, ...) a ## __VA_OPT__(x ## x b) #define f13(x) x ## x b #define ab def #define bc ghi #define abc jkl #define f14(x, ...) a ## __VA_OPT__(x b x) ## c t1 f1(,); /* { dg-final { scan-file va-opt-7.i "t1 aa;" } } */ t2 f1(,1); /* { dg-final { scan-file va-opt-7.i "t2 aaa;" } } */ t3 f1(2,1); /* { dg-final { scan-file va-opt-7.i "t3 aaa;" } } */ t4 f2(,); /* { dg-final { scan-file va-opt-7.i "t4 aa;" } } */ t5 f2(,1); /* { dg-final { scan-file va-opt-7.i "t5 aa;" } } */ t6 f2(2,1); /* { dg-final { scan-file va-opt-7.i "t6 aa;" } } */ t7 f3(,); /* { dg-final { scan-file va-opt-7.i "t7 aa;" } } */ t8 f3(,1); /* { dg-final { scan-file va-opt-7.i "t8 aa;" } } */ t9 f3(2,1); /* { dg-final { scan-file va-opt-7.i "t9 a2a;" } } */ t10 f4(,); /* { dg-final { scan-file va-opt-7.i "t10 aa;" } } */ t11 f4(,1); /* { dg-final { scan-file va-opt-7.i "t11 aa;" } } */ t12 f4(2,1); /* { dg-final { scan-file va-opt-7.i "t12 a22a;" } } */ t13 f5(,); /* { dg-final { scan-file va-opt-7.i "t13 aa;" } } */ t14 f5(,1); /* { dg-final { scan-file va-opt-7.i "t14 a 1a;" } } */ t15 f5(2,1); /* { dg-final { scan-file va-opt-7.i "t15 a22 1a;" } } */ t16 f6(,); /* { dg-final { scan-file va-opt-7.i "t16 aa;" } } */ t17 f6(,1); /* { dg-final { scan-file va-opt-7.i "t17 a1 a;" } } */ t18 f6(2,1); /* { dg-final { scan-file va-opt-7.i "t18 a1 22a;" } } */ t19 f7(,); /* { dg-final { scan-file va-opt-7.i "t19 1;" } } */ t20 f7(,1); /* { dg-final { scan-file va-opt-7.i "t20 f0 1;" } } */ t21 f7(2,1); /* { dg-final { scan-file va-opt-7.i "t21 f0 221;" } } */ t22 f8(,); /* { dg-final { scan-file va-opt-7.i "t22 1;" } } */ t23 f8(,1); /* { dg-final { scan-file va-opt-7.i "t23 f0 1;" } } */ t24 f8(2,1); /* { dg-final { scan-file va-opt-7.i "t24 f0 21;" } } */ t25 f9(,); /* { dg-final { scan-file va-opt-7.i "t25 f01;" } } */ t26 f9(,1); /* { dg-final { scan-file va-opt-7.i "t26 f0 11;" } } */ t27 f9(2,1); /* { dg-final { scan-file va-opt-7.i "t27 f02 11;" } } */ t28 f10(,); /* { dg-final { scan-file va-opt-7.i "t28 f01;" } } */ t29 f10(,1); /* { dg-final { scan-file va-opt-7.i "t29 f0 11;" } } */ t30 f10(2,1); /* { dg-final { scan-file va-opt-7.i "t30 f022 11;" } } */ t31 f11(,); /* { dg-final { scan-file va-opt-7.i "t31 b;" } } */ t32 f11(,1); /* { dg-final { scan-file va-opt-7.i "t32 a b;" } } */ t33 f11(2,1); /* { dg-final { scan-file va-opt-7.i "t33 a 22b;" } } */ t34 f12(,); /* { dg-final { scan-file va-opt-7.i "t34 a;" } } */ t35 f12(,1); /* { dg-final { scan-file va-opt-7.i "t35 a b;" } } */ t36 f12(2,1); /* { dg-final { scan-file va-opt-7.i "t36 a22 b;" } } */ t37 f14(,); /* { dg-final { scan-file va-opt-7.i "t37 ac;" } } */ t38 f14(,1); /* { dg-final { scan-file va-opt-7.i "t38 a b c;" } } */ t39 f14(f13(),1); /* { dg-final { scan-file va-opt-7.i "t39 def b ghi;" } } */