| extern void *malloc(__SIZE_TYPE__); |
| |
| enum tree_code { |
| ERROR_MARK, |
| IDENTIFIER_NODE, |
| OP_IDENTIFIER, |
| TREE_LIST, |
| TREE_VEC, |
| BLOCK, |
| VOID_TYPE, |
| INTEGER_TYPE, |
| REAL_TYPE, |
| COMPLEX_TYPE, |
| VECTOR_TYPE, |
| ENUMERAL_TYPE, |
| BOOLEAN_TYPE, |
| CHAR_TYPE, |
| POINTER_TYPE, |
| OFFSET_TYPE, |
| REFERENCE_TYPE, |
| METHOD_TYPE, |
| FILE_TYPE, |
| ARRAY_TYPE, |
| SET_TYPE, |
| RECORD_TYPE, |
| UNION_TYPE, |
| QUAL_UNION_TYPE, |
| FUNCTION_TYPE, |
| LANG_TYPE, |
| INTEGER_CST, |
| REAL_CST, |
| COMPLEX_CST, |
| STRING_CST, |
| FUNCTION_DECL, |
| LABEL_DECL, |
| CONST_DECL, |
| TYPE_DECL, |
| VAR_DECL, |
| PARM_DECL, |
| RESULT_DECL, |
| FIELD_DECL, |
| NAMESPACE_DECL, |
| COMPONENT_REF, |
| BIT_FIELD_REF, |
| INDIRECT_REF, |
| BUFFER_REF, |
| ARRAY_REF, |
| CONSTRUCTOR, |
| COMPOUND_EXPR, |
| MODIFY_EXPR, |
| INIT_EXPR, |
| TARGET_EXPR, |
| COND_EXPR, |
| BIND_EXPR, |
| CALL_EXPR, |
| METHOD_CALL_EXPR, |
| WITH_CLEANUP_EXPR, |
| CLEANUP_POINT_EXPR, |
| PLACEHOLDER_EXPR, |
| WITH_RECORD_EXPR, |
| PLUS_EXPR, |
| MINUS_EXPR, |
| MULT_EXPR, |
| TRUNC_DIV_EXPR, |
| CEIL_DIV_EXPR, |
| FLOOR_DIV_EXPR, |
| ROUND_DIV_EXPR, |
| TRUNC_MOD_EXPR, |
| CEIL_MOD_EXPR, |
| FLOOR_MOD_EXPR, |
| ROUND_MOD_EXPR, |
| RDIV_EXPR, |
| EXACT_DIV_EXPR, |
| FIX_TRUNC_EXPR, |
| FIX_CEIL_EXPR, |
| FIX_FLOOR_EXPR, |
| FIX_ROUND_EXPR, |
| FLOAT_EXPR, |
| EXPON_EXPR, |
| NEGATE_EXPR, |
| MIN_EXPR, |
| MAX_EXPR, |
| ABS_EXPR, |
| FFS_EXPR, |
| LSHIFT_EXPR, |
| RSHIFT_EXPR, |
| LROTATE_EXPR, |
| RROTATE_EXPR, |
| BIT_IOR_EXPR, |
| BIT_XOR_EXPR, |
| BIT_AND_EXPR, |
| BIT_ANDTC_EXPR, |
| BIT_NOT_EXPR, |
| TRUTH_ANDIF_EXPR, |
| TRUTH_ORIF_EXPR, |
| TRUTH_AND_EXPR, |
| TRUTH_OR_EXPR, |
| TRUTH_XOR_EXPR, |
| TRUTH_NOT_EXPR, |
| LT_EXPR, |
| LE_EXPR, |
| GT_EXPR, |
| GE_EXPR, |
| EQ_EXPR, |
| NE_EXPR, |
| UNORDERED_EXPR, |
| ORDERED_EXPR, |
| UNLT_EXPR, |
| UNLE_EXPR, |
| UNGT_EXPR, |
| UNGE_EXPR, |
| UNEQ_EXPR, |
| IN_EXPR, |
| SET_LE_EXPR, |
| CARD_EXPR, |
| RANGE_EXPR, |
| CONVERT_EXPR, |
| NOP_EXPR, |
| NON_LVALUE_EXPR, |
| SAVE_EXPR, |
| UNSAVE_EXPR, |
| RTL_EXPR, |
| ADDR_EXPR, |
| REFERENCE_EXPR, |
| ENTRY_VALUE_EXPR, |
| COMPLEX_EXPR, |
| CONJ_EXPR, |
| REALPART_EXPR, |
| IMAGPART_EXPR, |
| PREDECREMENT_EXPR, |
| PREINCREMENT_EXPR, |
| POSTDECREMENT_EXPR, |
| POSTINCREMENT_EXPR, |
| VA_ARG_EXPR, |
| TRY_CATCH_EXPR, |
| TRY_FINALLY_EXPR, |
| GOTO_SUBROUTINE_EXPR, |
| POPDHC_EXPR, |
| POPDCC_EXPR, |
| LABEL_EXPR, |
| GOTO_EXPR, |
| RETURN_EXPR, |
| EXIT_EXPR, |
| LOOP_EXPR, |
| LABELED_BLOCK_EXPR, |
| EXIT_BLOCK_EXPR, |
| EXPR_WITH_FILE_LOCATION, |
| SWITCH_EXPR, |
| LAST_AND_UNUSED_TREE_CODE |
| }; |
| typedef union tree_node *tree; |
| struct tree_common |
| { |
| union tree_node *chain; |
| union tree_node *type; |
| enum tree_code code : 8; |
| unsigned side_effects_flag : 1; |
| unsigned constant_flag : 1; |
| unsigned permanent_flag : 1; |
| unsigned addressable_flag : 1; |
| unsigned volatile_flag : 1; |
| unsigned readonly_flag : 1; |
| unsigned unsigned_flag : 1; |
| unsigned asm_written_flag: 1; |
| unsigned used_flag : 1; |
| unsigned nothrow_flag : 1; |
| unsigned static_flag : 1; |
| unsigned public_flag : 1; |
| unsigned private_flag : 1; |
| unsigned protected_flag : 1; |
| unsigned bounded_flag : 1; |
| unsigned lang_flag_0 : 1; |
| unsigned lang_flag_1 : 1; |
| unsigned lang_flag_2 : 1; |
| unsigned lang_flag_3 : 1; |
| unsigned lang_flag_4 : 1; |
| unsigned lang_flag_5 : 1; |
| unsigned lang_flag_6 : 1; |
| }; |
| union tree_node |
| { |
| struct tree_common common; |
| }; |
| enum c_tree_code { |
| C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE, |
| SRCLOC, |
| SIZEOF_EXPR, |
| ARROW_EXPR, |
| ALIGNOF_EXPR, |
| EXPR_STMT, |
| COMPOUND_STMT, |
| DECL_STMT, |
| IF_STMT, |
| FOR_STMT, |
| WHILE_STMT, |
| DO_STMT, |
| RETURN_STMT, |
| BREAK_STMT, |
| CONTINUE_STMT, |
| SWITCH_STMT, |
| GOTO_STMT, |
| LABEL_STMT, |
| ASM_STMT, |
| SCOPE_STMT, |
| CASE_LABEL, |
| STMT_EXPR, |
| LAST_C_TREE_CODE |
| }; |
| enum cplus_tree_code { |
| CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE, |
| OFFSET_REF, |
| PTRMEM_CST, |
| NEW_EXPR, |
| VEC_NEW_EXPR, |
| DELETE_EXPR, |
| VEC_DELETE_EXPR, |
| SCOPE_REF, |
| MEMBER_REF, |
| TYPE_EXPR, |
| AGGR_INIT_EXPR, |
| THROW_EXPR, |
| EMPTY_CLASS_EXPR, |
| TEMPLATE_DECL, |
| TEMPLATE_PARM_INDEX, |
| TEMPLATE_TYPE_PARM, |
| TEMPLATE_TEMPLATE_PARM, |
| BOUND_TEMPLATE_TEMPLATE_PARM, |
| TYPENAME_TYPE, |
| TYPEOF_TYPE, |
| USING_DECL, |
| DEFAULT_ARG, |
| TEMPLATE_ID_EXPR, |
| CPLUS_BINDING, |
| OVERLOAD, |
| WRAPPER, |
| LOOKUP_EXPR, |
| FUNCTION_NAME, |
| MODOP_EXPR, |
| CAST_EXPR, |
| REINTERPRET_CAST_EXPR, |
| CONST_CAST_EXPR, |
| STATIC_CAST_EXPR, |
| DYNAMIC_CAST_EXPR, |
| DOTSTAR_EXPR, |
| TYPEID_EXPR, |
| PSEUDO_DTOR_EXPR, |
| SUBOBJECT, |
| CTOR_STMT, |
| CLEANUP_STMT, |
| START_CATCH_STMT, |
| CTOR_INITIALIZER, |
| RETURN_INIT, |
| TRY_BLOCK, |
| HANDLER, |
| TAG_DEFN, |
| IDENTITY_CONV, |
| LVALUE_CONV, |
| QUAL_CONV, |
| STD_CONV, |
| PTR_CONV, |
| PMEM_CONV, |
| BASE_CONV, |
| REF_BIND, |
| USER_CONV, |
| AMBIG_CONV, |
| RVALUE_CONV, |
| LAST_CPLUS_TREE_CODE |
| }; |
| |
| blah(){} |
| |
| convert_like_real (convs) |
| tree convs; |
| { |
| switch (((enum tree_code) (convs)->common.code)) |
| { |
| case AMBIG_CONV: |
| return blah(); |
| default: |
| break; |
| }; |
| abort (); |
| } |
| |
| main() |
| { |
| tree convs = (void *)malloc (sizeof (struct tree_common));; |
| |
| convs->common.code = AMBIG_CONV; |
| convert_like_real (convs); |
| exit (0); |
| } |