1 /* { dg-do run } */
2 /* { dg-options "-std=c99" } */
3 
4 /* First two tests sourced from a bug report of Thomas Pornin.
5    Varargs test source Jamie Lokier.
6    All adapted for the testsuite by Neil Booth, Oct 2000.  */
7 
8 /* Tests various macro abuse is correctly expanded.  */
9 static int d = 4;
10 #define c(x) d
11 #define d(x) c(2)
12 
13 #if 0
14 /* This macro chain above sucks up the whole file once it starts, so
15    I've commented it out.  The example is left for idle amusement :-) */
16 #define a(x) b(
17 #define b(x) a(
18 #endif
19 
20 #define apply(...)   apply2 (__VA_ARGS__)
21 #define half(x)      ((x) / 2)
22 #define apply2(f,x)  f (x)
23 
24 extern void abort (void);
25 extern void exit (int);
26 
main()27 int main()
28 {
29   /* Expands to c(2) then d.  */
30   if (c(c)(c) != 4)
31     abort ();
32 
33   if (apply (half, 200) != 100)
34     abort ();
35 
36   exit (0);
37 }
38