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