1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <stdio.h>
22:
23: #define __no_type_class -1
24: #define __void_type_class 0
25: #define __integer_type_class 1
26: #define __char_type_class 2
27: #define __enumeral_type_class 3
28: #define __boolean_type_class 4
29: #define __pointer_type_class 5
30: #define __reference_type_class 6
31: #define __offset_type_class 7
32: #define __real_type_class 8
33: #define __complex_type_class 9
34: #define __function_type_class 10
35: #define __method_type_class 11
36: #define __record_type_class 12
37: #define __union_type_class 13
38: #define __array_type_class 14
39: #define __string_type_class 15
40: #define __set_type_class 16
41: #define __file_type_class 17
42: #define __lang_type_class 18
43:
44:
45: #define TEST(var) \
46: ({ int wrong = (__builtin_classify_type (__##var##_type) \
47: != __##var##_type_class); \
48: printf ("%-15s is %d: %s\n", \
49: ##var, __builtin_classify_type (__##var##_type), \
50: wrong ? "WRONG" : "OK"); \
51: wrong; \
52: })
53:
54:
55: int
56: main (void)
57: {
58: int result = 0;
59: int __integer_type;
60: void *__pointer_type;
61: double __real_type;
62: __complex__ double __complex_type;
63: struct { int a; } __record_type;
64: union { int a; int b; } __union_type;
65:
66: result |= TEST (integer);
67: result |= TEST (pointer);
68: result |= TEST (real);
69: result |= TEST (complex);
70: result |= TEST (record);
71: result |= TEST (union);
72:
73: return result;
74: }