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  
     270  blah(){}
     271  
     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  
     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  }