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