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