aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/class.c
AgeCommit message (Collapse)AuthorFilesLines
2000-04-04Correct many new ABI issues regarding vbase and vcall offset layout.Mark Mitchell1-359/+506
Correct many new ABI issues regarding vbase and vcall offset layout. * cp-tree.h (BINFO_VTABLE): Document. (struct lang_type): Tweak formatting. (BINFO_PRIMARY_BINFO): Add to documentation. (CLASSTYPE_VSIZE): Fix typo in comment. (CLASSTYPE_VBASECLASSES): Update documentation. (BINFO_VBASE_MARKED): Remove. (SET_BINFO_VBASE_MARKED): Likewise. (CLEAR_BINFO_VBASE_MARKED): Likewise. (BINFO_FIELDS_MARKED): Remove. (SET_BINFO_FIELDS_MARKED): Likewise. (CLEAR_BINFO_FIELDS_MARKED): Likewise. (enum access_kind): New enumeration. (num_extra_vtbl_entries): Remove declaration. (size_extra_vtbl_entries): Likewise. (get_vtbl_decl_for_binfo): New function. (dfs_vbase_unmark): Remove declaration. (mark_primary_bases): Likewise. * class.c (SAME_FN): Remove. (struct vcall_offset_data_s): Move definition. (build_vbase_pointer): Use `build', not `build_binary_op', to access the vbase pointer under the new ABI. (build_vtable_entry_ref): Use get_vtbl_decl_for_binfo. (build_primary_vtable): Likewise. (dfs_mark_primary_bases): Move here from search.c. (mark_primary_bases): Likewise. (determine_primary_bases): Under the new ABI, don't make a base class a primary base just because we don't yet have any virtual functions. (layout_vtable_decl): Use get_vtbl_decl_for_binfo. (num_vfun_entries): Remove. (dfs_count_virtuals): Likewise. (num_extra_vtbl_entries): Likewise. (size_extra_vtbl_entries): Likewise. (layout_virtual_bases): Iterate in inheritance graph order under the new ABI. (finish_struct_1): Use TYPE_VFIELD, not CLASSTYPE_VSIZE, to indicate that a vfield is present. (init_class_processing): Initialize access_public_node, etc., from ak_public, etc. (get_vtbl_decl_for_binfo): New function. (dump_class_hierarchy_r): Likewise. (dump_class_hierarchy): Use it. (finish_vtbls): Build the vtbls in inheritance graph order. (dfs_finish_vtbls): Adjust call to build_vtbl_initializer. (initialize_vtable): Use get_vtbl_decl_for_binfo. (accumulate_vtbl_inits): Add comments explaining why a pre-order walk is required. (dfs_accumulate_vtbl_inits): Set BINFO_VTABLE to the location where the vptr points, even for primary vtables. (build_vtbl_initializer): Adjust handling of vbase and vcall offsets. (build_vcall_and_vbase_vtable_entries): New function. (dfs_build_vbase_offset_vtbl_entries): Remove. (build_vbase_offset_vtbl_entries): Reimplement. (dfs_build_vcall_offset_vtbl_entries): Don't include virtuals that were already handled in a primary base class vtable. (build_vcall_offset_vtbl_entries): Adjust. (build_rtti_vtbl_entries): Adjust. * decl2.c (output_vtable_inherit): Use get_vtbl_decl_for_binfo. * init.c (expand_virtual_init): Simplify. * repo.c (repo_get_id): Use get_vtbl_decl_for_binfo. * rtti.c (create_pseudo_type_info): Adjust calculation of vptr. * search.c (BINFO_ACCESS): New macro. (SET_BINFO_ACCESS): Likewise. (dfs_access_in_type): Manipulate access_kinds, not access nodes. (access_in_type): Likewise. (dfs_accessible_p): Likewise. (protected_accessible_p): Likewise. (lookup_fnfields_1): Adjust documentation. (dfs_mark_primary_bases): Move to class.c (mark_primary_bases): Likewise. (dfs_vbase_unmark): Remove. (virtual_context): Use BINFO_FOR_VBASE. (dfs_get_vbase_types): Simplify. (dfs_build_inheritance_graph_order): New function. (get_vbase_types): Use it. * tree.c (debug_binfo): Use get_vtbl_decl_for_binfo. * tinfo.cc (get_vbase_offset): New function. (__vmi_class_type_info::do_find_public_src): Use it. (__vmi_class_type_info::do_dyncast): Likewise. (__vmi_class_type_info::do_upcast): Likewise. From-SVN: r32905
2000-03-29class.c: Reorganize to put virtual function table initialization machinery ↵Mark Mitchell1-579/+581
at the end of... * class.c: Reorganize to put virtual function table initialization machinery at the end of the file. From-SVN: r32798
2000-03-28class.c (finish_struct): Use bitsize_zero_node.Jason Merrill1-1/+1
* class.c (finish_struct): Use bitsize_zero_node. * pt.c (instantiate_class_template): Likewise. From-SVN: r32794
2000-03-28Put RTTI entries at negative offsets in new ABI.Mark Mitchell1-230/+170
* class.c (dfs_build_vbase_offset_vtbl_entries): Put the first vbase offset at index -3, not -1. (build_vtabe_offset_vtbl_entries): Use unmarked_vtable_pathp, not dfs_vtable_path_unmarked_real_bases_queue_p to walk bases. (dfs_build_vcall_offset_vtbl_entries): Don't use skip_rtti_stuff. (build_rtti_vtbl_entries): New function. (set_rtti_entry): Remove. (build_primary_vtable): Don't use it. (build_secondary_vtable): Likewise. (start_vtable): Remove. (first_vfun_index): New function. (set_vindex): Likewise. (add_virtual_function): Don't call start_vtable. Do call set_vindex. (set_primary_base): Rename parameter. (determine_primary_base): Likewise. (num_vfun_entries): Don't use skip_rtti_stuff. (num_extra_vtbl_entries): Include RTTI information. (build_vtbl_initializer): Use build_rtti_vtbl_entries. (skip_rtti_stuff): Remove. (dfs_modify_vtables): Don't use it. (modify_all_vtables): Don't use start_vtable. Do use set_vindex. (layout_nonempty_base_or_field): Update size handling. (create_vtable_ptr): Tweak. (layout_class_type): Adjust parameter names. (finish_struct_1): Simplify. * cp-tree.h (CLASSTYPE_VSIZE): Tweak documentation. (skip_rtti_stuff): Remove. (first_vfun_index): New function. (dfs_vtable_path_unmarked_real_bases_queue_p): Remove. (dfs_vtable_path_marked_real_bases_queue_p): Remove. (marked_vtable_pathp): Declare. (unmarked_vtable_pathp): Likewise. * error.c (dump_expr): Use first_vfun_index to calculate vtable offsets. * rtti.c (build_headof): Look for RTTI at negative offsets. (get_tinfo_decl_dynamic): Likewise. (tinfo_base_init): Don't take the address of the TINFO_VTABLE_DECL here. (create_pseudo_type_info): Do it here instead. Adjust so that vptr points at first virtual function. * search.c (marked_vtable_pathp): Make it global. (unmarked_vtable_pathp): Likewise. (dfs_vtable_path_unmarked_real_bases_queue_p): Remove. (dfs_vtable_path_marked_real_bases_queue_p): Likewise. (dfs_get_pure_virtuals): Don't use skip_rtti_stuff. (get_pure_virtuals): Likewise. (expand_upcast_fixups): Likewise. * tree.c (debug_binfo): Likewise. * tinfo.cc (__dynamic_cast): Look for vtable_prefix at appropriate negative offset. From-SVN: r32787
2000-03-26c-convert.c (convert): Return if output or input type is ERROR_MARK.Richard Kenner1-6/+2
* c-convert.c (convert): Return if output or input type is ERROR_MARK. * c-decl.c (duplicate_decls): Only look at DECL_BUILT_IN_NONANSI and DECL_INLINE if FUNCTION_DECL. (pushdecl, redeclaration_error_message): Likewise, for DECL_INLINE. (store_parm_decls): Check for type of PARM_DECL being ERROR_MARK. Use DECL_WEAK, not DECL_RESULT, to flag for already seen. (combine_parm_decls): Likewise. * ggc-common.c (gcc_mark_tree_children, case 'd'): Use DECL_RESULT_FLD. * print-tree.c (print_node): Likewise. Only test DECL_PACKED, DECL_INLINE, DECL_BIT_FIELD, and DECL_TRANSPARENT_UNION on proper decl types. Properly handly DECL_INCOMING_RTL and DECL_SAVED_INSNS. * stor-layout.c (layout_decl): Only check DECL_PACKED and DECL_BIT_FIELD of FIELD_DECL. * tree.h (DECL_RESULT_FLD): New macro. * cp/class.c (check_field_decl): Fix typo. (build_vtbl_or_vbase_field): Don't clear DECL_SAVED_INSNS. (check_methods): Likewise. (check_field_decls): Likewise. Use DECL_CONTEXT, not DECL_FIELD_CONTEXT. * cp-tree.h (DECL_SHADOWED_FOR_VAR, DECL_TEMPLATE_RESULT): Use DECL_RESULT_FLD, not DECL_RESULT. * cp/decl.c (xref_tag): Use DECL_TEMPLATE_RESULT. * cp/lex.c (identifier_type): Likewise. * cp/pt.c (determine_specialization, lookup_template_class): Likewise. (tsubst_friend_function, tsubst_decl, instantiate_template): Likewise. (resolve_overloaded_unification, more_specialized): Likewise. * cp/semantics.c (finish_member_declaration): Likewise. * cp/typeck.c (build_x_function_call): Likewise. From-SVN: r32759
2000-03-26class.c (layout_empty_base): Handle empty bases with non-byte alignment.Mark Mitchell1-24/+31
* class.c (layout_empty_base): Handle empty bases with non-byte alignment. (build_base_field): Likewise. (layout_virtual_bases): Likewise. * class.c (finish_struct_1): Fix typo in this change: Sat Mar 25 09:12:10 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> From-SVN: r32750
2000-03-25* Rework fields used to describe positions of bitfields andRichard Kenner1-79/+55
modify sizes to be unsigned and use HOST_WIDE_INT. * alias.c (reg_known_value_size): Now unsigned. * c-typeck.c (build_unary_op, case ADDR_EXPR): Use byte_position. (really_start_incremental_init): Use bitsize_zero_node. (push_init_level, pop_init_level, output_init_element): Likewise. Use bitsize_unit_node and bitsize_one_node. (output_pending_init_elements, process_init_element): Likewise. * combine.c (combine_max_regno, reg_sign_bit_copies): Now unsigned. (make_extraction): Position and length HOST_WIDE_INT and unsigned HOST_WIDE_INT, respectively. (get_pos_from_mask): Passed in value is unsigned HOST_WIDE_INT. (num_sign_bit_copies): Returns unsigned. BITWIDTH now unsigned; rework arithmetic. Remove recursive call from arg to MAX. (combine_instructions, init_reg_last_arrays): NREGS now unsigned. (setup_incoming_promotions, can_combine_p, try_combine, simplify_set): REGNO now unsigned. (set_nonzero_bit_and_sign_copies): NUM now unsigned. (find_split_point, expand_compound_operation, make_extraction): LEN now unsigned HOST_WIDE_INT, POS now HOST_WIDE_INT. (make_field_assignment): Likewise. (combine_simplify_rtx): Add cast. (expand_compound_operation): MODEWIDTH now unsigned; rework arithmetic. (force_to_mode): WIDTH now unsigned; add cast. (if_then_else_cond): SIZE now unsigned. (nonzero_bits): MODE_WIDTH, RESULT_WIDTH, and WIDTH now unsigned. (extended_count): Now returns unsigned. (simplify_shift_const): COUNT unsigned; arg is now INPUT_COUNT. Add SIGNED_COUNT variable; MODE_WORDS and FIRST_COUNT now unsigned. (simplify_comparison): MODE_WIDTH now unsigned. (update_table_tick): REGNO and ENDREGNO now unsigned; new var R. (mark_used_regs_combine): Likewise; rework arithmetic. (record_value_for_reg): REGNO, ENDREGNO, and I now unsigned. (record_dead_and_set_regs, reg_dead_at_p, distribute_notes): Likewise. (record_promoted_value): REGNO now unsigned. (get_last_value_validate): REGNO, ENDREGNO, and J now unsigned. (get_last_value): REGNO now unsigned. (use_crosses_set_p): REGNO and ENDREGNO now unsigned. (reg_dead_regno, reg_dead_endregno): Now unsigned. (remove_death): Arg REGNO now unsigned. (move_deaths): REGNO, DEADREGNO, DEADEND, OUREND, and I now unsigned. (reg_bitfield_target_p): REGNO, REGNO, ENDREGNO, and ENDTREGNO now unsigned. * convert.c (convert_to_integer): INPREC and OUTPREC now unsigned. * cse.c (struct qty_table_elem): FIRST_REG and LAST_REG now unsigned. (struct cse_reg_info): REGNO now unsigned. (cached_regno): Now unsigned. (REGNO_QTY_VALID_P): Add cast. (make_new_qty, make_regs_eqv, delete_reg_eqiv): Regno args unsigned. (remove_invalid_regs): Likewise. (remove_invalid_subreg_refs): Likewise; arg WORD also unsigned as are variables END and I. (get_cse_reg_info, insert): Likewise. (mention_regs, invalidate_for_call): REGNO, ENDREGNO, and I unsigned. (canon_hash): Likewise. (insert_regs, lookup_for_remove): REGNO now unsigned. (invalidate): REGNO, ENDREGNO, TREGNO, and TENDREGNO now unsigned. New variable RN. * dbxout.c (dbxout_parms, dbxout_reg_parms): Don't check for REGNO < 0. * dwarf2out.c (dwarf2ou_frame_debug_expr): Remove cast. * emit-rtl.c (subreg_realpart_p): Add cast. (operand_subword): Arg I is now unsigned as is var PARTWORDS. (operand_subword_force): Arg I is now unsigned. * except.c (eh_regs): Variable I is now unsigned. * explow.c (hard_function_value): BYTES is unsigned HOST_WIDE_INT. * expmed.c (store_fixed_bit_field): Position is HOST_WIDE_INT; length is unsigned HOST_WIDE_INT; likewise for internal variables. (store_split_bit_field, extract_fixed_bit_field): Likewise. (extract_split_bit_field, store_bit_field, extract_bit_field): Likewise. * expr.c (store_constructor_fields, store_constructor, store_field): Positions are HOST_WIDE_INT and lengths are unsigned HOST_WIDE_INT. (expand_assignment, expand_expr, expand_expr_unaligned): Likewise. (do_jump): Likewise. (move_by_pieces, move_by_pieces_ninsns, clear_by_pieces): MAX_SIZE is now unsigned. (emit_group_load): BYTEPOS is HOST_WIDE_INT; BYTELEN is unsigned. (emit_group_store): Likewise. (emit_move_insn): I now unsigned. (store_constructor): Use host_integerp, tree_low_cst, and bitsize_unit_node. (get_inner_reference): Return bitpos and bitsize as HOST_WIDE_INT. Rework all calculations to use trees and new fields. * expr.h (promoted_input_arg): Regno now unsigned. (store_bit_field, extract_bit_field): Adjust types of pos and size. (mark_seen_cases): Arg is HOST_WIDE_INT. * flow.c (verify_wide_reg_1): REGNO now unsigned. * fold-const.c (decode_field_reference): Size and pos HOST_WIDE_INT; precisions and alignments are unsigned. (optimize_bit_field_compare, fold_truthop): Likewise. (int_const_binop): Adjust threshold for size_int_type_wide call. (fold_convert): Likewise. (size_int_type_wide): Make table larger and fix thinko that only had half of table used. (all_ones_mask_p, fold): Precisions are unsigned. * function.c (put_reg_info_stack): REGNO is unsigned. (instantiate_decl): Size is HOST_WIDE_INT. (instantiate_virtual_regs): I is unsigned. (assign_parms): REGNO, REGNOI, and REGNOR are unsigned. (promoted_input_arg): REGNO is unsigned. * function.h (struct function): x_max_parm_reg is now unsigned. * gcse.c (max_gcse_regno): Now unsigned. (struct null_pointer_info): min_reg and max_reg now unsigned. (lookup_set, next_set): REGNO arg now unsigned. (compute_hash_table): REGNO and I now unsigned. (handle_avail_expr): regnum_for_replacing now unsigned. (cprop_insn): REGNO now unsigned. (delete_null_pointer_checks_1): BLOCK_REG now pointer to unsigned. * ggc-common.c (ggc_mark_tree_children, case FIELD_DECL): New case. * global.c (set_preference): SRC_REGNO, DEST_REGNO, and I now unsigned. * hard-reg-set.h (reg_class_size): Now unsigned. * integrate.c (mark_stores): LAST_REG and I now unsigned; new UREGNO. * jump.c (mark_modified_reg): I now unsigned; add cast. (rtx_equal_for_thread_p): Add cast. * loop.c (max_reg_before_loop): Now unsigned. (struct_movable): REGNO now unsigned. (try_copy_prop): REGNO arg unsigned. (regs_match_p): XN and YN now unsigned. (consec_sets_invariant_p, maybe_eliminate_biv): REGNO now unsigned. (strength_reduce): Likewise; NREGS also unsigned. (first_increment_giv, last_increment_giv unsigned): Now unsigned. * loop.h (struct iv_class): REGNO now unsigned. (max_reg_before_loop, first_increment_giv, last_increment_giv): Now unsigned. * machmode.h (mode_size, mode_unit_size): Now unsigned. (mode_for_size, smallest_mode_for_size): Pass size as unsigned. * optabs.c (expand_binop): I and NWORDS now unsigned. (expand_unop): I now unsigned. * print-tree.c (print_node): Don't print DECL_FIELD_BITPOS, but do print DECL_FIELD_OFFSET and DECL_FIELD_BIT_OFFSET. * real.c (significand_size): Now returns unsigned. * real.h (significand_size): Likewise. * regclass.c (reg_class_size): Now unsigned. (choose_hard_reg_mode): Both operands now unsigned. (record_reg_classes): REGNO and NR now unsigned. (reg_scan): NREGS now unsigned. (reg_scan_update): old_max_regno now unsigned. (reg_scan_mark_refs): Arg MIN_REGNO and var REGNO now unsigned. * reload.c (find_valid_class): BEST_SIZE now unsigned. (find_dummy_reload): REGNO, NWORDS, and I now unsigned. (hard_reg_set_here_p): Args BEG_REGNO and END_REGNO now unsigned. Likewise for variable R. (refers_to_regno_for_reload_p): Args REGNO and END_REGNO now unsigned, as are variables INNER_REGNO and INNER_ENDREGNO; add new variable R. (find_equiv_reg): Add casts. (regno_clobbered_p): Arg REGNO now unsigned. * reload.h (struct reload): NREGS now unsigned. (refers_to_regno_for_reload_p): Regno args are unsigned. (regno_clobbered_p): Likewise. * reload1.c (reg_max_ref_width, spill_stack_slot_width): Now unsigned. (compute_use_by_pseudos): REGNO now unsigned. (find_reg): I and J now unsigned, new variable K, and change loop variables accordingly; THIS_NREGS now unsigned. (alter_reg): INHERENT_SIZE and TOTAL_SIZE now unsigned. (spill_hard_reg): REGNO arg now unsigned; add casts. (forget_old_reloads_1): REGNO, NR, and I now unsigned. (mark_reload_reg_in_use): Arg REGNO and vars NREGS and I now unsigned. (clear_reload_reg_in_use): Arg REGNO and vars NREGS, START_REGNO, END_REGNO, CONFLICT_START, and CONFLICT_END now unsigned. (reload_reg_free_p, reload_reg_reaches_end_p): Arg REGNO now unsigned. (choose_reload_regs): MAX_GROUP_SIZE now unsigned. (emit_reload_insns): REGNO now unsigned. (reload_cse_move2add): Add cast. (move2add_note_store): REGNO and I now unsigned; new variable ENDREGNO and rework loop. * resource.c (mark_referenced_resources, mark_set_resources): New variable R; REGNO and LAST_REGNO now unsigned. (mark_target_live_regs): J and REGNO now unsigned. * rtl.c (mode_size, mode_unit_size): Now unsigned. * rtl.h (union rtunion_def): New field rtuint. (XCUINT): New macro. (ADDRESSOF_REGNO, REGNO, SUBREG_WORD): New XCUINT. (operand_subword, operand_subword_force): Word number is unsigned. (choose_hard_reg_mode): Operands are unsigned. (refers_to-regno_p, dead_or_set_regno_p): Regno arg is unsigned. (find_regno_note, find_regno_fusage, replace_regs): Likewise. (regno_use_in, combine_instructions, remove_death): Likewise. (reg_scan, reg_scan_update): Likewise. (extended_count): Return is unsigned. * rtlanal.c (refers_to_regno_p): Args REGNO and ENDREGNO and vars I, INNER_REGNO, and INNER_ENDREGNO now unsigned; new variable X_REGNO. (reg_overlap_mentioned_p): REGNO and ENDREGNO now unsigned. (reg_set_last_first_regno, reg_set_last_last_regno): Now unsigned. (reg_reg_last_1): FIRS and LAST now unsigned. (dead_or_set_p): REGNO, LAST_REGNO, and I now unsigned. (dead_or_set_regno_p): Arg TEST_REGNO and vars REGNO and ENDREGNO now unsigned. (find_regno_note, regno_use_in): Arg REGNO now unsigned. (find_regno_fusage): Likewise; also var REGNOTE now unsigned. (find_reg_fusage): Variables REGNO, END_REGNO, and I now unsigned. (replace_regs): Arg NREGS now unsigned. * sdbout.c (sdbout_parms, sdbout_reg_parms): Don't check REGNO < 0. * simplify-rtx.c (simplify_unary_operation): WIDTH now unsigned. (simplify_binary_operation): Likewise. (cselib_invalidate_regno): Arg REGNO and variables ENDREGNO, I, and THIS_LAST now unsigned. (cselib_record_set): Add cast. * ssa.c (ssa_max_reg_num): Now unsigned. (rename_block): REGNO now unsigned. * stmt.c (expand_return): Bit positions unsigned HOST_WIDE_INT; sizes now unsigned. (all_cases_count): Just return -1 not -2. COUNT, MINVAL, and LASTVAL now HOST_WIDE_INT. Rework tests to use trees whenever possible. Use host_integerp and tree_low_cst. (mark_seen_cases): COUNT arg now HOST_WIDE_INT; Likewise variable NEXT_NODE_OFFSET; XLO now unsigned. (check_for_full_enumeration_handing): BYTES_NEEDED, I to HOST_WIDE_INT. * stor-layout.c (mode_for_size): SIZE arg now unsigned. (smallest_mode_for_size): Likewise. (layout_decl): Simplify handing of a specified DECL_SIZE_UNIT. KNOWN_ALIGN is now an alignment, so simplify code. Don't turn off DECL_BIT_FIELD if field is BLKmode, but not type. (start_record_layout): Renamed from new_record_layout_info. Update to new fields. (debug_rli, normalize_rli, rli_size_unit_so_far, rli_size_so_far): New functions. (place_union_field): Renamed from layout_union_field. Update to use new fields in rli. (place_field): Renamed from layout_field. Major rewrite to use new fields in rli; pass alignment to layout_decl. (finalize_record_size): Rework to use new fields in rli and handle union. (compute_record_mode): Rework to simplify and to use new DECL fields. (finalize_type_size): Make rounding more consistent. (finish_union_layout): Deleted. (layout_type, case VOID_TYPE): Don't set TYPE_SIZE_UNIT either. (layout_type, case RECORD_TYPE): Call new function names. (initialize_sizetypes): Set TYPE_IS_SIZETYPE. (set_sizetype): Set TYPE_IS_SIZETYPE earlier. (get_best_mode): UNIT is now unsigned; remove casts. * tree.c (bit_position): Compute from new fields. (byte_position, int_byte_position): New functions. (print_type_hash_statistics): Cast to remove warning. (build_range_type): Use host_integerp and tree_low_cst to try to hash. (build_index_type): Likewise; make subtype of sizetype. (build_index_2_type): Pass sizetype to build_range_type. (build_common_tree_nodes): Use size_int and bitsize_int to initialize nodes; add bitsize_{zero,one,unit}_node. * tree.h (DECL_FIELD_CONTEXT): Use FIELD_DECL_CHECK. (DECL_BIT_FIELD_TYPE, DECL_QUALIFIER, DECL_FCONTEXT): Likewise. (DECL_PACKED, DECL_BIT_FIELD): Likewise. (DECL_FIELD_BITPOS): Deleted. (DECL_FIELD_OFFSET, DECL_FIELD_BIT_OFFSET): New fields. (DECL_RESULT, DECL_SAVED_INSNS): Use FUNCTION_DECL_CHECK. (DECL_FRAME_SIZE, DECL_FUNCTION_CODE, DECL_NO_STATIC_CHAIN): Likewise. (DECL_INLINE, DECL_BUILT_IN_NONANSI, DECL_IS_MALLOC): Likewise. (DECL_BUILT_IN_CLASS, DECL_STATIC_CONSTRUCTOR): Likewise. (DECL_STATIC_DESTRUCTOR, DECL_NO_CHECK_MEMORY_USAGE): Likewise. (DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT, DECL_NO_LIMIT_STACK) Likewise. (DECL_ORIGINAL_TYPE, TYPE_DECL_SUPPRESS_DEBUG): Use TYPE_DECL_CHECK. (DECL_ARG_TYPE_AS_WRITEN, DECL_ARG_TYPE): Use PARM_DECL_CHECK. (DECL_INCOMING_RTL, DECL_TRANSPARENT_UNION): Likewise. (DECL_ALIGN): Adjust to new field in union. (DECL_OFFSET_ALIGN): New field. (DECL_ERROR_ISSUED, DECL_TOO_LATE): Use LABEL_DECL_CHECK. (DECL_IN_TEXT_SECTION): Use VAR_DECL_CHECK. (union tree_decl): Add struct for both aligns. (enum tree_index): Add TI_BITSIZE_{ZERO,ONE,UNIT}. (bitsize_zero_node, bitsize_one_node, bitsize_unit_node): Added. (struct record_layout_info): Rework fields to have offset alignment and byte and bit position. (start_record_layout, place_field): Renamed from old names. (rli_size_so_far, rli_size_unit_so_far, normalize_rli): New decls. (byte_position, int_byte_position): Likewise. (get_inner_reference): Change types of position and length. * unroll.c (unroll_loop): New variable R; use for some loops. MAX_LOCAL_REGNUM and MAXREGNUM now unsigned. (calculate_giv_inc): Arg REGNO now unsigned. (copy_loop_body): REGNO and SRC_REGNO now unsigned. * varasm.c (assemble_variable): Clean up handling of size using host_integerp and tree_low_cst. (decode_addr_const): Use byte, not bit, position. (output_constructor): bitpos and offsets are HOST_WIDE_INT; use tree_low_cst and int_bit_position. * objc/objc-act.c (build_ivar_list_initializer): Use byte_position. * ch/actions.c (check_missing_cases): BYTES_NEEDED is HOST_WIDE_INT. * ch/typeck.c (expand_constant_to_buffer): Use int_byte_position. (extract_constant_from_buffer): Likewise. * cp/class.c (build_vbase_pointer_fields): layout_field now place_field. (get_vfield_offset): Use byte_position. (set_rtti_entry): Set OFFSET to ssizetype zero. (get_binfo_offset_as_int): Deleted. (dfs_record_base_offsets): Use tree_low_cst. (dfs_search_base_offsets): Likewise. (layout_nonempty_base_or_field): Reflect changes in RLI format and call byte_position. (layout_empty_base): Convert offset to ssizetype. (build_base_field): use rli_size_unit_so_far. (dfs_propagate_binfo_offsets): Do computation in proper type. (layout_virtual_bases): Pass ssizetype to propagate_binfo_offsets. (layout_class_type): Reflect changes in RLI names and fields. (finish_struct_1): Set DECL_FIELD_OFFSET. * cp/dump.c (dequeue_and_dump): Call bit_position. * cp/expr.c (cplus_expand_constant): Use byte_position. * cp/rtti.c (expand_class_desc): Use bitsize_one_node. * cp/typeck.c (build_component_addr): Use byte_position and don't special case for zero offset. * f/com.c (ffecom_tree_canonize_ptr_): Use bitsize_zero_node. (ffecom_tree_canonize_ref_): Likewise. * java/class.c (make_field_value): Use byte_position. * java/expr.c (JAVA_ARRAY_LENGTH_OFFSET): Use byte_position. (java_array_data_offset): Likewise. * java/java-tree.h (MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC): Add case to bzero call. From-SVN: r32742
2000-03-22cp-tree.h (BINFO_FOR_VBASE): Adjust documentation.Mark Mitchell1-37/+54
* cp-tree.h (BINFO_FOR_VBASE): Adjust documentation. (CANONICAL_BINFO): New macro. (BINFO_NEW_VTABLE_MARKED): Use it. (SET_BINFO_NEW_VTABLE_MARKED): Likewise. (CLEAR_BINFO_NEW_VTABLE_MARKED): Likewise. * class.c (dfs_build_vbase_offset_vtbl_entries): Use BINFO_TYPE, not TREE_TYPE. (build_primary_vtable): Adjust usage of BINFO_NEW_VTABLE_MARKED. (build_secondary_vtable): Likewise. (dfs_finish_vtbls): Likewise. (dfs_accumulate_vtbl_inits): Likewise. (accumulate_vtbl_inits): New function. (finish_vtbls): Make sure that virtual bases come after non-virtual bases in the vtable group. (record_base_offsets): Don't save and restore TREE_VIA_VIRTUAL. (finish_struct_1): Adjust usage of BINFO_NEW_VTABLE_MARKED. * search.c (struct vbase_info): Move definition. (marked_new_vtable_p): Adjust usage of BINFO_NEW_VTABLE_MARKED. (unmarked_new_vtable_p): Likewise. (dfs_mark_vtable_path): Remove. (dfs_mark_new_vtable): Remove. (dfs_unmark_new_vtable): Likewise. (dfs_clear_search_slot): Likewise. (dfs_find_vbases): Adjust usage of BINFO_NEW_VTABLE_MARKED. (dfs_clear_vbase_slots): Likewise. (init_vbase_pointers): LIkewise. From-SVN: r32689
2000-03-22class.c (layout_virtual_bases): Adjust names in conditionally compiled code.Mark Mitchell1-2/+2
* class.c (layout_virtual_bases): Adjust names in conditionally compiled code. From-SVN: r32680
2000-03-22class.c (record_base_offsets): New function.Mark Mitchell1-100/+194
* class.c (record_base_offsets): New function. (layout_conflict_p): Likewise. (layout_nonempty_base_or_field): Use it. (layout_empty_base): New function. (build_base_field): Use it. (build_base_fields): Update comment. (layout_virtual_bases): Fold in a little code form layout_basetypes. Use layout_empty_base. (layout_basetypes): Remove. (end_of_class): New function. (layout_class_type): Use it. Adjust. * cp-tree.h (CLASSTYPE_VBASECLASSES): Fix typo in comment. (fntype_p): Remove. * search.c (dfs_skip_nonprimary_vbases_unmarkedp): Fix typo in comment. (dfs_skip_nonprimary_vbases_markedp): Likewise. * typeck.c (fntype_p): Remove. From-SVN: r32679
2000-03-21class.c (build_base_field): Fix thinko in computation of binfo offsets.Mark Mitchell1-2/+6
* class.c (build_base_field): Fix thinko in computation of binfo offsets. From-SVN: r32677
2000-03-21tree.h (COMPLETE_TYPE_P): New macro.Nathan Sidwell1-5/+5
gcc * tree.h (COMPLETE_TYPE_P): New macro. (COMPLETE_OR_VOID_TYPE_P): New macro. (COMPLETE_OR_UNBOUND_ARRAY_TYPE_P): New macro. * stor-layout.c (layout_type, case VOID_TYPE): Don't set TYPE_SIZE. * c-aux-info.c (gen_type): Use them. * c-common.c (c_expand_expr_stmt): Likewise. * c-decl.c (poplevel, pushdecl, start_decl, finish_decl, grokdeclarator, grokparms, finish_struct, start_function, store_parm_decls, combine_parm_decls): Likewise. * c-parse.y (cast_expr): Likewise. * c-typeck.c (require_complete_type, c_sizeof, c_sizeof_nowarn, c_size_in_bytes, c_alignof, build_component_ref, build_indirect_ref, build_array_ref, convert_arguments, build_binary_op, pointer_diff, build_unary_op, digest_init: Likewise. * calls.c (initialize_argument_information): Likewise. * convert.c (convert_to_integer): Likewise. * dbxout.c (dbxout_typedefs, dbxout_type, dbxout_symbol): Likewise. * dwarfout.c (location_or_const_value_attribute, output_enumeration_type_die, output_structure_type_die, output_union_type_die, output_type): Likewise. * expr.c (safe_from_p, expand_expr): Likewise. * function.c (assign_parms): Likewise. * sdbout.c (sdbout_symbol, sdbout_one_type): Likewise. * tree.c (build_array_type, build_function_type, build_method_type, build_offset_type, build_complex_type): Likewise. * c-parse.c, c-parse.h: Regenerated. gcc/cp * typeck.c (require_complete_type, complete_type, complete_type_or_else, c_sizeof, c_sizeof_nowarn, build_array_ref, convert_arguments, pointer_diff, build_x_unary_op, build_unary_op, build_c_cast, build_modify_expr): Use COMPLETE_TYPE_P etc. * call.c (is_complete, convert_like_real, build_new_method_call): Likewise. * class.c (build_vbase_pointer_fields, check_bases, build_base_field, finish_struct_1, pushclass): Likewise. * cvt.c (cp_convert_to_pointer, convert_to_void): Likewise. * decl.c (maybe_process_template_type_declaration, pushtag, pushdecl, redeclaration_error_message, start_decl, start_decl_1, layout_var_decl, check_initializer, cp_finish_decl, grokdeclarator, require_complete_types_for_parms, grok_op_properties, xref_tag, xref_basetypes, check_function_type): Likewise. * decl2.c (check_classfn, reparse_absdcl_as_casts): Likewise. * friend.c (do_friend): Likewise. * init.c (build_offset_ref): Likewise. * parse.y (structsp): Likewise. * pt.c (maybe_process_partial_specialization, tsubst_friend_function, instantiate_class_template, tsubst, do_type_instantiation, instantiate_pending_templates): Likewise. * repo.c (repo_get_id): Likewise. * rtti.c (build_typeid, get_typeid, build_dynamic_cast_1, synthesize_tinfo_var, emit_support_tinfos): Likewise. * search.c (lookup_fnfields_1, lookup_conversions): Likewise. * semantics.c (begin_class_definition): Likewise. * tree.c (build_cplus_method_type): Likewise. * typeck2.c (digest_init, build_functional_cast, add_exception_specifier): Likewise. * parse.h, parse.c: Regenerated. From-SVN: r32671
2000-03-19cp-tree.h (CLEAR_DECL_C_BIT_FIELD): New macro.Mark Mitchell1-27/+34
* cp-tree.h (CLEAR_DECL_C_BIT_FIELD): New macro. * class.c (check_bitfield_decl): Turn illegal bitfields into non-bitfields. (dfs_propagate_binfo_offsets): Adjust for new size_binop semantics. (dfs_offset_for_unshared_vbases): Likewise. * cvt.c (cp_convert_to_pointer): Convert NULL to a pointer-to-member correctly under the new ABI. * expr.c (cplus_expand_constant): Don't use cp_convert when turning an offset into a pointer-to-member. * init.c (resolve_offset_ref): Don't adjust pointers-to-members when dereferencing them under the new ABI. * typeck.c (get_member_function_from_ptrfunc): Tweak calculation of pointers-to-members under the new ABI. From-SVN: r32631
2000-03-19class.c (check_bitfield_decl): Remove restriction on really long bitfields.Mark Mitchell1-20/+67
* class.c (check_bitfield_decl): Remove restriction on really long bitfields. (layout_class_type): Implement new ABI handling of bitfields longer than their types. From-SVN: r32625
2000-03-18class.c (build_base_field): Use TYPE_ALIGN to examine a type.Nathan Sidwell1-2/+2
* class.c (build_base_field): Use TYPE_ALIGN to examine a type. (note_name_declared_in_class): Use OVL_CURRENT to get at a potential overload. From-SVN: r32617
2000-03-17* Clean up usages of TREE_INT_CST_LOW.Richard Kenner1-18/+19
* c-parse.in (RESTORE_WARN_FLAGS): Use tree_low_cst. * c-parse.y, c-parse.c, objc/objc-parse.y, objc/objc-parse.c: Regenerated. * c-tree.h (min_precision): Move declaration to here. * c-typeck.c (build_binary_op): Use host_integerp and tree_low_cst. (build_unary_op, add_pending_init): Use bit_position. (pending_init_member, process_init_element): Likewise. (really_start_incremental_init, push_init_level, pop_init_level): Don't make copies of nodes or modify them in place, use consistent types when tracking positions, and use tree routines computations. (set_init_index, output_init_element): Likewise. (output_pending_init_elements, process_init_element): Likewise. * dbxout.c (dbxout_type_fields): Use bit_position, host_integerp, tree_low_cst and int_bit_position; also minor cleanup. (dbxout_type_method_1, dbxout_range_type, dbxout_type): Likewise. (print_cst_octal): Precision is unsigned. (dbxout_symbol): Ensure DECL_INITIAL is in-range and use tree_low_cst. * dwarf2out.c (ceiling): Input and output are unsigned HOST_WIDE_INT. (simple_type_align_in_bits): Result is unsigned int. Use tree_int_low_cst and host_integerp. (simple_type_size_in_bits): Result is unsigned HOST_WIDE_INT. (field_byte_offset): Result is HOST_WIDE_INT. Change types of internal variables so alignments are unsigned int, offsets are HOST_WIDE_INT and sizes are unsigned HOST_WIDE_INT. Use host_integerp, tree_low_cst, and int_bit_position. (add_bit_offset_attribute): Likewise. (add_data_member_location_attribute): Use tree_cst_low. (add_bound_info): Use host_integerp, integer_zerop, and integer_onep. (add_bit_size_attribute): Use tree_low_cst. (add_pure_or_virtual_attribute, gen_enumeration_type_die): Likewise. * dwarfout.c: Similar changes to dwarf2out.c. * expr.c (expand_expr, case ARRAY_REF): Remove redundant code. * genoutput.c (n_occurences): Return -1 for null string. (strip_whitespace): Accept null string and make into function. (scan_operands): Reflect above changes. * sdbout.c (plain_type_1): Use host_integerp and tree_low_cst. (sdbout_field_types, sdbout_one_type): Likewise; also use bit_position. * ssa.c (rename_registers): Add missing cast of arg to bzero. * tree.c (int_size_in_bytes): Check for too big to represent. (bit_position, int_bit_position, host_integerp, tree_low_cst): New fns. * tree.h (host_integerp, tree_low_cst, bit_position, int_bit_position): New declarations. (min_precision): Delete from here. * varasm.c (decode_addr_const): Use host_integerp, bit_position, and int_bit_position. * objc/objc-act.c (encode_method_prototype): Sizes are HOST_WIDE_INT. (encode_method_def): Likewise. (build_ivar_list_initializer): Use int_bit_position. (generate_shared_structures): Convert size. (encode_type, encode_complete_bitfield): Use integer_zerop. (encode_bitfield): Use tree_low_cst and int_bit_position. * ch/typeck.c (min_precision): New function. (build_chill_slice): Use host_integerp and tree_low_cst. (expand_constant_to_buffer): Likewise and also int_bit_position. LO is unsigned HOST_WIDE_INT (build_chill_array_ref_1): Make `i' be HOST_WIDE_INT; use tree_low_cst. (extract_constant_from_buffer): Sizes are now HOST_WIDE_INT. Use host_integerp and tree_low_cst. (build_chill_bin_type): Use host_integerp and tree_low_cst. (layout_chill_range_type): Use tree_int_cst_sgn, compare_tree_int, tree_low_cst, and min_precision. (apply_chill_array_layout): Cleanups for types of variables and use tree_int_cst_sgn, compare_tree_int, and tree_low_cst. (apply_chill_field_layout): Likewise. * cp/class.c (build_vbase_path): Use integer_zerop. (build_vtable_entry): Use tree_low_cst. (get_vfield_offset): Use bit_position. (dfs_modify_vtables): New variable vindex_val; `i' is HOST_WIDE_INT. Use tree_low_cst. (check_bitfield_decl): Set DECL_SIZE using convert. (build_base_field): Set DECL_SIZE and DECL_SIZE_UNIT using size_binop. (layout_virtual_bases): DSIZE is unsigned HOST_WIDE_INT. Use tree_low_cst. (finish_struct_1): Use bit_position. (dump_class_hierarchy): Use tree_low_cst. * cp/cp-tree.h (min_precision): Add declaration. * cp/decl.c (xref_tag, xref_basetypes): Use tree_low_cst. * cp/error.c (dump_type_suffix): Use host_integerp and tree_low_cst. (dump_expr): Use integer_zerop, host_integerp, and tree_low_cst. * cp/expr.c (cplus_expand_constant): Use bit_position. * cp/init.c (build_vec_init): Use host_integerp and tree_low_cst. * cp/rtti.c (get_base_offset): Use bit_position. * cp/typeck.c (build_binary_op): Use integer_zerop, compare_tree_int, host_integerp, and tree_low_cst. (pointer_int_sum): Use integer_zerop. (build_component_addr): Use bit_position. * java/class.c (make_field_value): Properly handle sizes. (get_dispatch_vector): Use tree_low_cst and host_integerp. (layout_class_method): Count using trees. * java/decl.c (push_promoted_type): Set TYPE_{MIN,MAX}_VALUE with copy_node. * java/expr.c (java_array_data_offset): Use int_bit_position. (build_newarray, build_anewarray): Use host_integerp and tree_low_cst. (build_invokevirtual): Use tree_low_cst and do computations with trees. From-SVN: r32607
2000-03-15cp-tree.h: Tweak documentation.Mark Mitchell1-246/+320
* cp-tree.h: Tweak documentation. * class.c (build_vbase_pointer_fields): Layout the fields, too. (avoid_overlap): Remove. (get_binfo_offset_as_int): New function. (dfs_serach_base_offsets): Likewise. (layout_nonempty_base_or_field): Likewise. (build_base_field): Layout fields here. Avoid placing two objects of the same type at the same address, under the new ABI. (build_base_fields): Adjust accordingly. (create_vtable_ptr): Return the new field, but don't attach it to TYPE_FIELDS. (remove_base_field): Remove. (remove_base_fields): Remove. (layout_basetypes): Adjust accordingly. (layout_class_type): Call layout_field for each field, rather than just making a wholesale call to layout_type. From-SVN: r32549
2000-03-07tree.h (INT_CST_LT, [...]): Remove unneeded casts.Richard Kenner1-16/+19
* tree.h (INT_CST_LT, INT_CST_LT_UNSIGNED): Remove unneeded casts. (struct tree_int_cst): int_cst_low is now unsigned HOST_WIDE_INT. (attribute_hash_list, type_hash_canon): hashcode is now unsigned. (type_hash_lookup, type_hash_add, type_hash_list): Likewise. (min_precision): Result is unsignd. (add_double, neg_double, mul_double): Low word is unsigned. (lshift_double, rshift_double, lrotate_double): Likewise. (rrotate_double, div_and_round_double): Likewise. (tree_floor_log2, compare_tree_int): New functions. (preserve_rtl_expr_temps): New declaration. * c-common.c (declare_hidden_char_array): Use compare_tree_int. (decl_attributes): Use tree_log2 to find alignment. Check for TREE_INT_CST_HIGH for format args. (min_precision): Now unsigned. Use tree_floor_log2. (truthvalue_conversion): Delete long-disabled code. * c-decl.c (finish_struct): Clean up tests on field width. (finish_function): Use compare_tree_int. * c-pragma.c (handle_pragma_token): Use tree_log2 for alignment. * c-typeck.c (comptypes): Use tree_int_cst_equal. (default_conversion, digest_init): Use compare_tree_int. (build_binary_op): Use integer_all_onesp and compare_tree_int. Fix type errors in forming masks. * calls.c (initialize_argument_information): Use compare_tree_int. * dbxout.c (dbxout_type): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * except.c (expand_eh_region_start_tree): Use compare_tree_int. * expr.c (is_zeros_p, case INTEGER_CST): Use integer_zerop. (store_field): Use compare_tree_int. (expand_expr, case CONSTRUCTOR): Use TYPE_SIZE_UNIT. (expand_expr, case ARRAY_REF): Use compare_tree_int. (do_jump, case BIT_AND_EXPR): Use tree_floor_log2. (do_store_flag): Use compare_tree_int. * fold-const.c (encode, decode): Low part is always unsigned. (force_fit_type, add_double, neg_double, mul_double): Likewise. (lshift_double, rshift_double, lrotate_double): Likewise. (rrotate_double, div_and_round_double, int_const_binop): Likewise. (fold_convert): Use compare_tree_int. (operand_equal_p, case INTEGER_CST): Use tree_int_cst_equal. (invert_truthvalue, case INTEGER_CST): Likewise. (fold): Use compare_tree_int; add casts for unsigned TREE_INT_CST_LOW. * mkdeps.c (deps_dummy_targets): Make I unsigned. * rtl.h (add_double, neg_double, mul_double): Low words are unsigned. (lshift_double, rshift_double, lrotate_double, rrotate_double): Likewise. * stmt.c (expand_decl): Use compare_tree_int and mode_for_size_tree. (expand_end_case): Use compare_tree_int. (estimate_case_costs): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * stor-layout.c (mode_for_size_tree): Use compare_tree_int. (layout_decl): Likewise. (layout_record, layout_union): Make sizes unsigned. (layout_type, case VOID_TYPE): TYPE_SIZE must be bitsizetype. (layout_type, case QUAL_UNION_TYPE): Use compare_tree_int. * tree.c (struct type_hash): hashcode is unsigned. (build_type_attribute_variant, type_hash_list): Likewise. (type_hash_lookup, type_hash_add, type_hash_canon): Likewise. (attribute_hash_list, build_array_type, build_method_type): Likewise. (build_complex_type): Likewise. (real_value_from_int_cst): Remove unneeded casts. (integer_all_onesp): Add casts. (tree_floor_log2, compare_tree_int): New functions. (build_index_type): Use tree_int_cst_sgn. * varasm.c (assemble_variable): Use compare_tree_int. * ch/actions.c (chill_convert_for_assignment): INDEX is unsigned HOST_WIDE_INT. * ch/ch-tree.h (DECL_NESTING_LEVEL): Use TREE_INT_CST_HIGH since unsigned. * ch/except.c (chill_handle_on_labels): ALTERNATIVE is unsigned. Use compare_tree_int. (expand_goto_except_cleanup): Likewise. * cp/class.c (dfs_modify_vtables): I is now unsigned. (check_bitfield_decl): Use tree_int_cst_sgn and compare_tree_int. (build_base_field): Add casts of TREE_INT_CST_LOW to HOST_WIDE_INT. * cp/error.c (dump_expr): Cast TREE_INT_CST_HIGH to unsigned. * cp/init.c (build_vec_init): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. * cp/method.c (build_overload_int): Cast TREE_INT_CST_HIGH to unsigned. * cp/typeck.c (build_binary_op, case TRUNC_DIV_EXPR): Call integer_all_onesp. * cp/typeck2.c (process_init_constructor): Use compare_tree_int. * f/com.c (ffecom_f2c_set_lio_code_): Use compare_tree_int. (ffecom_sym_transform_, ffecom_transform_common_): Likewise. (ffecom_transform_equiv_): Likewise. * java/decl.c (emit_init_test_initialization): Mark KEY as unused. * java/expr.c (build_newarray): Cast TREE_INT_CST_LOW to HOST_WIDE_INT. (build_anewarray): Likewise. * java/parse.y (patch_newarray): Likewise. * java/parse.c: Regenerated. From-SVN: r32383
2000-03-03* tree.h (TYPE_ALIGN_UNIT): New macro.Mark Mitchell1-7/+44
From-SVN: r32302
2000-02-29pt.c (fn_type_unification): Unify return type, whenever provided.Nathan Sidwell1-1/+3
* pt.c (fn_type_unification): Unify return type, whenever provided. (get_bindings_real): Only pass return type when necessary. Remove explicit return type check. * class.c (resolve_address_of_overloaded_function): Pass desired return type to fn_type_unification. From-SVN: r32253
2000-02-28* Eliminate DECL_FIELD_SIZE.Richard Kenner1-9/+1
* builtins.c (built_in_class_names, built_in_names): New variables. * c-decl.c (finish_struct): Set specified size in DECL_SIZE. * expr.c (expand_expr, case COMPONENT_REF): Get field size from DECL_SIZE, not DECL_FIELD_SIZE. * print-tree.c (print_node): Remove code that prints extra blank lines in some cases. Properly handle inline and builtin function cases. * stor-layout.c (layout_decl): Get specified size from DEC_SIZE. * tree.h (built_in_class_named, built_in_names): New declarations. (union tree_decl): Rename internal unions to u1 and u2 and change some of their components. Add new field built_in_class. (DECL_ALIGN, DECL_INCOMING_RTL, DECL_SAVED_INSNS, DECL_FRAME_SIZE): Reflect above changes. (DECL_FUNCTION_CODE, DECL_BUILT_IN_CLASS): Likewise. (DECL_SET_FUNCTION_CODE, DECL_FIELD_SIZE): Deleted. * objc/objc-act.c (objc_copy_list): Use DECL_SIZE, not DECL_FIELD_SIZE. (encode_field_decl): Likewise; also remove obsolete test for bitfield. * ch/ch-tree.h (DECL_ACTION_NESTING_LEVEL): Use new tree union name. * ch/decl.c (finish_struct): Don't clear DECL_FIELD_SIZE. * ch/typeck.c (make_chill_struct_type): Likewise. (apply_decl_field_layout): General cleanup. Set DECL_SIZE instead of DECL_FIELD_SIZE. * cp/class.c (build_vtbl_or_vbase_field, check_methods): Don't clear DECL_FIELD_SIZE. (check_bitfield_decl, check_field_decls): Set DECL_SIZE, not DECL_FIELD_SIZE. * cp/rtti.c (expand_class_desc): Likewise. * cp/cp-tree.h (DECL_INIT_PRIORITY): Use underlying union name. (THUNK_VCALL_OFFSET): Likewise. (THUNK_DELTA): Reflect changes in ../tree.h. * java/java-tree.h (LABEL_PC): Relect name changes in ../tree.h. (DECL_BIT_INDEX): Use underlying representation. * java/parse.h (DECL_INHERITED_SOURCE_LINE): Likewise. From-SVN: r32249
2000-02-27builtins.c (c_strlen): Use size_diffop and return ssizetype value.Richard Kenner1-65/+48
* builtins.c (c_strlen): Use size_diffop and return ssizetype value. (expand_builtin_strcpy): Pass correct type to size_binop. (expand_builtin_strcmp): Likewise. Clean up conditional structure. * c-decl.c (init_decl_processing): Don't call set_sizetype twice. (complete_array_type): Don't use size_binop for MAXINDEX. * c-typeck.c (c_sizeof): Use size_one_node and TYPE_SIZE_UNIT. (c_sizeof_nowarn, c_size_in_bytes): Likewise. (c_alignof): Use size_one_node. (build_unary_op): Pass arg of proper type to size_binop. (really_start_incremental_init, push_init_level): Use sizetype for constructor{,_bit,_unfilled}_index. (pop_init_label, output_init_element): Likewise. (output_pending_init_elements, process_init_element): Likewise. * calls.c (compute_argument_block_size): Field VAR is ssizetype. * expr.c (store_expr): Use size_int. (store_constructor): Use proper types for size_binop args. (get_inner_reference, expand_expr, case ARRAY_REF): Likewise. (expand_expr_unaligned): Likewise. (string_contant): Return object of sizetype. * expr.h (SUB_PARM_SIZE): Call size_diffop and pass proper types. (ARGS_SIZE_RTX): Call ARGS_SIZE_TREE. (ARGS_SIZE_TREE): Pass proper types to size_binop. * fold-const.c (int_const_binop): Refine when size_int is called. (fold_convert): Likewise. (size_int_wide): Rework to take KIND as arg, only take low order bits, handle new sizetype_tab datatype, and chain entries in size_table. (size_int_type_wide): New function. (size_binop): Validate types of arguments. (ssize_binop): Deleted. (size_diffop): New function. (extract_muldiv): Only fold division into multiplication for sizetypes. * function.c (assign_parms): Use size_diffop and make sure VAR field is of ssizetype; also pass proper type to size_binop. (locate_and_pad_parm, pad_to_arg_alignment): Likewise. (round_down): Deleted from here. * store-layout.c (sizetype_tab): Now an array. (sizetype_set, early_root_list): New variables. (variable_size): Use size_one_node. (round_up): Pass proper type to size_binop. (round_down): Moved to here and corrected as above. (layout_record): Pass proper arg types to size_binop. (layout_type): Likewise. If sizetype_set is zero, record the type just laid out. (make_unsigned_type): Don't call set_sizetype; (make_signed_type): Likewise; also, call fixup_signed_type. (initialize_sizetypes): New function. (set_sizetype): Make copy of types, set TYPE_IS_SIZETYPE, and set name of bitsizetype to "bit_size_type". Fix up type of sizes of all types made before call. * tm.texi (ROUND_TYPE_SIZE_UNIT): New macro. * tree.c (fix_sizetype): Deleted. (build_common_tree_nodes): Call initialize_sizetypes. (build_common_tree_nodes_2): Don't call fix_sizetype. * tree.h (TYPE_IS_SIZETYPE): New macro. (initialize_sizetype): New declaration. (enum size_type_kind): New type. (struct sizetype_tab): Deleted. (sizetype_tab): Now array; adjust sizetype macros. (size_diffop, size_int_type_wide): New functions. (size_int_wide): Change number of args and type; access macros changed. (ssize_int, sbitsize_int): New macros. * config/i960/i960.h (ROUND_TYPE_SIZE): Use size_int. (ROUND_TYPE_SIZE_UNIT): New macro. * ch/actions.c (chill_convert_for_assignment): Don't use size_binop for things that aren't sizes. (expand_varying_length_assignment): Likewise. * ch/convert.c (digest_array_tuple, convert): Likewise. * ch/typeck.c (build_chill_slice, smash_dummy_type): Likewise. (build_chill_slice_with_range): Likewise. (build_chill_slice_with_length): Likewise. (build_array_from_set): Adjust types for size_binop. * ch/expr.c (build_concat_expr, build_chill_repetition_op): Likewise. (build_chill_sizeof): Use TYPE_SIZE_UNIT. * ch/tree.c (build_string_type): Pass proper type to size_binop. * cp/class.c (dfs_build_vtable_offset_vtbl_entries): Don't use size_binop on things that are not sizes; ssize_binop deleted. Call size_diffop when appropriate. (dfs_build_vcall_offset_vtbl_entries): Likewise. (build_primary_vtable, build_secondary_vtable): Likewise. (dfs_set_offset_for_unshared_vbases, dfs_modify_vtables): Likewise. Variable I is HOST_WIDE_INT. (get_vfield_offset): Pass proper types to size_binop. (size_extra_vtbl_entries, layout_virtual_bases): Likewise. (finish_struct_1): Likewise. (skip_rtti_stuff): Arg N is now pointer to signed. (layout_class_type): Use size_zero_node. * cp/cp-tree.h (skip_rtti_stuff): Arg N is pointer to signed. * cp/cvt.c (cp_convert_to_pointer): Pass proper types to size_binop. * cp/decl.c (complete_arry_type): Pass proper types to size_binop. (xref_basetypes): BINFO_OFFSET is sizetype. * cp/error.c (dump_expr): Don't use size_binop non-sizes. * cp/expr.c (cplus_expand_constant): Pass proper types to size_binop. * cp/init.c (construct_virtual_bases): Fix type error. (build_vec_delete_1): Pass proper type to size_binop and don't fold result. * cp/lex.c (cp_make_lang_type): BINFO_OFFSET is sizetype. * cp/rtti.c (get_base_offset): Pass proper type to size_binop. * cp/search.c (dfs_find_vbases): Fix type error. (expand_upcast_fixups): Arg to skip_rtti_stuff is pointer to signed. (dfs_get_vbase_types): BINFO_OFFSET is sizetype. * cp/tree.c (debug_binfo): Variable N is signed. Use HOST_WIDE_INT_PRINT_DEC. * cp/typeck.c (comptypes): sizetype is same as equivalent integer type. (c_sizeof, c_sizeof_nowarn, expr_sizeof): Use TYPE_SIZE_UNIT, size_one_node and size_zero_node. (c_alignof): Use size_one_node. (build_component_addr): Pass proper types to size_binop. (expand_ptrmemfunc_cst): Don't use size_binop on non-sizes. * f/com.c (ffecom_arrayref_): Convert args to size_binop to proper type. (ffecom_tree_canonize_ptr_): Don't use size_binop for non-sizes. (ffecom_tree_canonize_ref_): Likewise. (type_for_mode): Handle TImode. * f/ste.c (ffeste_io_dofio_, ffeste_io_douio_): Use TYPE_SIZE_UNIT. (ffeste_io_ciclist_): Likewise. * java/expr.c (build_java_ret): Pass proper type to size_binop. From-SVN: r32225
2000-02-27Implement class scope using-declarations for functions.Jason Merrill1-68/+64
* class.c (handle_using_decl): Call add_method for used functions. Use IDENTIFIER_CLASS_VALUE to check for conflicts. (add_method): Used functions are hidden by local functions. (check_bases_and_members): Handle using-decls before finalizing CLASSTYPE_METHOD_VEC. * call.c (add_function_candidate): Add ctype parm; if non-zero, override the type of 'this' accordingly. (add_template_candidate, add_template_candidate_real): Add ctype parm. (convert_class_to_reference, build_user_type_conversion_1, build_new_function_call, build_object_call, build_new_op, build_new_method_call): Pass ctype parm. * search.c (lookup_member): Put rval_binfo, not basetype_path, in the baselink. * call.c (convert_class_to_reference, build_user_type_conversion_1, build_new_function_call, build_object_call, build_new_op, build_new_method_call, build_op_delete_call): Don't get basetype_path from a baselink. * typeck.c (build_component_ref): Likewise. * init.c (build_offset_ref): Likewise. (resolve_offset_ref): Don't call enforce_access. Call build_scoped_ref. * typeck2.c (build_scoped_ref): Simplify. Do nothing if it would cause an error or if -pedantic. * class.c (alter_access): Lose binfo parm. From-SVN: r32212
2000-02-21call.c (build_object_call): Compress consecutive calls to cp_error.Gabriel Dos Reis1-6/+3
2000-02-21 Gabriel Dos Reis <gdr@codesourcery.com> * call.c (build_object_call): Compress consecutive calls to cp_error. (build_conditional_expr): Say 'ISO C++' not 'ANSI C++'. (build_op_delete_call): Adjust message formatting. * class.c (check_bases): Compress consecutive calls to cp_pedwarn. (finish_struct_anon): Say 'ISO C++'. * decl.c (start_decl): Same here. (grok_reference_init): Likewise. (grokfndecl): Correct message formatting. (grokfndecl): Improve diagnostic. (check_static_variable_definition): Likewise. Say 'ISO C++' (compute_array_index_type): Say 'ISO C++' (create_array_type_for_decl): Compress consecutive calls to cp_error. (grokdeclarator): Say 'ISO C++' (grok_op_properties): Likewise. * decl2.c (delete_sanity): Clairify diagnostic. (check_member_template): Same here. (grok_function_init): Use consistent terminology. * expr.c (do_case): Say 'ISO C++' * friend.c (do_friend): Compress consecutive calls to warning. From-SVN: r32090
2000-02-21cp-tree.h (merge_primary_and_secondary_vtables_p): New macro.Mark Mitchell1-57/+141
* cp-tree.h (merge_primary_and_secondary_vtables_p): New macro. * class.c (build_secondary_vtable): Reorganize. Don't create a new vtable under the new ABI. (layout_vtable_decl): Don't add num_extra_vtbl_entries when computing the size. (build_vtbl_initializer): Don't return a CONSTRUCTOR; just return the initializing elements. (initialize_vtable): New function. (dfs_finish_vtbls): Use it. (dfs_accumulate_vtbl_inits): New function. (finish_vtbls): Merge primary and secondary vtables under the new ABI. (finish_struct_1): Remove redundant call to layout_vtable_decl. * init.c (expand_virtual_init): Deal with BINFO_VTABLEs that aren't VAR_DECLs. From-SVN: r32083
2000-02-20class.c (build_vtable): New function, split out from ...Mark Mitchell1-29/+30
* class.c (build_vtable): New function, split out from ... (get_vtable_decl): ... here, and ... (build_secondary_vtable): ... here. * pt.c (tsubst_decl): Fix formatting. From-SVN: r32082
2000-02-20class.c (dfs_build_vcall_offset_vtbl_entries): Fix typo in comment.Mark Mitchell1-25/+27
* class.c (dfs_build_vcall_offset_vtbl_entries): Fix typo in comment. (build_vtable_entry): Don't assume all vtable entries are functions. (build_vtbl_initializer): Adjust accordingly. (get_vtable_decl): Fix formatting. From-SVN: r32069
2000-02-19c-common.c (decl_attributes): Set DECL_SIZE_UNIT.Richard Kenner1-20/+38
* c-common.c (decl_attributes): Set DECL_SIZE_UNIT. * c-decl.c (duplicate_decls, finish_enum): Likewise. (finish_decl): Remove -Wlarger-than code from here. * flags.h (id_clash_len): Now int. (larger_than_size): Now HOST_WIDE_INT. * fold-const.c (size_int_wide): No more HIGH parm; NUMBER is signed. Clean up checking to see if in table. (make_bit_field_ref): Remove extra parm to bitsize_int. * ggc-common.c (ggc_mark_tree_children): Mark DECL_SIZE_UNIT. * print-tree.c (print_node): Print DECL_SIZE_UNIT and TYPE_SIZE_UNIT. * stmt.c (expand_decl): Use DECL_SIZE_UNIT for stack checking size and for computing size of decl. * stor-layout.c (layout_decl): Set DECL_SIZE_UNIT. Move -Wlarger-than code to here. (layout_record): Remove extra arg to bitsize_int. Set TYPE_BINFO_SIZE_UNIT. (layout_union): Remove extra arg to bitsize_int. Use proper type for size of QUAL_UNION. (layout_type): Remove extra arg to bitsize_int. * toplev.c (id_clash_len): Now int. (larger_than_size): Now HOST_WIDE_INT. (decode_W_option): Clean up id-clash and larger-than- cases. * tree.c (get_identifier, maybe_get_identifier): Remove unneeded casts. (expr_align, case FUNCTION_DECL): DECL_ALIGN is not defined. * tree.h (BINFO_SIZE_UNIT, TYPE_BINFO_SIZE_UNIT, DECL_SIZE_UNIT): New. (struct tree_decl): New field size_unit. (size_int_wide): No HIGH operand; NUMBER is now signed. (size_int_2): Deleted. (size_int, bitsize_int): Don't use it and rework args. * varasm.c (assemble_variable, output_constructor): Use DECL_SIZE_UNIT. * ch/decl.c (layout_enum): Set DECL_SIZE_UNIT. * ch/satisfy.c (safe_satisfy_decl): Likewise. * cp/class.c (build_primary_vtable, layout_vtable_decl): Likewise. (avoid_overlap, build_base_field): Likewise. (build_base_field, build_base_fields, is_empty_class): Test DECL_SIZE with integer_zero. (layout_class_type): Set CLASSTYPE_SIZE_UNIT. * cp/cp-tree.h (struct lang_type): New field size_unit. (CLASSTYPE_SIZE_UNIT): New macro. * cp/decl.c (init_decl_processing): Set DECL_SIZE_UNIT. (cp_finish_decl): Delete -Wlarger-than processing. * cp/optimize.c (remap_decl): Walk DECL_SIZE_UNIT. * cp/pt.c (tsubst_decl): Set DECL_SIZE_UNIT. * cp/tree.c (make_binfo): binfo vector is one entry longer. (walk_tree): Walk DECL_SIZE_UNIT. * f/com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT. (ffecom_transform_common_, ffecom_transform_equiv_): Likewise. (duplicate_decls): Likewise. (ffecom_tree_canonize_ptr_): Delete extra arg to bitsize_int. (finish_decl): Delete -Wlarger-than processing. * java/class.c (build_class_ref, push_super_field): Set DECL_SIZE_UNIT. * java/constants.c (build_constants_constructor): Likewise. From-SVN: r32068
2000-02-18class.c (add_method): Don't set DECL_VIRTUAL_CONTEXT.Mark Mitchell1-3/+1
* class.c (add_method): Don't set DECL_VIRTUAL_CONTEXT. * decl2.c (grokclassfn): Likewise. From-SVN: r32044
2000-02-16Make DECL_CONTEXT mean the class in which a member function was declared, ↵Mark Mitchell1-10/+7
even for a virtual function. Make DECL_CONTEXT mean the class in which a member function was declared, even for a virtual function. * cp-tree.h (DECL_CLASS_CONTEXT): Adjust. (DECL_FRIEND_CONTEXT): New macro. (DECL_REAL_CONTEXT): Remove. (SET_DECL_FRIEND_CONTEXT): Likewise. (DECL_VIRTUAL_CONTEXT): Adjust. (DECL_CLASS_SCOPE_P): Use TYPE_P. (add_friends): Remove. (hack_decl_function_context): Likewise. * call.c (build_new_function_call): Replace DECL_REAL_CONTEXT with CP_DECL_CONTEXT. (build_over_call): Fix indentation. Use DECL_CONTEXT instead of DECL_CLASS_CONTEXT. * class.c (dfs_build_vcall_offset_vtbl_entries): Likewise. (add_method): Set DECL_VIRTUAL_CONTEXT, not DECL_CLASS_CONTEXT. (strictly_overrides): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (build_vtbl_or_vbase_field): Don't set DECL_CLASS_CONTEXT. (build_base_field): Likewise. (finish_struct_1): Likewise. (build_self_reference): Likewise. * decl.c (push_class_binding): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (pushtag): Use decl_function_context, not hack_decl_function_context. (decls_match): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (duplicate_decls): Use DECL_VIRTUAL_CONTEXT. (pushdecl): Remove bogus code. (start_decl): Use DECL_CONTEXT rather than DECL_CLASS_CONTEXT. (cp_finish_decl): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (grokfndecl): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. Use decl_function_context, nothack_decl_function_context. (grokvardecl): Don't set DECL_CLASS_CONTEXT. (grokdeclarator): Likewise. Use decl_function_context, not hack_decl_function_context. (copy_args_p): Document. Don't use DECL_CLASS_CONTEXT. (start_function): Use DECL_FRIEND_CONTEXT, not DECL_CLASS_CONTEXT. Use decl_function_context, not hack_decl_function_context. (finish_function): Use decl_function_context, not hack_decl_function_context. (maybe_retrofit_in_chrg): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (grokclassfn): Set DECL_VIRTUAL_CONTEXT, not DECL_CONTEXT. (finish_static_data_member_decl): Don't set DECL_CLASS_CONTEXT. (grokfield): Likewise. (finish_builtin_type): Likewise. (finish_vtable_vardec): Use decl_function_context, not hack_decl_function_context. (import_export_decl): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (start_static_initialization_or_destruction): Likewise. (finish_static_initialization_or_destruction): Likewise. (mark_used): Adjust logic for deciding when to synthesize methods. * dump.c (dequeue_and_dump): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. * error.c (dump_function_decl): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. * friend.c (is_friend): Likewise. (add_friends): Remove. (do_friend): Use SET_DECL_FRIEND_CONTEXT. * lex.c (begin_definition_of_inclass_inline): Use decl_function_context, not hack_decl_function_context. (process_next_inline): Likewise. (do_identifier): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. * method.c (set_mangled_name_for_decl): Use DECL_CONTEXT, not DECL_CLASSS_CONTEXT. (hack_identifier): Likewise. (synthesize_method): Use decl_function_context, not hack_decl_function_context. * pt.c (template_class_depth_real): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (is_member_template): Use decl_function_context, not hack_decl_function_context. Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (build_template_decl): Set DECL_VIRTUAL_CONTEXT, not DECL_CLASS_CONTEXT. (check_default_tmpl_args): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (push_template_decl_real): Likewise. (instantiate_class_template): Don't call add_friends. (tsubst_default_argument): Use DECL_CONTEXT, not DECL_REAL_CONTEXT. (tsubst_decl): Set DECL_VIRTUAL_CONTEXT, not DECL_CLASS_CONTEXT. Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (set_meangled_name_for_template_decl): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. * repo.c (repo_inline_used): Likewise. * search.c (current_scope): Adjust for new _CONTEXT macros. (context_for_name_lookup): Use CP_DECL_CONTEXT, not DECL_REAL_CONTEXT. (friend_accessible_p): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. (lookup_fnfields_here):Likewise. (check_final_overrider): Likewise. (init_vbase_pointers): Likewise. (virtual_context): Likewise. * semantics.c (finish_member_declaration): Just set DECL_CONTEXT. (expand_body): Use decl_function_context, not hack_decl_function_context. * tree.c (hack_decl_function_context): Remove. * typeck.c (build_x_function_call): Use DECL_CONTEXT, not DECL_CLASS_CONTEXT. * typeck2.c (error_not_base_type): Likewise. From-SVN: r32018
2000-02-10class.c (dfs_modify_vtables): Tweak calculation of functions to override.Mark Mitchell1-6/+10
* class.c (dfs_modify_vtables): Tweak calculation of functions to override. From-SVN: r31886
2000-02-07cp-tree.h (struct saved_scope): Add incomplete field.Jason Merrill1-2/+24
* cp-tree.h (struct saved_scope): Add incomplete field. (namespace_scope_incomplete): New macro. * decl.c (pushdecl): Use it. (hack_incomplete_structures): Use it. See through artificial binding levels. (mark_saved_scope): Mark it. Implement access control for nested types. * search.c (type_access_control): New fn. (accessible_p): Now we do perform access control for types. * semantics.c (deferred_type_access_control): New fn. (initial_deferred_type_access_control): New fn. (begin_function_definition): Call it. Add lookups parm. * decl.c (struct binding_level): Add this_class field. (pushlevel_class): Set it. (mark_binding_level): Mark it. (lookup_name_real): Use it. Call type_access_control. (mark_saved_scope): Mark lookups field. * cp-tree.h (flagged_type_tree): Add lookups field. (struct saved_scope): Add lookups field. (type_lookups): New macro. * parse.y (declmods): Now <ftype>. (parse_decl): Add lookups parm. Call initial_deferred_type_access_control. (lang_extdef): Clear type_lookups. (typed_declspecs, declmods, typespec): Set lookups field. (initdcl): Call deferred_type_access_control. (fn.def1, fn.def2, typed_declspecs1, initdcl0_innards, nomods_initdcl0, component_decl_1, named_parm): Adjust. * friend.c (is_friend): Nested classes are friends of their enclosing classes. * class.c (currently_open_derived_class): New fn. * method.c (hack_identifier): Use it. * lex.c (do_identifier): Remove obsolete code. * parse.y (typed_typespecs): Propagate new_type_flag properly. From-SVN: r31837
2000-02-06Makefile.in (call.o): Depend on $(EXPR_H).Kaveh R. Ghazi1-0/+1
* Makefile.in (call.o): Depend on $(EXPR_H). * call.c: Include "expr.h". * class.c (dump_class_hierarchy): Add prototype. * search.c (dfs_get_pure_virtuals): Likewise. From-SVN: r31811
2000-01-31Fix gdb testsuite regressions.Jim Wilson1-4/+9
* class.c (build_vtbl_or_vbase_field): New parameter fcontext. Store it in DECL_FCONTEXT. (build_vbase_pointer_fields, create_vtable_ptr): Fix callers. From-SVN: r31729
2000-01-31cp-tree.h (BINFO_VIRTUALS): Tweak documentation.Mark Mitchell1-450/+238
* cp-tree.h (BINFO_VIRTUALS): Tweak documentation. (CLASSTYPE_PRIMARY_BINFO): Use BINFO_PRIMARY_BINFO. (BINFO_PRIMARY_BINFO): New macro. (BF_DELTA): Rename to ... (BV_DELTA): ... this. (BF_VCALL_INDEX): Rename to ... (BV_VCALL_INDEX): ... this. (BF_FN): Rename to ... (BV_FN): ... this. * class.c (build_vbase_path): Adjust for changes to reverse_path. (set_rtti_entry): Rename BF_ macros to BV_ variants. (modify_vtable_entry): Simplify. (add_virtual_function): Rename BF_ macros to BV_ variants. (build_vtable_initializer): Likewise. (get_class_offset_1): Remove. (dfs_get_class_offset): Likewise. (get_class_offset): Likewise. (dfs_find_final_overrider): New function. (find_final_overrider): Likewise. (modify_one_vtable): Remove. (dfs_find_base): New function. (dfs_modify_vtables): Fold modify_one_vtable in here. Use find_final_overrider. (modify_all_vtables): Adjust. Set BV_VCALL_INDEX on new virtuals. (dfs_fixup_vtable_deltas): Remove. (override_one_vtable): Remove. (merge_overrides): Likewise. (layout_virtual_bases): Make sure BINFO_OFFSET is set right for unreal chilren of virtual bases. (finish_struct_1): Don't use merge_overrides. Don't use dfs_fixup_vtable_deltas. * tree.c (reverse_path): Return a TREE_LIST, not a chain of BINFOs. From-SVN: r31724
2000-01-31class.c (build_vtable): Rename to build_primary_vtable.Mark Mitchell1-53/+76
* cp/class.c (build_vtable): Rename to build_primary_vtable. (prepare_fresh_vtable): Rename to build_secondary_vtable. (make_new_vtable): New function. (modify_vtable_entry): Handle generation of new vtables correctly. (modify_one_vtable): Remove unused parameter. (dfs_fixup_vtable_deltas): Likewise. (override_one_vtable): Use build_secondary_vtable. (finish_struct_1): Use build_primary_vtable and build_secondary_vtable. From-SVN: r31707
2000-01-29class.c (build_vtbl_initializer): Add argument to build_vtable_entry call.Nathan Sidwell1-1/+2
* class.c (build_vtbl_initializer): Add argument to build_vtable_entry call. From-SVN: r31686
2000-01-29cp-tree.def (THUNK_DECL): Discuss vcall indices.Mark Mitchell1-182/+132
* cp-tree.def (THUNK_DECL): Discuss vcall indices. * cp-tree.h (BINFO_VIRTUALS): Update documentation. (BF_DELTA): New macro. (BF_VCALL_INDEX): Likewise. (BF_FN): Likewise. (THUNK_VCALL_OFFSET): Likewise. (make_thunk): Change prototype. * class.c (build_vtable_entry): Integrate build_vtable_entry_for_fn. Handle vcall indices. (build_vtable_entry_for_fn): Remove. (set_rtti_entry): Handle vcall indices. Use BF_DELTA, BF_VCALL_INDEX, BF_FN. (modify_vtable_entry): Integrate common code from modify_one_vtable and dfs_fixup_vtable_deltas. (add_virtual_function): Set BF_VCALL_INDEX. (build_vtbl_initializer): Simplify. Use BF_DELTA, BF_VCALL_INDEX, and BF_FN. (modify_one_vtable): Simplify. (dfs_fixup_vtable_deltas): Likewise. (override_one_vtable): Use BF_DELTA, BF_VCALL_INDEX, BF_FN. * method.c (make_thunk): Handle vcall indices. From-SVN: r31684
2000-01-28Compiler side new abi rtti (not enabled).Nathan Sidwell1-9/+29
* cp-tree.h (new_abi_rtti_p): New macro. (emit_support_tinfos): Prototype new function. (tinfo_decl_p): Likewise. (emit_tinfo_decl): Likwise. * rtti.c (TINFO_PSEUDO_TYPE, TINFO_VTABLE_DECL): New accessor macros. (doing_runtime): New local static. (init_rtti_processing): Add new-abi initializer. (get_tinfo_decl): Add new-abi logic. (tinfo_from_decl): Likewise. (build_dynamic_cast_1): Likewise. (qualifier_flags): New static function. (tinfo_base_init): Likewise. (generic_initializer): Likewise. (ptr_ref_initializer): Likewise. (ptmd_initializer): Likewise. (class_hint_flags): Likewise. (class_initializer): Likewise. (synthesize_tinfo_var): Likewise. (create_real_tinfo_var): Likewise. (create_pseudo_type_info): Likewise. (get_vmi_pseudo_type_info): Likewise. (create_tinfo_types): Likewise. (emit_support_tinfos): New global function. (tinfo_decl_p): New global predicate. (emit_tinfo_decl): New global function. * class.c (set_rtti_entry): Generalize for old and new rtti. (build_vtbl_initializer): Likewise. * decl2.c (finish_file): Likewise. From-SVN: r31668
2000-01-26call.c: PROTO -> PARAMS.Kaveh R. Ghazi1-80/+80
* call.c: PROTO -> PARAMS. * class.c: Likewise. * cp-tree.h: Likewise. * cvt.c: Likewise. * decl.c: Likewise. * decl.h: Likewise. * decl2.c: Likewise. * dump.c: Likewise. * errfn.c: Likewise. * error.c: Likewise. * except.c: Likewise. * expr.c: Likewise. * init.c: Likewise. * input.c: Likewise. * lex.c: Likewise. * lex.h: Likewise. * method.c: Likewise. * optimize.c: Likewise. * parse.y: Likewise. * pt.c: Likewise. * repo.c: Likewise. * rtti.c: Likewise. * search.c: Likewise. * semantics.c: Likewise. * spew.c: Likewise. * tree.c: Likewise. * typeck.c: Likewise. * typeck2.c: Likewise. * xref.c: Likewise. From-SVN: r31632
2000-01-25cp-tree.h (vcall_offset_in_vtable_p): New macro.Mark Mitchell1-36/+233
* cp-tree.h (vcall_offset_in_vtable_p): New macro. * class.c (build_vbase_offset_vtbl_entries): Fix typo in commment. (struct vcall_offset_data_s): New type. (dfs_vcall_offset_queue_p): New function. (dfs_build_vcall_offset_vtbl_entries): Likewise. (build_vcall_offset_vtbl_entries): Likewise. (layout_vtable_decl): Likewise. (num_vfun_entries): Likewise. (num_extra_vtbl_entries): Add the entries for vcall offsets. (build_vtbl_initializer): Likewise. (dfs_finish_vtabls): Use layout_vtable_decl. (modify_one_vtables): Always duplicate vtables under the new ABI. (finish_struct_1): Use layout_vtable_decl. From-SVN: r31619
2000-01-25class.c (layout_class_type): Put the fields required to make a class ↵Mark Mitchell1-7/+18
non-empty at the end... * class.c (layout_class_type): Put the fields required to make a class non-empty at the end, not the beginning, of the TYPE_FIELDs list. From-SVN: r31603
2000-01-24cp-tree.h (get_vtable_decl): Prototype new function.Nathan Sidwell1-23/+54
* cp-tree.h (get_vtable_decl): Prototype new function. * class.c (get_vtable_decl): New function. Broken out from ... (build_vtable): ... here. Use it. * decl2.c (finish_vtable_vardecl): Ignore dummy vtables created by get_vtable_decl. From-SVN: r31583
2000-01-23* class.c (dump_class_hierarchy): Print HOST_WIDE_INT properly.Brad Lucier1-3/+5
From-SVN: r31571
2000-01-20class.c (dump_class_hierarchy): Make format agree with argument; cast ↵Brad Lucier1-2/+2
pointer to unsigned long and print with %lx. * class.c (dump_class_hierarchy): Make format agree with argument; cast pointer to unsigned long and print with %lx. From-SVN: r31535
2000-01-18cp-tree.h (get_tinfo_fn_dynamic): Remove prototype.Nathan Sidwell1-1/+1
* cp-tree.h (get_tinfo_fn_dynamic): Remove prototype. (build_x_typeid): Likewise. (get_tinfo_fn): Likewise. (get_tinfo_fn_unused): Rename to ... (get_tinfo_decl): ... here. * rtti.c (build_headof): Replace logic error with assertion. (get_tinfo_fn_dynamic): Rename to ... (get_tinfo_decl_dynamic): ... here. Make static. Use complete_type_or_else. (build_x_typeid): Move into ... (build_typeid): ... here. Adjust call to get_tinfo_decl_dynamic. Use tinfo_from_decl. Simplify throw_bad_typeid expression. (get_tinfo_fn_unused): Rename to ... (get_tinfo_decl): ... here. Adjust comment. (get_tinfo_fn): Delete. (tinfo_from_decl): New static function. (get_typeid_1): Call get_tinfo_decl and tinfo_from_decl. (get_typeid): Use complete_type_or_else. (build_dynamic_cast_1): Adjust calls to get_tinfo_decl_dynamic. Simplify throw_bad_cast expression. * parse.y (primary): Adjust call to build_typeid. * except.c (build_eh_type_type_ref): Adjust call to get_tinfo_decl. Mark as used. * class.c (set_rtti_entry): Adjust call to get_tinfo_decl. * decl2.c (build_expr_from_tree): Adjust call to build_typeid. * parse.c: Regenerated. From-SVN: r31485
2000-01-18class.c (fixed_type_or_null): Don't clear NONNULL.Mark Mitchell1-5/+4
* class.c (fixed_type_or_null): Don't clear NONNULL. Document calling convention. (resolves_to_fixed_type_p): Document calling convention. * rtti.c (build_x_typeid): Initialize NONNULL. From-SVN: r31481
2000-01-17cp-tree.h (build_shared_int_cst): New function.Mark Mitchell1-41/+87
* cp-tree.h (build_shared_int_cst): New function. * call.c (build_over_call): Use DECL_VIRTUAL_CONTEXT, for clarity. * class.c (modify_vtable_entry): Likewise. (add_virtual_function): Split out code to generated shared INTEGER_CSTs to build_share_int_cst. (modify_all_vtables): Handle all the overridden functions here. Add overridden functions from non-primary virtual bases to the primary vtable. (finish_struct_1): Adjust call to modify_all_vtables. Add overridden functions from non-primary bases to the vtable. * tree.c (build_shared_int_cst): New function. From-SVN: r31476
2000-01-17cp-tree.h (scratchalloc): Remove.Mark Mitchell1-65/+65
* cp-tree.h (scratchalloc): Remove. (build_scratch_list): Likewise. * call.c (convert_class_to_reference): Replace build_scratch_list and build_expr_list with build_tree_list. (add_candidate): Replace scratchalloc with expralloc. Note memory leak. (build_user_type_conversion_1): Replace build_scratch_list and build_expr_list with build_tree_list. (build_new_op): Likewise. (build_op_delete_call): Likewise. (convert_like): Likewise. * cvt.c (ocp_convert): Likewise. * decl.c (start_decl): Likewise. (start_function): Likewise. (finish_destructor_body): Likewise. (maybe_build_cleanup_1): Likewise. * decl2.c (reparse_decl_as_expr): Likewise. * init.c (perform_member_init): Likewise. (expand_cleanup_for_base): Likewise. (build_builtin_delete_call): Likewise. (build_new_1): Likewise. (build_delete): Likewise. * method.c (do_build_assign_ref): Likewise. * parse.y (already_scoped_stmt): Likewise. (nontrivial_exprlist): Likewise. (net_initializer): Likewise. (initlist): Likewise. * parse.c: Regenerated. * rtti.c (build_x_typeid): Likewise. (build_dynamic_cast_1): Likewise. * typeck.c (build_x_compound_expr): Likewise. (build_static_cast): Likewise. (build_modify_expr): Likewise. * cp-tree.h (DECL_VINDEX): Add documentation. * class.c (build_vtable_entry): Likewise. (start_vtable): Add comment. (add_virtual_function): Replace pending_hard_virtuals with overridden_virtuals and pending_virtuals with new_virtuals. Replace redundant assignments with assertions. (check_for_override): Add comment. (check_bases_and_members): Replace pending_hard_virtuals with overridden_virtuals and pending_virtuals with new_virtuals. (create_vtbl_ptr): Likewise. (layout_class_type): Likewise. (finish_struct_1): Likewise. Add comments. From-SVN: r31473
2000-01-17class.c (finish_struct_1): Replace redundant code with assertions.Mark Mitchell1-11/+11
* class.c (finish_struct_1): Replace redundant code with assertions. From-SVN: r31454