1 extern void *malloc(__SIZE_TYPE__);
2 
3 enum tree_code {
4 ERROR_MARK,
5 IDENTIFIER_NODE,
6 OP_IDENTIFIER,
7 TREE_LIST,
8 TREE_VEC,
9 BLOCK,
10 VOID_TYPE,
11 INTEGER_TYPE,
12 REAL_TYPE,
13 COMPLEX_TYPE,
14 VECTOR_TYPE,
15 ENUMERAL_TYPE,
16 BOOLEAN_TYPE,
17 CHAR_TYPE,
18 POINTER_TYPE,
19 OFFSET_TYPE,
20 REFERENCE_TYPE,
21 METHOD_TYPE,
22 FILE_TYPE,
23 ARRAY_TYPE,
24 SET_TYPE,
25 RECORD_TYPE,
26 UNION_TYPE,
27 QUAL_UNION_TYPE,
28 FUNCTION_TYPE,
29 LANG_TYPE,
30 INTEGER_CST,
31 REAL_CST,
32 COMPLEX_CST,
33 STRING_CST,
34 FUNCTION_DECL,
35 LABEL_DECL,
36 CONST_DECL,
37 TYPE_DECL,
38 VAR_DECL,
39 PARM_DECL,
40 RESULT_DECL,
41 FIELD_DECL,
42 NAMESPACE_DECL,
43 COMPONENT_REF,
44 BIT_FIELD_REF,
45 INDIRECT_REF,
46 BUFFER_REF,
47 ARRAY_REF,
48 CONSTRUCTOR,
49 COMPOUND_EXPR,
50 MODIFY_EXPR,
51 INIT_EXPR,
52 TARGET_EXPR,
53 COND_EXPR,
54 BIND_EXPR,
55 CALL_EXPR,
56 METHOD_CALL_EXPR,
57 WITH_CLEANUP_EXPR,
58 CLEANUP_POINT_EXPR,
59 PLACEHOLDER_EXPR,
60 WITH_RECORD_EXPR,
61 PLUS_EXPR,
62 MINUS_EXPR,
63 MULT_EXPR,
64 TRUNC_DIV_EXPR,
65 CEIL_DIV_EXPR,
66 FLOOR_DIV_EXPR,
67 ROUND_DIV_EXPR,
68 TRUNC_MOD_EXPR,
69 CEIL_MOD_EXPR,
70 FLOOR_MOD_EXPR,
71 ROUND_MOD_EXPR,
72 RDIV_EXPR,
73 EXACT_DIV_EXPR,
74 FIX_TRUNC_EXPR,
75 FIX_CEIL_EXPR,
76 FIX_FLOOR_EXPR,
77 FIX_ROUND_EXPR,
78 FLOAT_EXPR,
79 EXPON_EXPR,
80 NEGATE_EXPR,
81 MIN_EXPR,
82 MAX_EXPR,
83 ABS_EXPR,
84 FFS_EXPR,
85 LSHIFT_EXPR,
86 RSHIFT_EXPR,
87 LROTATE_EXPR,
88 RROTATE_EXPR,
89 BIT_IOR_EXPR,
90 BIT_XOR_EXPR,
91 BIT_AND_EXPR,
92 BIT_ANDTC_EXPR,
93 BIT_NOT_EXPR,
94 TRUTH_ANDIF_EXPR,
95 TRUTH_ORIF_EXPR,
96 TRUTH_AND_EXPR,
97 TRUTH_OR_EXPR,
98 TRUTH_XOR_EXPR,
99 TRUTH_NOT_EXPR,
100 LT_EXPR,
101 LE_EXPR,
102 GT_EXPR,
103 GE_EXPR,
104 EQ_EXPR,
105 NE_EXPR,
106 UNORDERED_EXPR,
107 ORDERED_EXPR,
108 UNLT_EXPR,
109 UNLE_EXPR,
110 UNGT_EXPR,
111 UNGE_EXPR,
112 UNEQ_EXPR,
113 IN_EXPR,
114 SET_LE_EXPR,
115 CARD_EXPR,
116 RANGE_EXPR,
117 CONVERT_EXPR,
118 NOP_EXPR,
119 NON_LVALUE_EXPR,
120 SAVE_EXPR,
121 UNSAVE_EXPR,
122 RTL_EXPR,
123 ADDR_EXPR,
124 REFERENCE_EXPR,
125 ENTRY_VALUE_EXPR,
126 COMPLEX_EXPR,
127 CONJ_EXPR,
128 REALPART_EXPR,
129 IMAGPART_EXPR,
130 PREDECREMENT_EXPR,
131 PREINCREMENT_EXPR,
132 POSTDECREMENT_EXPR,
133 POSTINCREMENT_EXPR,
134 VA_ARG_EXPR,
135 TRY_CATCH_EXPR,
136 TRY_FINALLY_EXPR,
137 GOTO_SUBROUTINE_EXPR,
138 POPDHC_EXPR,
139 POPDCC_EXPR,
140 LABEL_EXPR,
141 GOTO_EXPR,
142 RETURN_EXPR,
143 EXIT_EXPR,
144 LOOP_EXPR,
145 LABELED_BLOCK_EXPR,
146 EXIT_BLOCK_EXPR,
147 EXPR_WITH_FILE_LOCATION,
148 SWITCH_EXPR,
149   LAST_AND_UNUSED_TREE_CODE
150 };
151 typedef union tree_node *tree;
152 struct tree_common
153 {
154   union tree_node *chain;
155   union tree_node *type;
156   enum tree_code code : 8;
157   unsigned side_effects_flag : 1;
158   unsigned constant_flag : 1;
159   unsigned permanent_flag : 1;
160   unsigned addressable_flag : 1;
161   unsigned volatile_flag : 1;
162   unsigned readonly_flag : 1;
163   unsigned unsigned_flag : 1;
164   unsigned asm_written_flag: 1;
165   unsigned used_flag : 1;
166   unsigned nothrow_flag : 1;
167   unsigned static_flag : 1;
168   unsigned public_flag : 1;
169   unsigned private_flag : 1;
170   unsigned protected_flag : 1;
171   unsigned bounded_flag : 1;
172   unsigned lang_flag_0 : 1;
173   unsigned lang_flag_1 : 1;
174   unsigned lang_flag_2 : 1;
175   unsigned lang_flag_3 : 1;
176   unsigned lang_flag_4 : 1;
177   unsigned lang_flag_5 : 1;
178   unsigned lang_flag_6 : 1;
179 };
180 union tree_node
181 {
182   struct tree_common common;
183  };
184 enum c_tree_code {
185   C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
186 SRCLOC,
187 SIZEOF_EXPR,
188 ARROW_EXPR,
189 ALIGNOF_EXPR,
190 EXPR_STMT,
191 COMPOUND_STMT,
192 DECL_STMT,
193 IF_STMT,
194 FOR_STMT,
195 WHILE_STMT,
196 DO_STMT,
197 RETURN_STMT,
198 BREAK_STMT,
199 CONTINUE_STMT,
200 SWITCH_STMT,
201 GOTO_STMT,
202 LABEL_STMT,
203 ASM_STMT,
204 SCOPE_STMT,
205 CASE_LABEL,
206 STMT_EXPR,
207   LAST_C_TREE_CODE
208 };
209 enum cplus_tree_code {
210   CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE,
211 OFFSET_REF,
212 PTRMEM_CST,
213 NEW_EXPR,
214 VEC_NEW_EXPR,
215 DELETE_EXPR,
216 VEC_DELETE_EXPR,
217 SCOPE_REF,
218 MEMBER_REF,
219 TYPE_EXPR,
220 AGGR_INIT_EXPR,
221 THROW_EXPR,
222 EMPTY_CLASS_EXPR,
223 TEMPLATE_DECL,
224 TEMPLATE_PARM_INDEX,
225 TEMPLATE_TYPE_PARM,
226 TEMPLATE_TEMPLATE_PARM,
227 BOUND_TEMPLATE_TEMPLATE_PARM,
228 TYPENAME_TYPE,
229 TYPEOF_TYPE,
230 USING_DECL,
231 DEFAULT_ARG,
232 TEMPLATE_ID_EXPR,
233 CPLUS_BINDING,
234 OVERLOAD,
235 WRAPPER,
236 LOOKUP_EXPR,
237 FUNCTION_NAME,
238 MODOP_EXPR,
239 CAST_EXPR,
240 REINTERPRET_CAST_EXPR,
241 CONST_CAST_EXPR,
242 STATIC_CAST_EXPR,
243 DYNAMIC_CAST_EXPR,
244 DOTSTAR_EXPR,
245 TYPEID_EXPR,
246 PSEUDO_DTOR_EXPR,
247 SUBOBJECT,
248 CTOR_STMT,
249 CLEANUP_STMT,
250 START_CATCH_STMT,
251 CTOR_INITIALIZER,
252 RETURN_INIT,
253 TRY_BLOCK,
254 HANDLER,
255 TAG_DEFN,
256 IDENTITY_CONV,
257 LVALUE_CONV,
258 QUAL_CONV,
259 STD_CONV,
260 PTR_CONV,
261 PMEM_CONV,
262 BASE_CONV,
263 REF_BIND,
264 USER_CONV,
265 AMBIG_CONV,
266 RVALUE_CONV,
267   LAST_CPLUS_TREE_CODE
268 };
269 
blah()270 blah(){}
271 
convert_like_real(convs)272 convert_like_real (convs)
273      tree convs;
274 {
275   switch (((enum tree_code) (convs)->common.code))
276     {
277     case AMBIG_CONV:
278       return blah();
279     default:
280       break;
281     };
282    abort ();
283 }
284 
main()285 main()
286 {
287   tree convs = (void *)malloc (sizeof (struct tree_common));;
288 
289   convs->common.code = AMBIG_CONV;
290   convert_like_real (convs);
291   exit (0);
292 }
293