blob: 06cdb2534a3b48f19fd862e32dfedc4c5870536c [file] [log] [blame]
/* 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;" } } */