| 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 $file |
| */ |