aboutsummaryrefslogtreecommitdiff
blob: 86db45dcbbf47980f1f2557e414dafddc4cb86b2 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
static void OK(void)
{
#define TEST(x) { T a; x *b = &a; }
#define TEST2(x, y) TEST(x y) TEST(y x)
#define TEST3(x, y, z) TEST(x y z) TEST(x z y) TEST(y x z) \
		       TEST(y z x) TEST(z x y) TEST(z y x)
#define TEST4(x, y, z, w) TEST2(x y, z w) TEST2(x y, w z) \
			  TEST2(y x, z w) TEST2(y x, w z) \
			  TEST2(x z, y w) TEST2(x z, w y) \
			  TEST2(z x, y w) TEST2(z x, w y) \
			  TEST2(x w, y z) TEST2(x w, z y) \
			  TEST2(w x, y z) TEST2(w x, z y)


#define T char
TEST(char)
#undef T

#define T signed char
TEST2(char, signed)
#undef T

#define T unsigned char
TEST2(char, unsigned)
#undef T

#define T short
TEST(short)
TEST2(int, short)
#undef T

#define T int
TEST(int)
#undef T

#define T long
TEST(long)
TEST2(int, long)
#undef T

#define T long long
TEST2(long, long)
TEST3(int, long, long)
#undef T

#define T signed short
TEST2(short, signed)
TEST3(int, short, signed)
#undef T

#define T signed
TEST(signed)
TEST2(int, signed)
#undef T

#define T signed long
TEST2(long, signed)
TEST3(int, long, signed)
#undef T

#define T signed long long
TEST3(long, long, signed)
TEST4(int, long, long, signed)
#undef T

#define T unsigned short
TEST2(short, unsigned)
TEST3(int, short, unsigned)
#undef T

#define T unsigned
TEST(unsigned)
TEST2(int, unsigned)
#undef T

#define T unsigned long
TEST2(long, unsigned)
TEST3(int, long, unsigned)
#undef T

#define T unsigned long long
TEST3(long, long, unsigned)
TEST4(int, long, long, unsigned)
#undef T

#define T float
TEST(float)
#undef T

#define T double
TEST(double)
#undef T

#define T long double
TEST2(double, long)
#undef T
}
/*
 * check-name: valid specifier combinations
 * check-command: sparse -Wall $file
 */