1static void OK(void)
2{
3#define TEST(x) { T a; x *b = &a; }
4#define TEST2(x, y) TEST(x y) TEST(y x)
5#define TEST3(x, y, z) TEST(x y z) TEST(x z y) TEST(y x z) \
6		       TEST(y z x) TEST(z x y) TEST(z y x)
7#define TEST4(x, y, z, w) TEST2(x y, z w) TEST2(x y, w z) \
8			  TEST2(y x, z w) TEST2(y x, w z) \
9			  TEST2(x z, y w) TEST2(x z, w y) \
10			  TEST2(z x, y w) TEST2(z x, w y) \
11			  TEST2(x w, y z) TEST2(x w, z y) \
12			  TEST2(w x, y z) TEST2(w x, z y)
13
14
15#define T char
16TEST(char)
17#undef T
18
19#define T signed char
20TEST2(char, signed)
21#undef T
22
23#define T unsigned char
24TEST2(char, unsigned)
25#undef T
26
27#define T short
28TEST(short)
29TEST2(int, short)
30#undef T
31
32#define T int
33TEST(int)
34#undef T
35
36#define T long
37TEST(long)
38TEST2(int, long)
39#undef T
40
41#define T long long
42TEST2(long, long)
43TEST3(int, long, long)
44#undef T
45
46#define T signed short
47TEST2(short, signed)
48TEST3(int, short, signed)
49#undef T
50
51#define T signed
52TEST(signed)
53TEST2(int, signed)
54#undef T
55
56#define T signed long
57TEST2(long, signed)
58TEST3(int, long, signed)
59#undef T
60
61#define T signed long long
62TEST3(long, long, signed)
63TEST4(int, long, long, signed)
64#undef T
65
66#define T unsigned short
67TEST2(short, unsigned)
68TEST3(int, short, unsigned)
69#undef T
70
71#define T unsigned
72TEST(unsigned)
73TEST2(int, unsigned)
74#undef T
75
76#define T unsigned long
77TEST2(long, unsigned)
78TEST3(int, long, unsigned)
79#undef T
80
81#define T unsigned long long
82TEST3(long, long, unsigned)
83TEST4(int, long, long, unsigned)
84#undef T
85
86#define T float
87TEST(float)
88#undef T
89
90#define T double
91TEST(double)
92#undef T
93
94#define T long double
95TEST2(double, long)
96#undef T
97}
98/*
99 * check-name: valid specifier combinations
100 * check-command: sparse $file
101 */
102