1 static 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 16 TEST(char) 17 #undef T 18 19 #define T signed char 20 TEST2(char, signed) 21 #undef T 22 23 #define T unsigned char 24 TEST2(char, unsigned) 25 #undef T 26 27 #define T short 28 TEST(short) 29 TEST2(int, short) 30 #undef T 31 32 #define T int 33 TEST(int) 34 #undef T 35 36 #define T long 37 TEST(long) 38 TEST2(int, long) 39 #undef T 40 41 #define T long long 42 TEST2(long, long) 43 TEST3(int, long, long) 44 #undef T 45 46 #define T signed short 47 TEST2(short, signed) 48 TEST3(int, short, signed) 49 #undef T 50 51 #define T signed 52 TEST(signed) 53 TEST2(int, signed) 54 #undef T 55 56 #define T signed long 57 TEST2(long, signed) 58 TEST3(int, long, signed) 59 #undef T 60 61 #define T signed long long 62 TEST3(long, long, signed) 63 TEST4(int, long, long, signed) 64 #undef T 65 66 #define T unsigned short 67 TEST2(short, unsigned) 68 TEST3(int, short, unsigned) 69 #undef T 70 71 #define T unsigned 72 TEST(unsigned) 73 TEST2(int, unsigned) 74 #undef T 75 76 #define T unsigned long 77 TEST2(long, unsigned) 78 TEST3(int, long, unsigned) 79 #undef T 80 81 #define T unsigned long long 82 TEST3(long, long, unsigned) 83 TEST4(int, long, long, unsigned) 84 #undef T 85 86 #define T float 87 TEST(float) 88 #undef T 89 90 #define T double 91 TEST(double) 92 #undef T 93 94 #define T long double 95 TEST2(double, long) 96 #undef T 97 } 98 /* 99 * check-name: valid specifier combinations 100 * check-command: sparse $file 101 */ 102