specifiers1.c 1.6 KB

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