aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/pp/11.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinycc/tests/pp/11.c')
-rw-r--r--tinycc/tests/pp/11.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/tinycc/tests/pp/11.c b/tinycc/tests/pp/11.c
new file mode 100644
index 0000000..5ce868b
--- /dev/null
+++ b/tinycc/tests/pp/11.c
@@ -0,0 +1,36 @@
+#define D1(s, ...) s
+#define D2(s, ...) s D1(__VA_ARGS__)
+#define D3(s, ...) s D2(__VA_ARGS__)
+#define D4(s, ...) s D3(__VA_ARGS__)
+
+D1(a)
+D2(a, b)
+D3(a, b, c)
+D4(a, b, c, d)
+
+x D4(a, b, c, d) y
+x D4(a, b, c) y
+x D4(a, b) y
+x D4(a) y
+x D4() y
+
+#define GNU_COMMA(X,Y...) X,## Y
+
+x GNU_COMMA(A,B,C) y
+x GNU_COMMA(A,B) y
+x GNU_COMMA(A) y
+x GNU_COMMA() y
+
+#define __sun_attr___noreturn__ __attribute__((__noreturn__))
+#define ___sun_attr_inner(__a) __sun_attr_##__a
+#define __sun_attr__(__a) ___sun_attr_inner __a
+#define __NORETURN __sun_attr__((__noreturn__))
+__NORETURN
+#define X(...)
+#define Y(...) 1 __VA_ARGS__ 2
+Y(X X() ())
+
+#define DDD(A, B) D_ ## B ## _D_ ## A
+#define CCC(X, ...) DDD(X, ##__VA_ARGS__)
+/* must be D_B_D_A (not D_B _D_A) */
+CCC(A,B)