Commit Graph

347 Commits

Author SHA1 Message Date
Richard Kenner
05bccae2ef tree.h (INT_CST_LT, [...]): Remove unneeded casts.
* 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-07 06:41:32 -05:00
Richard Kenner
fed3cef0db builtins.c (c_strlen): Use size_diffop and return ssizetype value.
* 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-27 16:39:40 -05:00
Jeff Law
d6a8bdff52 Fix copyrights
From-SVN: r32185
2000-02-26 13:16:12 -07:00
Mark Mitchell
4f1c5b7dbf Make DECL_CONTEXT mean the class in which a member function was declared, 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-16 23:54:23 +00:00
Kaveh R. Ghazi
158991b7e5 call.c: PROTO -> PARAMS.
* 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-26 20:51:37 +00:00
Jason Merrill
bff3ce71a1 error.c (dump_decl): operator new, not operatornew.
* error.c (dump_decl): operator new, not operatornew.

        * class.c (field_decl_cmp): A nontype is "greater" than a type.
        * search.c (lookup_field_1): Look for the last field with the
        desired name.

From-SVN: r31262
2000-01-06 18:54:34 -05:00
Alexandre Oliva
f6a898ba9e * error.c (dump_decl): Support named return values.
From-SVN: r31067
1999-12-22 08:52:49 +00:00
Mark Mitchell
4c6b7393dc cp-tree.h (TYPE_VIRTUAL_P): Rename to ...
* cp-tree.h (TYPE_VIRTUAL_P): Rename to ...
	(TYPE_POLYMORPHIC_P): ... this.
	(TYPE_USES_COMPLEX_INHERITANCE): Rename to ...
	(TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P): ... this.
	(TREE_CALLS_NEW): Remove.
	(TREE_MANGLED): Likewise.
	* call.c (build_vfield_ref): Use TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P,
	and TYPE_POLYMORPHIC_P.
	* class.c (check_bases): Likewise.
	(finish_base_struct): Likewise.
	(finish_struct_bits): Likewise.
	(check_for_override): Likewise.
	(finish_struct_1): Likewise.
	(get_vfield_name): Likewise.
	* decl.c (xref_basetypes): Likewise.
	* decl2.c (import_export_class): Likewise.
	(import_export_decl): Likewise.
	* error.c (dump_function_decl): Likewise.
	* pt.c (instantiate_class_template): Likewise.
	* repo.c (repo_inline_used): Likewise.
	* rtti.c (build_headof): Likewise.
	(get_tinfo_fn_dynamic): Likewise.
	(build_x_typeid): Likewise.
	(get_tinfo_var): Likewise.
	(build_dynamic_cast_1): Likewise.
	(synthesize_tinfo_fn): Likewise.
	* search.c (lookup_field_1): Likewise.
	(dfs_debug_mark): Likewise.
	(maybe_suppress_debug_info): Likewise.
	* typeck.c (build_component_ref): Likewise.
	(build_component_addr): Likewise.
	* typeck2.c (process_init_constructor): Likewise.

From-SVN: r31041
1999-12-21 00:19:01 +00:00
Jason Merrill
d67cdbc3fd error.c (dump_decl): operator==, not operator ==.
* error.c (dump_decl): operator==, not operator ==.
        (op_to_string): Likewise.

        * decl.c (compute_array_index_type): Handle null name.

        * decl2.c (ambiguous_decl): Fix to match comment.
        (lookup_using_namespace): Adjust.

        * decl2.c (import_export_class): Don't ignore dllimport.

From-SVN: r30935
1999-12-14 20:34:16 -05:00
Mark Mitchell
89c6e7ac34 dump.c (dequeue_and_dump): Dump DECL_NAMESPACE_ALIAS.
* dump.c (dequeue_and_dump): Dump DECL_NAMESPACE_ALIAS.
	* ir.texi (DECL_NAMESPACE_ALIAS): Document it.

	* error.c (dump_expr): Handle EXPR_WITH_FILE_LOCATION.

From-SVN: r30925
1999-12-14 18:11:32 +00:00
Mark Mitchell
f981720185 cp-tree.def (FUNCTION_NAME): New tree node.
* cp-tree.def (FUNCTION_NAME): New tree node.
	* cp-tree.h (current_function_name_declared): Tweak documentation.
	(lang_decl_flags): Add pretty_function_p, adjust dummy.
	(DECL_PRETTY_FUNCTION_P): New macro.
	* decl.c (cp_finish_decl): Handle declarations of __FUNCTION__,
	etc., in a template function.  Use at_function_scope_p instead of
	expanding it inline.
	* pt.c (tsubst_decl): Handle DECL_PRETTY_FUNCTION_P declarations
	specially.
	(tsubst): Handle FUNCTION_NAME.
	(tsubst_copy): Likewise.
	(instantiate_decl): Prevent redeclarations of __PRETTY_FUNCTION__,
	etc. in instantiation.
	* semantics.c (begin_compound_stmt): Declare __FUNCTION__, etc.,
	even in template functions.
	(setup_vtbl_ptr): Don't declare __PRETTY_FUNCTION in the
	conditional scope at the top of a destructor.

	* error.c (dump_function_decl): Use `[ with ... ]' syntax for
	specializations too.

From-SVN: r30625
1999-11-23 02:49:41 +00:00
Mark Mitchell
05fd666b63 error.c (dump_function_name): Don't crash if given a friend pseudo-instantiation.
* error.c (dump_function_name): Don't crash if given a friend
	pseudo-instantiation.

From-SVN: r30479
1999-11-10 22:31:29 +00:00
Mark Mitchell
b5ac18ea8c cp-tree.h (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Move here from pt.c.
* cp-tree.h (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Move here from pt.c.
	(TMPL_ARGS_DEPTH, TMPL_ARGS_LEVEL, SET_TMPL_ARGS_LEVEL): Likewise.
	(TMPL_ARG, SET_TMPL_ARG, NUM_TMPL_ARGS, TMPL_PARMS_DEPTH): Likewise.
	* error.c (dump_template_bindings): Remove unused parameter.
	Handle multiple levels of template parameters.
	(dump_template_decl): Use `parms', not `args', for template
	parameters.  Fix thinko.
	(dump_function_decl): Use DECL_TEMPLATE_INSTANTIATION.  Don't pass
	flags to dump_template_bindings.
	* pt.c (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Move to cp-tree.h.
	(TMPL_ARGS_DEPTH, TMPL_ARGS_LEVEL, SET_TMPL_ARGS_LEVEL): Likewise.
	(TMPL_ARG, SET_TMPL_ARG, NUM_TMPL_ARGS, TMPL_PARMS_DEPTH): Likewise.
	(tsubst_copy): Clarify variable name.
	(most_general_template): Robustify.

From-SVN: r29708
1999-09-29 17:24:21 +00:00
Nathan Sidwell
0acbb8d94d error.c (dump_template_parms): Don't use TS_PEDANTIC_NAME to change primary template rendering.
* error.c (dump_template_parms): Don't use TS_PEDANTIC_NAME
	to change primary template rendering.

From-SVN: r29707
1999-09-29 14:59:56 +00:00
Gabriel Dos Reis
612c671a4f Implement function template instantiation pretty printing.
1999-09-28  Gabriel Dos Reis  <gdr@codesourcery.com>

	Implement function template instantiation pretty printing.

        * pt.c (most_general_template): Adjust declaration.

        * cp-tree.h: (most_general_template): Declare.

        * error.c (dump_template_value): Rename to ...
        (dump_template_argument): This.
        (dump_template_argument_list): New function.
        (dump_type): Use it.
        (dump_template_parameter): New function.
        (dump_template_decl): Use it.
        (dump_template_bindings): New function.
        (dump_function_decl): Use it. Pretty print function template
        instantiations.

From-SVN: r29702
1999-09-29 01:10:44 +00:00
Nathan Sidwell
9e93bc9dcc Augment stringification of trees.
* cp-tree.h (tree_string_flags): New error stringifying enumeration.
	(fndecl_as_string, type_as_string_real, args_as_string,
	code_as_string, language_as_string, parm_as_string,
	op_as_string, assop_as_string, cv_as_string): Remove.
	(type_as_string, decl_as_string, expr_as_string): Adjust prototype.
	(context_as_string): Declare new function.
	* error.c (cp_printers): Move definition.
	(OB_UNPUT): Remove.
	(OB_END_TEMPLATE_ID): Adjust.
	(interesting_scope_p): Remove.
	(dump_scope): New static function.
	(dump_qualifiers): Adjust prototype, reimplement.
	(dump_template_value): Use tree_string_flags.
	(dump_type_real): Move back to dump_type.
	(dump_type): Adjust prototype. Use tree_string_flags.
	(dump_aggr_type): Likewise. Use dump_template_parms.
	(dump_type_prefix): Adjust prototype. Use tree_string_flags. Return pad flag.
	(dump_type_suffix): Adjust prototype. Use tree_string_flags.
	(dump_simple_decl): Likewise.
	(dump_decl): Likewise. Use dump_template_decl.
	(dump_template_decl): New static function broken out of dump_decl.
	(dump_function_decl): Adjust prototype. Use tree_string_flags.
	(dump_parameters): Likewise. Prefix space.
	(dump_exception_spec): Adjust prototype. Use tree_string_flags.
	(dump_function_name): Likewise. Use dump_template_parms.
	(dump_template_parms): New static function broken out of
	dump_function_name.
	(dump_expr_list): Adjust prototype. Use tree_string_flags.
	(dump_expr): Likewise.
	(fndecl_as_string): Removed
	(type_as_string_real): Removed
	(dump_binary_op): Adjust prototype. Use tree_string_flags.
	(dump_unary_op): Likewise.
	(type_as_string): Likewise.
	(expr_as_string): Likewise.
	(decl_as_string): Likewise.
	(context_as_string): New function.
	(lang_decl_name): Adjust.
	(decl_to_string): New static print callback.
	(expr_to_string): Likewise.
	(fndecl_to_string): Likewise.
	(code_as_string): Renamed to ...
	(code_to_string): ... here. Adjust.
	(language_as_string): Renamed to ...
	(language_to_string): ... here. Adjust.
	(parm_as_string): Renamed to ...
	(parm_to_string): ... here.
	(op_as_string): Renamed to ...
	(op_to_string): ... here.
	(assop_as_string): Renamed to ...
	(assop_to_string): ... here.
	(type_to_string): New static print callback.
	(args_as_string): Renamed to ...
	(args_to_string): ... here. Adjust.
	(cv_as_string): Renamed to ...
	(cv_to_string): ... here. Adjust.
	* pt.c (mangle_class_name_for_template): Use tree_string_flags.
	(print_template_context): Likewise.

From-SVN: r29673
1999-09-27 08:26:00 +00:00
Mark Mitchell
b3ab27f3c3 cp-tree.h (CPTI_CLEANUP_TYPE): New macro.
* cp-tree.h (CPTI_CLEANUP_TYPE): New macro.
	(cleanup_type): Likewise.
	(search_tree): Change prototype.
	* decl.c (local_variable_p): Adjust for new interface to
	search_tree.
	(check_default_argument): Likewise.
	* error.c (dump_expr): Handle INIT_EXPR.
	* except.c (expand_throw): Don't make cleanup_type a local static.
	* expr.c (cplus_expand_expr): Don't handle NEW_EXPR.
	* init.c (build_new): Call build_new_1 directly, rather than
	building a NEW_EXPR.
	(build_new_1): Tidy.  Don't build a VEC_INIT_EXPR except when
	processing file-scope initializers.
	* lex.c (init_parse): Add an opname_tab entry for INIT_EXPR.
	* tree.c: Include splay-tree.h
	(no_linkage_helper): Adjust for new interface to search_tree.
	(search_tree): Pass around pointers to tree nodes, rather than the
	nodes themselves.  Handle VEC_INIT_EXPR.
	(no_linkage_check): Adjust for new interface to search_tree.
	(mapcar): Handle VEC_INIT_EXPR.
	(target_remap): New variable.
	(bot_manip): Use it.
	(bot_replace): New function.
	(break_out_target_exprs): Use it to remap all variables used in a
	default argument expression.
	* typeck.c (build_modify_expr): Don't crash when outside a
	function and presented with an INIT_EXPR assignment
	* Makefile.in (tree.o): Depend on splay-tree.h.

From-SVN: r29659
1999-09-24 20:54:08 +00:00
Gabriel Dos Reis
5f77d6cc51 error.c: Reduce code duplication.
1999-09-17  Gabriel Dos Reis  <gdr@codesourcery.com>

        * error.c: Reduce code duplication.
        (dump_template_value): New function.
        (dump_type_real): Use it.
        (dump_decl): Likewise.
        (dump_function_name): Likewise.
        (dump_function_decl): Don't be too talkative about function return
        type variety.

From-SVN: r29469
1999-09-17 01:49:29 +00:00
Mark Mitchell
5d73aa6323 call.c (implicit_conversion): Robustify.
* call.c (implicit_conversion): Robustify.  Handle OFFSET_REFs.
	* cvt.c (ocp_convert): Complete the from and destination types.
	Adjust warning about functions always being `true' in conditionals.
	* decl.c (duplicate_decls): Don't play funny games with abort.
	* error.c (dump_expr): Handle OVERLOADs.
	* spew.c (probe_obstack): Remove.
	* typeck.c (condition_conversion): Use perform_implicit_conversion.

From-SVN: r29366
1999-09-13 00:35:00 +00:00
Kaveh R. Ghazi
e1def31b3f cp-tree.h (fndecl_as_string, [...]): Constify a char*.
* cp-tree.h (fndecl_as_string, type_as_string,
	type_as_string_real, args_as_string, decl_as_string,
	expr_as_string, code_as_string, language_as_string,
	parm_as_string, op_as_string, assop_as_string, cv_as_string,
	lang_decl_name, cp_file_of, lang_printable_name): Constify a char*.

	* errfn.c (cp_printer): Likewise.

	* error.c (cp_printer, fndecl_as_string, type_as_string_real,
	type_as_string, expr_as_string, decl_as_string, lang_decl_name,
	cp_file_of, code_as_string, language_as_string, parm_as_string,
	op_as_string, assop_as_string, args_as_string, cv_as_string):
	Likewise.

	* tree.c (lang_printable_name): Likewise.

From-SVN: r28968
1999-08-29 13:47:37 +00:00
Jason Merrill
df39af7db0 call.c (build_conditional_expr): Fix typo.
* call.c (build_conditional_expr): Fix typo.
	* typeck.c (build_modify_expr, COND_EXPR): Make sure we've got an
	lvalue before trying to mess with the sides.

	* error.c (dump_expr, CONVERT_EXPR): Handle (void) properly.

From-SVN: r28826
1999-08-24 17:23:56 -04:00
Mark Mitchell
40242ccfbd cp-tree.def (PSEUDO_DTOR_EXPR): New tree code.
* cp-tree.def (PSEUDO_DTOR_EXPR): New tree code.
	* decl2.c (build_expr_from_tree): Handle it.
	* error.c (dump_expr): Likewise.
	* pt.c (for_each_template_parm): Likewise.
	(tsubst_copy): Likewise.
	* tree.c (search_tree): Likewise.
	* semantics.c (finish_pseudo_destructor_call): Create it.

From-SVN: r28760
1999-08-19 08:06:17 +00:00
Mark Mitchell
558475f07c cp-tree.def (STMT_EXPR): New tree node.
* cp-tree.def (STMT_EXPR): New tree node.
	* cp-tree.h (STMT_EXPR_STMT): New macro.
	(store_return_init): Change prototype.
	(finish_named_return_value): New function.
	(expand_stmt): Likewise.
	(expand_body): Likewise.
	(begin_stmt_tree): Likewise.
	(finish_stmt_tree): Likewise.
	(expanding_p): New variable.
	(last_expr_type): Likewise.
	(building_stmt_tree): New macro.
	* decl.c (start_function): Use building_stmt_tree, not
	processing_template_decl, where appropriate.
	(store_parm_decls): Likewise.
	(store_return_init): Move most of the body to semantics.c.
	(finish_function): Use building_stmt_tree.
	(finish_stmt): Clear last_expr_type here.
	(cp_function): Add expanding_p, last_tree, last_expr_type.
	(push_cp_function_context): Save them.
	(pop_cp_function_context): Restore them.
	* decl2.c (setup_vtbl_ptr): Move to semantics.c.
	* error.c (dump_expr): Handle STMT_EXPR.
	* except.c (expand_start_catch_block): Use building_stmt_tree.
	Use add_decl_stmt.
	* expr.c (cplus_expand_expr): Handle STMT_EXPR.
	(do_case): Move add_tree call to semantics.c.
	* parse.y (return_init): Use finish_named_return_value.
	(for.init.statement): Use finish_expr_stmt.
	* parse.c: Regenerated.
	* pt.c (do_pushlevel): Move to semantics.c.
	(do_poplevel): Likewise.
	(tsubst_copy): Handle STMT_EXPR instead of BIND_EXPR.
	(tsubst_expr): Don't expand all the way to RTL here.  Handle
	RETURN_INIT and CTOR_INITIALIZER.
	(instantiate_decl): Call expand_body after tsubst'ing into
	DECL_SAVED_TREE.
	* semantics.c (expand_stmts): New function.
	(expanding_p): New variable.
	(last_expr_type): Likewise.
	(finish_expr_stmt): Use building_stmt_tree.
	(begin_if_stmt): Likewise.
	(finish_if_stmt_cond): Likewise.
	(finish_then_clause): Likewise.
	(begin_else_clause): Likewise.
	(finish_else_clause): Likewise.
	(begin_while_stmt): Likewise.
	(finish_while_stmt_cond): Likewise.
	(finish_while_stmt): Likewise.
	(finish_do_body): Likewise.
	(finish_do_stmt): Likewise.
	(finish_return_stmt): Likewise.
	(begin_for_stmt): Likewise.
	(fnish_for_init_stmt): Likewise.
	(finish_for_cond): Likewise.
	(finish_for_expr): Likewise.
	(finish_for_stmt): Likewise.
	(finish_break_stmt): Likewise.
	(finish_continue_stmt): Likewise.
	(finish_switch_cond): Likewise.
	(finish_switch_stmt): Likewise.
	(finish_case_label): Call add_tree here if necessary.
	(finish_goto_statement): Use building_stmt_tree.
	(begin_try_block): Likewise.
	(begin_function_try_block): Likewise.
	(finish_try_block): Likewise.
	(finish_function_try_block): Likewise.
	(finish_handler_sequence): Likewise.
	(finish_function_handler_sequence): Likewise.
	(begin_handler): Likewise.
	(finish_handler_parms): Likewise.
	(finish_handler): Likewise.
	(begin_compound_stmt): Likewise.
	(finish_compound_stmt): Likewise.
	(finish_asm_stmt): Likewise.
	(finish_label_stmt): Likewise.
	(finish_named_return_value): New function.
	(setup_vtbl_ptr): Moved here from decl2.c.
	(do_pushlevel): Moved here from pt.c.
	(do_poplevel): Likewise.
	(begin_stmt_expr): Use building_stmt_tree.
	(finish_stmt_expr): Likewise.  Build a STMT_EXPR, not a BIND_EXPR,
	when building_stmt_tree.
	(begin_stmt_tree): New function.
	(finish_stmt_tree): Likewise.
	(expand_stmt): Likewise.
	(expand_body): Likewise.
	* tree.c (build_cplus_method_type): Make sure the argument types
	end up on the same obstack as the METHOD_TYPE.
	(search_tree): Handle COMPOUND_EXPR, MODIFY_EXPR,
	THROW_EXPR, STMT_EXPR.
	(mapcar): Break out common cases.  Handle COMPOUND_EXPR,
	MODIFY_EXPR, THROW_EXPR, STMT_EXPR, RTL_EXPR.  Abort, rather than
	sorry, if an unsupported node is encountered.
	* typeck.c (require_complete_type_in_void): Handle BIND_EXPR.
	(c_expand_return): Don't call add_tree here.

From-SVN: r28729
1999-08-16 19:01:36 +00:00
Mark Mitchell
6eabb2412f extend.texi (C++ Signatures): Remove node.
* extend.texi (C++ Signatures): Remove node.
	* invoke.texi: Remove discussion of -fhandle-signatures,
	signature, sigof, __signature__, and __sigof__.

	* Make-lang.in (CXX_SRCS): Remove sig.c.
	* Makefile.in (CXX_OBJS): Remove sig.o.
	(sig.o): Remove.
	* cp-tree.h (CPTI_OPAQUE_TYPE): Remove.
	(CPTI_SIGNATURE_TYPE): Likewise.
	(CPTI_SIGTABLE_ENTRY_TYPE): Likewise.
	(opaque_type_node): Likewise.
	(signature_type_node): Likewise.
	(sigtable_entry_type): Likewise.
	(flag_handle_signatures): Likewise.
	(lang_type): Remove is_signature, is_signature_pointer,
	is_signature_reference, has_opaque_typedecls,
	sigtables_has_been_generated.  Adjust dummy.  Remove signature,
	signature_pointer_to, signature_reference_to.
	(IS_SIGNATURE): Remove.
	(SET_SIGNATURE): Remove.
	(CLEAR_SIGNATURE): Remove.
	(IS_SIGNATURE_POINTER): Remove.
	(IS_SIGNATURE_REFERENCE): Remove.
	(SIGNATURE_HAS_OPAQUE_TYPEDECLS): Remove.
	(SIGTABLE_HAS_BEEN_GENERATED): Remove.
	(CLASSTYPE_SIGNATURE): Remove.
	(SIGNATURE_TYPE): Remove.
	(SIGNATURE_METHOD_VEC): Remove.
	(SIGNATURE_POINTER_TO): Remove.
	(SIGNATURE_REFERENCE_TO): Remove.
	(lang_decl_flags): Remove is_default_implementation.  Rename
	memfunc_pointer_to to saved_tree.
	(IS_DEFAULT_IMPLEMENTATION): Remove.
	(DECL_MEMFUNC_POINTER_TO): Remove.
	(DECL_MEMFUNC_POINTING_TO): Remove.
	(DECL_SAVED_TREE): Adjust definition.
	(tag_types): Remove signature_type_node.
	(SIGNATURE_FIELD_NAME): Remove.
	(SIGNATURE_FIELD_NAME_FORMAT): Likewise.
	(SIGNATURE_OPTR_NAME): Likewise.
	(SIGNATURE_SPTR_NAME): Likewise.
	(SIGNATURE_POINTER_NAME): Likewise.
	(SIGNATURE_POINTER_NAME_FORMAT): Likewise.
	(SIGNATURE_REFERENCE_NAME): Likewise.
	(SIGNATURE_REFERNECE_NAME_FORMAT): Likewise.
	(SIGTABLE_PTR_TYPE): Likewise.
	(SIGTABLE_NAME_FORMAT): Likewise.
	(SIGTABLE_NAME_FORMAT_LONG): Likewise.
	(SIGTABLE_TAG_NAME): Likewise.
	(SIGTABLE_VB_OFF_NAME): Likewise.
	(SIGTABLE_VT_OFF_NAME): Likewise.
	(finish_base_specifiers): Change prototype.
	(build_signature_pointer_type): Remove.
	(build_signature_reference_type): Remove.
	(build_signature_pointer_constructor): Remove.
	(build_signature_method_call): Remove.
	(build_optr_ref): Likewise.
	(append_signature_fields): Likewise.
	(signature_error): Likewise.
	* call.c (build_this): Remove signature support.
	(build_over_call): Likewise.
	(build_new_method_call): Likewise.
	* class.c (add_implicitly_declared_members): Likewise.
	(finish_struct_1): Likewise.
	(finish_struct): Likewise.
	* cvt.c (cp_convert_to_pointer): Likewise.
	(convert_to_pointer_force): Likewise.
	(ocp_convert): Likewise.
	* decl.c (sigtable_decl_p): Remove.
	(init_decl_processing): Remove support for signatures.
	(cp_finish_decl): Likewise.
	(grokdeclarator): Likewise.
	(grokparms): Likewise.
	(xref_tag): Likewise.
	(start_function): Likewise.
	(start_method): Likewise.
	* decl2.c (finish_sigtable_vardecl): Remove.
	(flag_handle_signatures): Remove.
	(lang_f_options): Remove handle-signatures.
	(grokfield): Remove support for signatures.
	(grokbitfield): Likewise.
	(finish_file): Likewise.
	(reparse_absdcl_as_casts): Likewise.
	* error.c (dump_type_real): Likewise.
	(dump_function_decl): Likewise.
	* friend.c (make_friend_class): Likewise.
	* gxx.gperf: Remove __signature__, signature, __sigof__, sigof.
	* hash.h: Regenerated.
	* init.c (build_new_1): Remove support for signatures.
	* lang-options.h: Remove -fhandle-signatures,
	-fno-handle-signatures.
	* lex.c (init_parse): Remove support for signatures.
	(yyprint): Likewise.
	* lex.h (rid): Remove RID_SIGNATURE.
	* method.c (build_decl_overload_real): Remove support for
	signatures.
	(hack_identifier): Likewise.
	* parse.y (base_class): Likewise.
	(base_class.1): Likewise.
	(access_specifier): Likewise.
	* search.c (lookup_member): Likewise.
	* semantics.c (finish_qualified_object_call_expr): Likewise.
	(finish_template_type_parm): Likewise.
	(begin_class_definition): Likewise.
	(finish_base_specifier): Likewise.
	* sig.c: Remove.
	* tree.c (build_cplus_method_type): Remove support for signatures.
	* typeck.c (require_complete_type): Likewise.
	(c_sizeof): Likewise.
	(c_alignof): Likewise.
	(build_object_ref): Likewise.
	(build_component_ref): Likewise.
	(build_indirect_ref): Likewise.
	(build_c_cast): Likewise.
	(build_modify_expr): Likewise.
	(convert_for_initialization): Likewise.
	* typeck2.c (signature_error): Remove.
	(store_init_value): Remove support for signatures.
	(digest_init): Likewise.
	(build_x_arrow): Likewise.
	(build_functional_cast): Likewise.
	* xref.c (GNU_xref_decl): Likewise.

From-SVN: r28677
1999-08-11 20:22:41 +00:00
Kaveh R. Ghazi
9c0758dde6 class.c (count_fields, [...]): Add static prototype.
* class.c (count_fields, add_fields_to_vec): Add static prototype.

	* cp-tree.h (opname_tab, assignop_tab, operator_name_string,
	get_id_2, composite_pointer_type, dump_node_to_file): Constify a
	char*.

	* decl.c (named_label_list, cp_finish_decl, grokdeclarator):
	Constify a char*.

	* decl2.c (finish_static_data_member_decl, grokfield): Constify a
	char*.

	* dump.c (queue_and_dump_index, dump_int, dump_string,
	dump_string_field, dequeue_and_dump, dump_node_to_file): Constify
	a char*.
	(dump_stmt): Add static prototype.

	* errfn.c (cp_thing): Constify a char*.

	* error.c (dump_unary_op, dump_binary_op, aggr_variety,
	dump_aggr_type, dump_global_iord, dump_decl, dump_function_name,
	dump_expr): Constify a char*.

	* lex.c (extend_token_buffer_to, pragma_getc, pragma_ungetc,
	read_line_number): Add static prototype.
	(opname_tab, assignop_tab, operator_name_string): Constify a char*.
	(real_yylex): Move label `letter' into the scope where it is used.

	* method.c (build_mangled_template_parm_index, build_overload_int,
	build_decl_overload_real, get_id_2): Constify a char*.

	* search.c (check_final_overrider): Make static.

	* typeck.c (composite_pointer_type): Constify a char*.

From-SVN: r28588
1999-08-07 22:28:52 +00:00
Mark Mitchell
2adeacc9b5 error.c (dump_expr): Handle EXACT_DIV_EXPR.
* error.c (dump_expr): Handle EXACT_DIV_EXPR.
	(dump_binary_op): Bulletproof.
	* lex.c (init_parse): Set opname_tab[EXACT_DIV_EXPR].
	* tree.c (search_tree): Don't enumerate all the nodes of classes
	`1', `2', and `<'; handle them generically.  Don't be sorry about
	"unrecognized tree codes"; just abort.
	(no_linkage_check): Don't do linkage checks for templates.

	* tree.c (cp_build_qualified_type_real): Handle
	pointer-to-member-function types correctly.

From-SVN: r28550
1999-08-06 18:20:27 +00:00
Mark Mitchell
83f2ccf4f8 cp-tree.h (BINFO_VIRTUALS): Document new format.
* cp-tree.h (BINFO_VIRTUALS): Document new format.
	* class.c (modify_one_vtable): Change prototype accordingly.
	(modify_all_vtables): Likewise.
	(modify_all_direct_vtables): Likewise.
	(modify_all_indirect_vtables): Likewise.
	(build_vtable_entry_for_fn): New function.
	(set_rtti_entry): Simplify for new BINFO_VIRTUALS format.
	(modify_vtable_entry): Likewise.
	(add_virtual_function): Likewise.
	(build_vtbl_initializer): New function.
	(finish_vtbls): Simplify for new BINFO_VIRTUALS format.
	(fixup_vtable_deltas1): Likewise.
	(fixup_vtable_deltas): Likewise.
	(override_one_vtable): Likewise.
	(finish_struct_1): Likewise.
	* error.c (dump_expr): Likewise.
	* search.c (get_abstract_virtuals_1): Likewise.
	(get_abstract_virtuals): Likewise.
	(expand_upcast_fixups): Likewise.
	* tree.c (debug_binfo): Likewise.
	* decl2.c (mark_vtable_entries): Don't bash abstract virtuals to
	__pure_virtual here.

From-SVN: r28298
1999-07-27 18:15:21 +00:00
Mark Mitchell
27b8d0cd53 call.c (NEED_TEMPORARY_P): New macro.
* call.c (NEED_TEMPORARY_P): New macro.
	(standard_conversion): Set it, for derived-to-base conversions.
	(reference_related_p): New function.
	(reference_compatible_p): Likewise.
	(convert_class_to_reference): Likewise.
	(direct_reference_binding): Likewise.
	(reference_binding): Rework for standards-compliance.
	(convert_like): Adjust accordingly.
	(maybe_handle_ref_bind): Simplify; the right conversion sequences
	are now built up in reference_binding.
	(initialize_reference): New function.
	* cp-tree.h (ICS_USER_FLAG): Document.
	(ICS_THIS_FLAG): Likewise.
	(ICS_BAD_FLAG): Likewise.
	(NEED_TEMPORARY_P): Likewise.
	(cp_lvalue_kind): New type.
	(real_lvalue_p): Return it.
	* error.c (dump_expr): Provide more accurate representation for
	AGGR_INIT_EXPRs.
	* init.c (expand_default_init): Do not try to perform implicit
	conversions for a brace-enclosed initializer.
	* search.c (lookup_conversions): Document.
	* tree.c (lvalue_p_1): Return a cp_lvalue_kind.  Calculate
	appropriately.
	(real_lvalue_p): Adjust accordingly.
	(lvalue_p): Likewise.
	(build_cplus_new): Don't allow the creation of an abstract class.
	* typeck.c (convert_for_initialization): Use initialize_reference.

From-SVN: r28221
1999-07-23 01:01:16 +00:00
Jason Merrill
dcd08efc5f error.c (dump_type_real): Handle TREE_LIST again.
* error.c (dump_type_real): Handle TREE_LIST again.
	* typeck.c (comp_target_parms): Don't complain about
	converting from () to (...) if !flag_strict_prototype.
	* decl.c (grokdeclarator): Update the names of all variants when
	de-anonymizing.

From-SVN: r27792
1999-06-27 20:13:17 -04:00
Mark Mitchell
0045e0bc3c decl.c (expand_static_init): When building an anonymous function for use with atexit...
* decl.c (expand_static_init): When building an anonymous function
	for use with atexit, compute its body before and after entering
	the function.
	* error.c (dump_expr): Handle BIND_EXPR, LOOP_EXPR, and
	EXIT_EXPR.

From-SVN: r27612
1999-06-19 11:11:43 +00:00
Jason Merrill
05e0b2f47c init.c (build_offset_ref): Wrap baselinks in OFFSET_REF, too.
* init.c (build_offset_ref): Wrap baselinks in OFFSET_REF, too.
	Don't bother wrapping an OFFSET_TYPE around unknown_type_node.
	(resolve_offset_ref): Don't handle a raw baselink.
	* cvt.c (build_expr_type_conversion): Likewise.
	* typeck.c (decay_conversion, build_c_cast, convert_for_assignment,
	convert_for_initialization): Likewise.
	* class.c (instantiate_type): Handle seeing a baselink under an
	OFFSET_REF.
	* error.c (dump_expr): Likewise.
	* pt.c (for_each_template_parm): Likewise.
	(resolve_overloaded_unification): Likewise.
	* tree.c (is_overloaded_fn, really_overloaded_fn): Likewise.
	* typeck.c (expr_sizeof): Also complain about other permutations
	of overloaded functions.

From-SVN: r26861
1999-05-10 08:12:58 -04:00
Mark Mitchell
0aafb128c0 cp-tree.h (lang_decl_flags): Remove returns_first_arg and preserves_first_arg.
* cp-tree.h (lang_decl_flags): Remove returns_first_arg and
	preserves_first_arg.  Enlarge dummy accordingly.
	(DECL_TINFO_FN_P): New macro.
	(SET_DECL_TINO_FN_P): Likeiwse.
	(DECL_RETURNS_FIRST_ARG): Remove.
	(DECL_PRESERVES_THIS): Likewise.
	(DECL_INIT_PRIORITY): New macro.
	(finish_struct_1): Change prototype.
	(cat_namespace_levels): Remove prototype.
	(vtable_decl_p): New prototype.
	(vtype_decl_p): Likewise.
	(sigtable_decl_p): Likewise.
	(walk_globals_pred): New typedef.
	(walk_globals_fn): Likewise.
	(walk_globals): New prototype.
	(walk_namespaces_fn): New typedef.
	(walk_namespaces): New prototype.
	(wrapup_globals_for_namespace): Likewise.
	(walk_vtables): Remove prototype.
	(walk_sigtables): Likewise.
	(instantiate_pending_templates): New prototype.
	* class.c (finish_struct_1): Don't return a value.
	* decl.h (pending_statics): Remove declaration.
	* decl.c (walk_namespaces_r): New function.
	(walk_globals_r): Likewise.
	(vtable_decl_p): Likewise.
	(vtype_decl_p): Likewise.
	(sigtable_decl_p): Likewise.
	(walk_namespaces): Likewise.
	(walk_globals_data): New type.
	(walk_globals): New function.
	(wrapup_globals_for_namespace): Likewise.
	(expand_static_init): Remove assertion.  Remove redundancy in
	conditional.  Don't put static data members in static_aggregates
	Tidy.
	(finish_function): Remove redundancy in conditional.  Don't set
	DECL_RETURNS_FIRST_ARG.
	(cat_namespace_levels): Remove.
	* decl2.c: Include splay-tree.h and varray.h.
	(priority_info_s): New structure.
	(finish_vtable_vardecl): Change prototype.  Adjust for new calling
	conventions.
	(prune_vtable_vardecl): Likewise.
	(finish_sigtable_vardecl): Likewise.
	(setup_initp): Remove.
	(do_dtors): Remove.
	(do_ctors): Remove.
	(start_static_storage_duration_function): New function.
	(generate_inits_for_priority): Likewise.
	(finish_static_storage_duration_function): Likewise.
	(get_priority_info): Likewise.
	(do_static_initialization): Likewise.
	(do_static_destruction): Likewise.
	(do_static_initialization_and_destruction): Likewise.
	(generate_ctor_or_dtor_function): Likewise.
	(generate_ctor_and_dtor_functions_for_priority): Likewise.
	(pending_statics): Make it a varray.
	(pending_statics_used): New variable.
	(saved_inlines): Make it a varray.
	(saved_inlines_used): New variable.
	(finish_static_data_member): Change method of updating
	pending_statics.
	(mark_inline_for_output): Remove #if 0'd code.  Change method of
	updating saved_inlines.
	(walk_vtables): Remove.
	(walk_sigtables): Likewise.
	(import_export_decl): Use DECL_TINFO_FN_P.
	(pending_templates): Remove declaration.
	(maybe_templates): Likewise.
	(static_aggregates_initp): Likewise.
	(setup_initp): Likewise.
	(finish_objects): Simplify.
	(INITIALIZE_P_IDENTIFIER): New macro.
	(PRIORITY_IDENTIFIER): New macro.
	(SSDF_IDENTIFIER): New macro.
	(initialize_p_decl): New variable.
	(priority_decl): Likewise.
	(ssdf_decl): Likewise.
	(priority_info_map): Likewise.
	(finish_file): Recode output of static intializers and other
	file-scope finalization tasks.
	* error.c (OB_END_TEMPLATE_ID): New macro.
	(dump_type_real): Use it.
	(dump_decl): Likewise.
	(dump_function_name): Likewise.
	* lex.c (set_typedecl_interface_info): Adjust for new walk_globals
	interface.
	(check_newline): Use walk_globals, not walk_vtables.
	* pt.c (pending_tempalte_expansions): Remove.
	(set_vardecl_interface_info): Likewise.
	(pending_templates): Make static.
	(maybe_templates): Likewise.
	(instantiate_class_template): Adjust call to finish_struct_1.
	(instantiate_pending_templates): New function.
	* rtti.c (get_tinfo_fn): Use SET_DECL_TINFO_FN_P.
	* tree.c (static_aggregates_initp): Remove.
	(cp_valid_lang_attribute): Don't use it; use DECL_INIT_PRIORITY
	instead.
	* Makefile.in (decl2.o): Depend on varray.h and splay-tree.h.

From-SVN: r26594
1999-04-22 23:13:12 +00:00
Mark Mitchell
337c90cc04 cp-tree.h (build_binary_op): Remove unneeded parameter.
* cp-tree.h (build_binary_op): Remove unneeded parameter.
	* class.c (build_vrable_entry_ref): Adjust call to
	build_binary_op.
	* decl.c (expand_static_init): Likewise.
	(grokdeclarator): Likewise.
	(finish_function): Likewise.
	* decl2.c (delete_sanity): Likewise.
	(do_dtors): Likewise.
	(do_ctors): Likewise.
	* error.c (dump_type_suffix): Likewise.
	* expr.c (cplus_expand_expr): Likewise.
	* init.c (resolve_offset_ref): Likewise.
	(build_new): Likewise.
	(build_new_1): Likewise.
	(build_vec_delete_1): Likewise.
	(expand_vec_init_catch_clause): Likewise.
	(build_delete): Likewise.
	* pt.c (tsubst): Likewise.
	* rtti.c (synthesize_tinfo_fn): Likewise.
	* search.c (expand_upcast_fixups): Likewise.
	(expand_direct_vtbls_init): Likewise.
	* typeck.c (get_member_function_from_ptrfunc): Likewise.
	(build_binary_op_nodefault): Likewise.
	(point_int_sum): Likewise.
	(pointer_diff): Likewise.
	(build_unary_op): Likewise.
	(build_modify_expr): Likewise.
	(get_delta_difference): Likewise.
	(build_ptrmemfunc): Likewise.
	(expand_ptrmemfunc_cst): Likewise.

From-SVN: r26566
1999-04-20 21:48:52 +00:00
Mark Mitchell
7ac7b28f2e error.c (dump_type_real): If a typename is a template-id, put out the template arguments.
* error.c (dump_type_real): If a typename is a template-id, put
	out the template arguments.
	(dump_expr): Handle TEMPLATE_ID_EXPR.
	* pt.c (lookup_template_class): Now that full arguments are
	available everywhere, remove code that tried to guess them.

From-SVN: r26335
1999-04-10 10:51:09 +00:00
Mark Mitchell
5082a35587 error.c (dump_expr): Don't crash on INDIRECT_REFs whose operands don't have types.
* error.c (dump_expr): Don't crash on INDIRECT_REFs whose operands
	don't have types.

From-SVN: r26300
1999-04-08 20:16:51 +00:00
Mark Mitchell
8f0327178b tinfo.h (__class_type_info): Fix illegal declaration.
1999-04-02  Mark Mitchell  <mark@codesourcery.com>
	* tinfo.h (__class_type_info): Fix illegal declaration.
	* cp-tree.def (TEMPLATE_ID_EXPR): Update comment.
	* cp-tree.h (INHERITED_VALUE_BINDING_P): New macro.
	(IDENTIFIER_CLASS_VALUE): Improve documentation.
	(is_properly_derived_from): Declare.
	(invalidate_class_lookup_cache): Likewise.
	(maybe_maybe_note_name_used_in_class): Likewise.
	(note_name_declared_in_class): Likewise.
	(push_using_decl): Remove duplicate declaration.
	(id_in_current_class): Remove declaration.
	(push_class_binding): Change prototype.
	(clear_identitifer_class_values): Declare.
	* call.c (is_properly_derived_from): Make it global.
	(build_new_function_call): Be careful about updating candidates.
	(build_new_method_call): Handle COMPONENT_REFs.  Don't crash when
	asked to make illegal calls.
	* class.c: Include splay-tree.h.
	(class_stack_node): Add names_used slot.
	(check_member_decl_is_same_in_complete_scope): Remove.
	(add_method): Fix comment.  Push the declaration into class
	scope.
	(finish_struct_1): When popping the class, pop the bindings too.
	Remove check for data member/function member conflict.
	(finish_struct): Remove calls to
	check_member_decl_is_same_in_complete_scope.  Change calls to
	popclass.
	(pushclass): Clear names_used in the class stack entry.
	Use invalidate_class_lookup_cache to remove cached entries, rather
	than magic values with popclass.  Clear IDENTIFIER_CLASS_VALUE
	before entering a new class.  Remove dead code.  Don't mess with
	current_function_decl when pushing declarations.
	(invalidate_class_lookup_cache): New function, split out from ...
	(popclass): Here.  Clean up names_used on our way out.
	(instantiate_type): Adjust.
	(build_self_reference): Don't push the declaration here.
	(maybe_note_name_used_in_class): New function.
	(note_name_declared_in_class): Likewise.
	* decl.c (add_binding): Change prototype.
	(find_class_binding_level): New function.
	(innermost_nonclass_level): Likewise.
	(current_binding_level): Update documentation.
	(inner_binding_level): Remove.  Replace with current_binding_level
	throughout.
	(push_binding_level): Remove special handling of
	class_binding_level.
	(pop_binding_level): Likewise.  Use find_class_binding_level.
	(suspend_binding_level): Likewise.
	(global_bindings_p): Use innermost_nonclass_level.
	(toplevel_bindings_p): Likewise.
	(namespace_bindings_p): Likewise.
	(pseudo_global_level_p): Likewise.
	(push_binding): Clear INHERITED_VALUE_BINDING_P.
	(add_binding): Check for illegal multiple declarations.  Return a
	value indicating whether or not the new binding was legal.
	(push_local_binding): Skip over class binding levels.  Check
	return value from add_binding.
	(push_class_binding): Set INHERITED_VALUE_BINDING_P.  Call
	note_name_declared_in_class.
	(pushlevel_class): Remove "fake out the rest of the compiler"
	code.
	(poplevel_class): Reset IDENTIFIER_CLASS_VALUEs.
	(clear_identifier_class_values): New function.
	(pop_from_top_level): Use it.
	(pop_everything): Tweak.
	(maybe_process_template_type_declaration): Don't push the
	declaration for the template here.
	(pushtag): Don't push tag declarations into class scope here.
	(pushdecl): Apply DeMorgan's law for readability.
	(pushdecl_class_level): Remove special-case code for
	TYPE_BEING_DEFINED.  Handle OVERLOADs and anonymous unions.
	(push_class_level_bindng): Deal with inherited bindings.
	(lookup_name_real): Remove special-case code for
	TYPE_BEING_DEFINED, and some implicit typename magic.
	(grokdeclarator): Handle COMPONENT_REF for a template function.
	(build_enumerator): Don't call pushdecl_class_level here.
	(id_in_current_class): Remove.
	* decl2.c (grokfield): Don't call pushdecl_class_level or
	check_template_shadow.
	* errfn.c (cp_file_of): Don't declare.
	(cp_line_of): Likewise.
	* error.c (dump_decl): Handle an OVERLOAD.
	(cp_file_of): Likewise.
	(cp_line_of): Likewise.
	* init.c (build_member_call): Handle a COMPONENT_REF.
	* lex.c (do_identifier): Call maybe_note_name_used_in_class, not
	pushdecl_class_level.
	* method.c (hack_identifier): Build COMPONENT_REFs for references
	to member templates as well as member functions.  Remove dead
	code.
	* parse.y (left_curly): Remove.
	(nonnested_type): Call maybe_note_name_used_in_class, not
	pushdecl_class_level.
	* parse.c: Regenerated.
	(nested_name_specifier_1): Likewise.
	* pt.c (check_explicit_specialization): Adjust, for robustness.
	(check_template_shadow): Handle OVERLOADs.
	(build_template_decl): Set DECL_CONSTRUCTOR_P on the
	TEMPLATE_DECL, if appropriate.
	* search.c (envelope_add_decl): Remove.
	(dfs_pushdecls): Likewise.
	(dfs_compress_decls): Likewise.
	(dfs_push_decls): New function.
	(dfs_push_type_decls): Likewise.
	(setup_class_bindings): Likewise.
	(template_self_reference_p): Likewise.
	(lookup_field_r): Use it.
	(looup_member): Remove old comment.  Deal with ambiguity.
	(push_class_decls): Use dfs_push_decls and dfs_push_type_decls,
	and remove envelope processing.
	* semantics.c (begin_class_definition): Let pushclass push
	declarations for base classes.
	(finish_member_declaration): Push declarations into class scope.
	* typeck.c (build_component_ref): Just put an OVERLOAD into the
	COMPONENT_REF, not a TREE_LIST of an OVERLOAD.
	(build_x_function_call): Deal with OVERLOAD.  Handle template-ids.
	* Makefile.in (class.o): Depend on splay-tree.h.

From-SVN: r26133
1999-04-02 15:36:57 +00:00
Kaveh R. Ghazi
d8e178a02b Warning fixes:
* call.c (op_error): Const-ify a char*.
        (add_candidate, source_type, add_warning): Add static prototype.
        (print_z_candidates): Const-ify a char*.
        * class.c (resolve_address_of_overloaded_function,
        fixed_type_or_null, build_vtable_entry_ref): Add static prototype.
        (get_vtable_name, finish_struct_1): Const-ify a char*.
        * cvt.c (convert_to_reference): Likewise.
        * decl.c (redeclaration_error_message, record_builtin_type,
        record_unknown_type, member_function_or_else, bad_specifiers):
        Likewise.
        (find_binding, select_decl, unqualified_namespace_lookup,
        lookup_flags, qualify_lookup, record_builtin_java_type, tag_name):
        Add static prototype.
        (warn_extern_redeclared_static, duplicate_decls, pushdecl,
        implicitly_declare, record_builtin_java_type, define_function,
        grok_op_properties, tag_name): Const-ify a char*.
        * cp-tree.h (FORMAT_VBASE_NAME): Allow parameter `BUF' to be const.
        (define_function, finish_builtin_type): Const-ify a char*.
        (cp_error, cp_error_at, cp_warning, cp_warning_at, cp_pedwarn,
        cp_pedwarn_at, cp_compiler_error, cp_sprintf): Add prototype args.
        (file_name_nondirectory): Const-ify a char*.
        (init_filename_times): Don't prototype.
        (compiler_error): Prototype.
        (yyerror, init_repo): Const-ify a char*.
        (build_srcloc): Don't prototype.
        (build_x_indirect_ref, build_indirect_ref, build_component_addr):
        Const-ify a char*.
        (warn_for_assignment): Don't prototype.
        (convert_for_initialization, readonly_error, check_for_new_type,
        GNU_xref_begin, GNU_xref_file, GNU_xref_ref, GNU_xref_call):
        Const-ify a char*.
        * decl2.c (acceptable_java_type, output_vtable_inherit,
        setup_initp, start_objects, finish_objects, do_dtors, do_ctors,
        merge_functions, decl_namespace, validate_nonmember_using_decl,
        do_nonmember_using_decl): Add static prototype.
        (lang_f_options): Const-ify a char*.
        (finish_builtin_type): Likewise.
        (add_function, arg_assoc_namespace, arg_assoc_class): Add static
        prototype.
        * errfn.c: Include cp-tree.h.
        (cp_thing): Add static prototype.
        (compiler_error): Don't protoptype.
        (cp_compiler_error): Cast `compiler_error' to `errorfn' before
        passing it to `cp_thing'.
        * error.c (interesting_scope_p): Add static prototype.
        * except.c (build_eh_type_type, build_eh_type_type_ref): Const-ify
        a char*.
        * init.c (compiler_error): Don't prototype.
        (member_init_ok_or_else): Const-ify a char*.
        (build_java_class_ref): Add static prototype.
        * lex.c (compiler_error): Don't prototype.
        (get_time_identifier, interface_strcmp, extend_token_buffer,
        handle_cp_pragma): Const-ify a char*.
        (is_global, init_filename_times): Add static prototype.
        (file_name_nondirectory, cplus_tree_code_name): Const-ify a char*.
        (compiler_error): Change from fixed args to variable args.
        (yyerror): Const-ify a char*.
        * parse.y (cond_stmt_keyword): Const-ify a char*.
        (parse_decl): Add static prototype.
        * pt.c (template_args_equal, print_template_context): Likewise.
        (print_candidates, check_default_tmpl_args): Const-ify a char*.
        (instantiate_class_template): Likewise.
        * repo.c (get_base_filename, open_repo_file, init_repo): Likewise.
        * rtti.c (call_void_fn, expand_generic_desc, expand_si_desc,
        expand_class_desc, expand_ptr_desc, expand_attr_desc): Likewise.
        * search.c (lookup_field_info, lookup_member): Likewise.
        (lookup_member): Cast the first argument of `bzero' to a PTR.
        * sig.c (compiler_error): Don't prototype.
        (build_signature_pointer_or_reference_nam): Const-ify a char*.
        (get_sigtable_name, build_member_function_pointer): Likewise.
        * tree.c (compiler_error): Don't prototype.
        (no_linkage_helper, build_srcloc): Add static prototype.
        (build_vbase_pointer_fields): Const-ify a char*.
        (__eprintf): Don't unnecessarily handle `const' when !__STDC__.
        * typeck.c (compiler_error): Don't prototype.
        (convert_for_assignment): Const-ify a char*.
        (comp_cv_target_types): Add static prototype.
        (build_x_indirect_ref, build_indirect_ref, convert_arguments,
        build_component_addr, build_unary_op, convert_for_initialization):
        Const-ify a char*.
        * typeck2.c (ack): Add static prototype and change from fixed args
        to variable args.
        (readonly_error, check_for_new_type): Const-ify a char*.
        * xref.c (_XREF_FILE, find_file, filename, fctname, declname,
        fixname, open_xref_file, classname, GNU_xref_begin): Likewise.
        (GNU_xref_file): Likewise.  Also use `xmalloc' instead of `malloc'.
        (GNU_xref_end_scope, GNU_xref_ref, GNU_xref_decl, GNU_xref_call,
        gen_assign, GNU_xref_member): Const-ify a char*.

From-SVN: r25994
1999-03-26 07:45:00 +00:00
Mark Mitchell
e08a8f45f5 cp-tree.h (TYPE_PTRMEMFUNC_P): Use TYPE_PTRMEMFUNC_FLAG.
* cp-tree.h (TYPE_PTRMEMFUNC_P): Use TYPE_PTRMEMFUNC_FLAG.
	Document internals of pointer-to-member-functions.
	(DELTA2_FROM_PTRMEMFUNC): Make it call delta2_from_ptrmemfunc.
	(PFN_FROM_PTRMEMFUNC): Similarly.
	(build_type_conversion): Remove unused parameter.
	(build_ptrmemfunc1): Declare.
	(expand_ptrmemfunc_cst): New function.
	(delta2_from_ptrmemfunc): Likewise.
	(pfn_from_ptrmemfunc): Likewise.
	* cvt.c (cp_convert_to_pointer): Remove unused parameter to
	build_type_conversion.  Use TYPE_PTRMEM_P for readability.
	(convert_to_reference): Remove unused parameter to
	build_type_conversion.
	(ocp_convert): Likewise.
	(build_user_type_conversion): Likewise.
	* error.c (dump_expr): Handle NULL pointer-to-member functions.
	* expr.c (cplus_expand_expr): Handle PTRMEM_CSTs for functions.
	* method.c (build_overload_value): Don't go splitting CONSTRUCTORs
	open when handling pointer-to-member functions.
	* pt.c (convert_nontype_argument): Clean up error messages.  Be
	more stringent with pointers-to-members.
	* typeck.c (build_ptrmemfunc1): Don't declare.  Make it global.
	(build_unary_op): Tidy ever-so-slightly.
	(build_conditional_expr): Remove extra parameter to
	build_type_conversion.
	(build_ptrmemfunc): Build PTRMEM_CSTs if we know what function
	we're using.
	(expand_ptrmemfunc_cst): Define.
	(delta2_from_ptrmemfunc): Likewise.
	(pfn_from_ptrmemfunc): Likewise.

From-SVN: r25913
1999-03-23 00:01:48 +00:00
Nathan Sidwell
4995028c82 error.c (cp_printers): Add 'F' escape character.
* error.c (cp_printers): Add 'F' escape character.
	(dump_type_real): Remove TREE_LIST (fnargs) printing.
	Functionality moved to dump_parameters.
	(dump_type_suffix): Use dump_parameters and dump_exception_spec.
	(dump_function_decl): Extend meaning of V parameter. Use
	dump_parameters and dump_exception_spec.
	(dump_parameters): New static function.
	(dump_exception_spec): New static function.
	(fndecl_as_string): Change argument semantics. Use
	dump_function_decl directly.
	* sig.c (build_signature_table_constructor): Use cp_error.

From-SVN: r25741
1999-03-12 20:49:14 -05:00
Mark Mitchell
297e73d807 cp-tree.h (PARM_DECL_EXPR): Delete.
* cp-tree.h (PARM_DECL_EXPR): Delete.
	(convert_default_arg): Change prototype.
	(check_default_argument): Declare.
	(search_tree): Likewise.
	* call.c (convert_default_arg): Take the function to which the
	default argument belongs as a parameter, and do any necessary
	instantiation here, instead of ...
	(build_over_call): Here.
	* decl.c (local_variable_p): New function.
	(check_default_argument): Likewise, split out and tidied from ...
	(grokparms): Here.
	* error.c (dump_expr): Don't set PARM_DECL_EXPR.
	* pt.c (tsubst_call_declarator_parms): New function.
	(for_each_template_parm): Handle ARRAY_REFs.  Do the obvious thing
	with CALL_EXPRs, rather than trying to be clever.
	(tsubst): Use tsubst_call_declarator_parms.
	* tree.c (search_tree): Don't make it static.
	* typeck.c (convert_arguments): Use new interface to
	convert_default_arg.

From-SVN: r24803
1999-01-21 14:29:33 +00:00
Mark Mitchell
61cd552e3b error.c (dump_function_decl): Don't print the argument types for a function when the verbosity level is negative.
* error.c (dump_function_decl): Don't print the argument types for
	a function when the verbosity level is negative.
	* call.c (build_over_call): Check format attributes at call-time.
	* pt.c (tsubst_copy): Fix comment.
	(unify): Don't allow unification with variable-sized arrays.
	* semantics.c (finish_stmt_expr): When processing a template make
	the BIND_EXPR long-lived.

From-SVN: r24788
1999-01-20 13:11:59 +00:00
Jason Merrill
bbcec10538 error.c (interesting_scope_p): New fn.
* error.c (interesting_scope_p): New fn.
	(dump_simple_decl): Use it.
	(dump_expr, case CONSTRUCTOR): Force a & for a PMF.
	(dump_expr, case OFFSET_REF): Print ->* if appropriate.

From-SVN: r24372
1998-12-18 06:26:57 -05:00
Jason Merrill
2642b9bfd5 decl.c (build_typename_type): Set DECL_ARTIFICIAL.
* decl.c (build_typename_type): Set DECL_ARTIFICIAL.
	* error.c (dump_simple_decl): Also print namespace context.
	(dump_function_decl): Likewise.
	* decl2.c (ambiguous_decl): Don't print old value if it's
	error_mark_node.
	* decl.c (lookup_name_real): Fix handling of local types shadowed
	by a non-type decl.  Remove obsolete code.
	* cp-tree.h (DECL_FUNCTION_SCOPE_P): New macro.
Fixes g++.other/lookup6.C
	* lang-options.h: Add -fpermissive.
	* decl2.c: Likewise.
	* cp-tree.h: Add flag_permissive.
	* decl.c (init_decl_processing): If neither -fpermissive or -pedantic
	were specified, set flag_pedantic_errors.
	* call.c (build_over_call): Turn dropped qualifier messages
	back into pedwarns.
	* cvt.c (convert_to_reference): Likewise.
	* typeck.c (convert_for_assignment): Likewise.

From-SVN: r24150
1998-12-07 07:27:47 -05:00
Jason Merrill
f3400fe27c pt.c (check_template_shadow): New fn.
* pt.c (check_template_shadow): New fn.
	* decl2.c (grokfield): Use it.
	* decl.c (pushdecl): Likewise.
	(pushdecl_class_level): Likewise.
	(start_method): Likewise.
	(xref_tag): Don't try to use 't' if we're defining.
Fixes Sec14/7/C14387.cm.
	* call.c (check_dtor_name): Just return an error_mark_node.
	* pt.c (lookup_template_class): Complain about using non-template here.
	* parse.y (apparent_template_type): Not here.
Fixes Sec14/C14339.cm.
	* pt.c (check_explicit_specialization): Complain about specialization
	with C linkage.
Fixes Sec14/C14340.cm.
	* lang-options.h: Add -f{no-,}implicit-inline-templates.
	* pt.c (convert_nontype_argument): Don't assume that any integer
	argument is intended to be a constant-expression.
Fixes Sec14/7/P14245.C.

From-SVN: r24086
1998-12-04 06:14:21 -05:00
Mark Mitchell
7ddedda4aa cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
* cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
	(TYPE_BINFO): Likewise.
	(IS_AGGR_TYPE): Tweak.
	(SET_IS_AGGR_TYPE): New macro.
	(CLASS_TYPE_P): Tweak.
	(lang_type): Group mark bitfields together.  Remove linenum.
	(CLASSTYPE_SOURCE_LINE): Remove macro.
	(CLASSTYPE_MARKED_N): New macro.
	(SET_CLASSTYPE_MARKED_N): Likewise.
	(CLEAR_CLASSTYPE_MARKED_N): Likewise.
	(CLASS_TYPE_MARKED_*): Use them.
	(SET_CLASSTYPE_MARKED_*): Likewise.
	(CLEAR_CLASSTYPE_MARKED_*): Likewise.
	(TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO): Likewise.
	(TYPE_TEMPLATE_INFO): Handle TEMPLATE_TEMPLATE_PARMs as well.
	(TYPENAME_TYPE_FULLNAME): Use TYPE_BINFO rather than CLASSTYPE_SIZE.
	* class.c (class_cache_obstack): New variable.
	(class_cache_firstobj): Likewise.
	(finish_struct): Don't set CLASSTYPE_SOURCE_LINE.
	(pushclass): Free the cache, when appropriate.
	(popclass): Tidy.
	(maybe_push_cache_obstack): Use class_cache_obstack.
	* decl.c (include hash.h).
	(typename_hash): New function.
	(typename_compare): Likewise.
	(build_typename_type): Check the hash table to avoid creating
	duplicates.
	(build_ptrmemfunc_type): Use SET_IS_AGGR_TYPE.
	(grokdeclarator): Use CLASS_TYPE_P.
	(xref_basetypes): Likewise.
	(start_function): Likewise.  Don't put current_class_ref on the
	permanent obstack.
	* error.c (dump_type_real): Use	TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO
	and TYPE_TI_ARGS.
	* lex.c (note_got_semicolon): Use CLASS_TYPE_P.
	(make_lang_type): Don't create TYPE_LANG_SPECIFIC and associated
	fields for types other than class types.  Do clear TYPE_ALIAS_SET
	for types other than class types, though.
	* method.c (build_overload_identifier): Use CLASS_TYPE_P and
	TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	* pt.c (process_template_parm): Don't set
	CLASSTYPE_GOT_SEMICOLON.
	(lookup_template_class) Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	Coerce arguments on the momentary obstack.
	(for_each_template_parm): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
	(instantiate_class_template): Calculate template arguments on the
	momentary obstack.  Tidy.
	(tsubst_template_arg_vector): Use make_temp_vec.
	(tsubst_aggr_type): Put template arguments on the momentary
	obstack.
	(tsubst_decl): Likewise.
	(tsubst): Copy the array bounds index to the permanent obstack
	before building index types.  Use new macros.
	(unify): Use new macros.
	(do_type_instantiation): Likewise.
	* search.c (lookup_fnfields_1): Use new macros.
	(dfs_pushdecls): Build envelopes on the cache obstack.
	(dfs_compress_decls): Use new macros.
	(push_class_decls): Build on the cache obstack.
	* semantics.c (finish_typeof): Don't set CLASSTYPE_GOT_SEMICOLON.
	* sign.c (build_signature_pointer_or_reference_type): Use
	SET_IS_AGGR_TYPE.
	* tree.c (make_binfo): Check CLASS_TYPE_P.
	(copy_template_template_parm): Adjust.
	(make_temp_vec): Use push_expresion_obstack.
	* typeck.c (complete_type): Use new macros.
	(comptypes): Likewise.

From-SVN: r23686
1998-11-17 12:51:20 +00:00
Jason Merrill
aa45967f76 call.c (add_function_candidate): Treat conversion functions as coming from the argument's class.
* call.c (add_function_candidate): Treat conversion functions
	as coming from the argument's class.
	* cp-tree.h (DECL_CONV_FN_P): New fn.
	(DECL_DESTRUCTOR_P): Also check DECL_LANGUAGE.
	* class.c (add_method): Use DECL_CONV_FN_P.
	* decl2.c (check_classfn): Likewise.
	* error.c (dump_function_name): Likewise.
	(dump_function_decl): Likewise.
	* pt.c (fn_type_unification): Likewise.
	* search.c (add_conversions): Likewise.

From-SVN: r23387
1998-10-27 20:53:50 -05:00
Mark Mitchell
52bf7d5d09 error.c (dump_decl): Deal with TEMPLATE_DECLs that are VAR_DECLs.
* error.c (dump_decl): Deal with TEMPLATE_DECLs that are
	VAR_DECLs.  Handle vtables whose DECL_CONTEXT is not a type.
	* class.c (finish_struct_1): Use build_cplus_array_type to build
	array types.
	* decl.c (init_decl_processing): Likewise.
	* except.c (expand_end_eh_spec): Likewise.
	* search.c (expand_upcast_fixups): Simplify very slightly.

From-SVN: r23359
1998-10-26 23:48:58 +00:00
Jason Merrill
b894fc0596 cp-tree.def (TYPEOF_TYPE): New code.
* cp-tree.def (TYPEOF_TYPE): New code.
	* error.c (dump_type_real): Handle it.
	* pt.c (tsubst): Likewise.
	* tree.c (search_tree): Likewise.
	* semantics.c (finish_typeof): New fn.
	* parse.y (typespec): Use it.
	* cp-tree.h: Declare it.

From-SVN: r23343
1998-10-25 21:07:50 -05:00
Mark Mitchell
91063b5138 cplus-dem.c (work_stuff): Replace const_type and volatile_type with type_quals.
* cplus-dem.c (work_stuff): Replace const_type and volatile_type
	with type_quals.
	(TYPE_UNQUALIFIED): New macro.
	(TYPE_QUAL_CONST): Likewise.
	(TYPE_QUAL_VOLATILE): Likewise.
	(TYPE_QUAL_RESTRICT): Likewise.
	(code_for_qualifier): New function.
	(qualifier_string): Likewise.
	(demangle_qualifier): Likewise.
	(internal_cplus_demangle): Use them.
	(demangle_signature): Likewise.
	(demangle_template_value_parm): Likewise.
	(do_type): Likewise.
	(demangle_fund_type)): Likewise.
	* Makefile.in (hash.h): Run gperf when necessary.
	* cp-tree.h (CP_TYPE_READONLY): Remove.
	(CP_TYPE_VOLATILE): Likewise.
	(CP_TYPE_QUALS): New macro.
	(CP_TYPE_CONST_P): Likewise.
	(CP_TYPE_VOLATILE_P): Likewise.
	(CP_TYPE_RESTRICT_P): Likewise.
	(CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
	(cp_build_type_variant): Rename to ...
	(cp_build_qualified_type): New function.
	(c_apply_type_quals_to_decl): Declare.
	(SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
	(SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
	(cp_type_qual_from_rid): New function.
	(compparms): Remove unused parameter.  All callers changed.
	(cp_type_quals): New function.
	(at_least_as_qualified_p): Likewise.
	(more_qualified_p): Likewise.
	* call.c (standard_conversion): Replace calls to
	cp_build_type_variant with cp_build_qualified_type.  Use
	CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
	compare them.  Use CP_TYPE_* macros to check qualifiers.
	(reference_binding): Likewise.
	(implicit_conversion): Likewise.
	(add_builtin_candidates): Likewise.
	(build_over_call): Likewise.
	* class.c (overrides): Compare all qualifiers, not just `const',
	on method declarations.
	* cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
	(convert_pointer_to_real): Likewise.
	(type_promotes_to): Likewise.
	* decl.c (check_for_uninitialized_const_var): New function.
	(init_decl_processing): More CP_TYPE_QUALS conversion, etc.
	(cp_finish_decl): Use check_for_uninitialized_const_var.
	(grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
	handle `restrict'.
	(grok_ctor_properties): Likewise.
	(grok_op_properties): Likewise.
	(start_function): Likewise.
	(rever_static_member_fn): Likewise.
	* decl2.c (grok_method_quals): Likewise.
	(grokfield): Likewise.
	* error.c (dump_readonly_or_volatile): Rename to ...
	(dump_qualifiers): New function.  Handle `restrict'.
	(dump_type_real): Use it.
	(dump_aggr_type): Likewise.
	(dump_type_prefix): Likewise.
	(dump_type_suffix): Likewise.
	(dump_function_decl): Likewise.
	(cv_as_string): Likewise.
	* gxx.gperf: Add __restrict and __restrict__.
	* gxxint.texi: Document `u' as used for `__restrict', and a few
	other previously undocumented codes.
	* hash.h: Regenerated.
	* init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
	(build_member_call): Likewise.
	(build_new_1): Likewise.
	* lex.c (init_parse): Add entry for RID_RESTRICT.
	(cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
	(cp_type_qual_from_rid): Define.
	* lex.h (enum rid): Add RID_RESTRICT.
	* method.c (process_modifiers): Deal with `restrict'.
	* parse.y (primary): More CP_TYPE_QUALS conversion, etc.
	* parse.c: Regenerated.
	* pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
	(tsubst_aggr_type): Likewise.
	(tsubst): Likewise.
	(check_cv_quals_for_unify): Likewise.
	(unify): Likewise.
	* rtti.c (init_rtti_processing): Likewise.
	(build_headof): Likewise.
	(get_tinfo_var): Likewise.
	(buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
	(expand_class_desc): Likewise.
	(expand_attr_desc): Likewise.
	(synthesize_tinfo_fn): Likewise.
	* search.c (covariant_return_p): Likewise.  Fix `volatile' handling.
	(get_matching_virtual): Likewise.
	(expand_upcast_fixups): Likewise.
	* sig.c (build_signature_pointer_or_reference_name): Take
	type_quals, not constp and volatilep.
	(build_signature_pointer_or_reference_type): Likewise.
	(match_method_types): More CP_TYPE_QUALS conversion, etc.
	(build_signature_pointer_constructor): Likewise.
	(build_signature_method_call): Likewise.
	* tree.c (build_cplus_array_type): Likewise.
	(cp_build_type_variant): Rename to ...
	(cp_build_qualified_type): New function.  Deal with `__restrict'.
	(canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
	(build_exception_variant): Likewise.
	(mapcar): Likewise.
	* typeck.c (qualif_type): Likewise.
	(common_type): Likewise.
	(comptypes): Likewise.
	(comp_cv_target_types): Likewise.
	(at_least_as_qualified_p): Define.
	(more_qualified_p): Likewise.
	(comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
	(compparms): Likewise.
	(inline_conversion): Likewise.
	(string_conv_p): Likewise.
	(build_component_ref): Likewise.
	(build_indirect_ref): Likewise.
	(build_array_ref): Likewise.
	(build_unary_op): Likewise.
	(build_conditional_expr): Likewise.
	(build_static_cast): Likewise.
	(build_c_cast): Likewise.
	(build_modify_expr): Likewise.
	(convert_For_assignment): Likewise.
	(comp_ptr_ttypes_real): Likewise.
	(cp_type_quals): New function.

From-SVN: r23258
1998-10-23 14:53:28 +00:00
Jason Merrill
51924768e7 Revamp references to member functions.
* method.c (hack_identifier): Call build_component_ref for a
	reference to a member function.
	* typeck.c (build_component_ref): Only return a single function
	if it's static.  Otherwise, return a COMPONENT_REF.
	(build_x_function_call): Handle a COMPONENT_REF.
	(build_unary_op): Handle all unknown-type things.
	* decl2.c (arg_assoc): Handle COMPONENT_REF.
	* class.c (instantiate_type): Complain if the function we get is a
	nonstatic member function.  Remove code for finding "compatible"
	functions.
	* pt.c (tsubst_copy): Handle NOP_EXPR.
	* tree.c (build_dummy_object): New fn.
	(maybe_dummy_object): New fn.
	(is_dummy_object): New fn.
	* cp-tree.h: Declare them.
	* cvt.c (cp_convert_to_pointer): Use maybe_dummy_object.
	* error.c (dump_expr, case OFFSET_REF): Use is_dummy_object.
	* init.c (build_member_call): Use maybe_dummy_object and
	is_dummy_object.
	(build_offset_ref): Use maybe_dummy_object.
	(resolve_offset_ref): Use is_dummy_object.
	* typeck.c (build_x_function_call): Call build_dummy_object.
	(unary_complex_lvalue): Call is_dummy_object.
	* typeck.c (build_component_addr): Make sure field is a field.
	* call.c (build_new_op): Delete obsolete code.
	* pt.c (tsubst, TEMPLATE*PARM*): Abort if we don't have any args.

From-SVN: r23186
1998-10-19 16:08:23 -04:00
Mark Mitchell
61a127b3d1 cp-tree.def (PTRMEM_CST): New tree node.
* cp-tree.def (PTRMEM_CST): New tree node.
	* cp-tree.h (ptrmem_cst): New type.
	(lang_type): Remove local_typedecls.
	(dummy): Increase to 12 bits from 11.
	(CLASSTYPE_LOCAL_TYPEDECLS): Remove.
	(PTRMEM_CST_CLASS): New macro.
	(PTRMEM_CST_MEMBER): Likewise.
	(current_access_specifier): New variable.
	(current_class_type): Remove duplicate declaration.
	(finish_struct): Change prototype.
	(unreverse_member_declarations): New function.
	(pushdecl_class_level): Change prototype.
	(grok_enum_decls): Remove.
	(fixup_anonymous_union): New function.
	(grok_x_components): Change prototype.
	(tsubst_chain): Remove.
	(finish_member_template_decl): Likewise.
	(check_explicit_specialization): Fix indentation.
	(finish_class_definition): Change prototype.
	(finish_member_class_template): Likewise.
	(finish_member_declaration): New function.
	(check_multiple_declarators): Likewise.
	* class.c (class_stack_node_t): New type.
	(current_class_base): Remove.
	(current_class_stack): Change type.
	(current_access_specifier): New variable.
	(grow_method): Remove.
	(check_member_decl_is_same_in_complete_scope): Break out from
	finish_struct.
	(make_method_vec): New function.
	(free_method_vec): Likewise.
	(add_implicitly_declared_members): Break out from finish_struct_1.
	(free_method_vecs): New variable.
	(add_method): Rework for direct use from parser.
	(handle_using_decl): Watch for NULL_TREE while iterating through
	CLASSTYPE_METHOD_VEC.
	(finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
	just do some error-checking.
	(warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
	(finish_struct_1): Simplify.  Use add_implicitly_declared_members.
	(finish_struct): Change prototype.  Simplify; fields and methods
	are already set up at this point.
	(init_class_processing): Set up current_class_stack.
	(pushclass): Save current_access_specifier.
	(popclass): Restore it.
	(currently_open_class): Simplify.
	(build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
	* decl.c (saved_scope): Add access_specifier.
	(maybe_push_to_top_level): Save it.
	(pop_from_top_level): Restore it.
	(maybe_process_template_type_declaration): Use
	finish_member_declaration.
	(pushtag): Likewise.
	(pushdecl_class_level): Don't return a value.
	(fixup_anonymous_union): Break out from grok_x_components.
	(shadow_tag): Use it.
	(xref_tag): Complain about using an elaborated type specifier to
	reference a template type parameter or typedef name.
	(xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
	(current_local_enum): Remove.
	(build_enumerator): Call finish_member_declaration.
	(grok_enum_decls): Remove.
	* decl2.c (grok_x_components): Simplify.
	(check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
	(grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
	(merge_functions): Add to comment.
	(arg_assoc_type): Prototype.
	(arg_assoc): Pass as many arguments as there are parameters.
	* error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
	OFFSET_REF.
	* expr.c (cpls_expand_expr): Remove dead code.  Handle
	PTRMEM_CST.
	* friend.c (do_friend): Lookup friends when in nested classes.
	Change comments.
	* init.c (build_offset_ref): Do lookup even for classes that are
	only partially defined.
	(decl_constant_value): Remove dead code.
	* method.c (build_overload_value): Remove hack where by TYPE was
	not a TYPE.  Handle PTRMEM_CST.
	(build_template_parm_names): Don't pass a PARM_DECL where a TYPE
	should go.
	* parse.y (components, notype_components, component_decl,
	component_decl_1, component_declarator, component_declarator0):
	Now all are itype rather than ttype.  Rework to add members to
	classes on the fly.
	(typesqpecqual_reserved): Use check_multiple_declarators.
	(structsp): Update class to finish_class_definition.
	(do_xref_defn): Unsplit into named_class_head.
	(access_specifier): Set current_access_specifier.
	* pt.c (set_current_access_from_decl): New function.
	(finish_member_template_decl): Don't take the parameters.
	(comp_template_args): Make more robust.
	(lookup_template_class): Don't use current_local_enum.
	(for_each_template_parm): Handle PTRMEM_CST.
	(instantiate_class_template): Use set_current_access_from_decl,
	finish_member_declaration and unreverse_member_declarations.  Set
	lineno/input_filename before generating implicit member functions.
	(type_unification_real): Don't assume back-unification happens
	only for the last argument.
	(regenerate_decl_from_template): Call pushclass a bit earlier.
	(tsubst_chain): Remove.
	(tsubst_enum): Use set_current_access_from_decl.
	(set_mangled_name_for_template_decl): Fix indentation.
	* search.c (lookup_fnfields_1): Change iteration through
	CLASSTYPE_METHOD_VEC.
	(dfs_pushdecls): Likewise.
	(dfs_compress_decls): Likewise.
	(add_conversions): Likewise.
	* semantics.c (finish_class_definition): Don't take components.
	Change call to finish_struct.
	(finish_member_declaration): New function.
	(finish_member_class_template): Don't take template parameters.
	Change call to grok_x_components.  Call finish_member_template_decl.
	(check_multiple_declarators): New function.
	* sig.c (append_signature_fields): Work from the TYPE_METHODS, not
	a passed in fieldlist.
	* tree.c (search_tree): Handle PTRMEM_CST.
	(mapcar): Likewise.
	* typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
	INTEGER_CSTs, for pointer-to-data members.

From-SVN: r22869
1998-10-06 14:20:30 +00:00
Mark Mitchell
01240200ee class.c (current_class_ptr, [...]): Clarify documentation.
* class.c (current_class_ptr, current_class_ref): Clarify
	documentation.
	* cvt.c (ocp_convert): Don't expect fold to remove all trivial
	NOP type conversions.
	* decl.c (decls_match): Use comptypes directly; ignore
	qualifiers on the DECL.
	(duplicate_decls): Remove qualifier checks on DECL.
	(grokdeclarator): Make the type built up include top-level
	qualifiers.
	* decl2.c (do_dtors): Fix spelling error.
	* error.c (dump_simple_decl): Don't look at qualifiers on the decl
	when printing type information.
	* init.c (build_new_1): Add documentation.  Deal with the fact
	that type of allocated memory now contains qualifiers.
	* lex.c (is_global): Improve error-recovery.
	* sig.c (build_member_function_pointer): Don't cast away const
	on fields of sigtable_entry_type.
	* tree.c (lvalue_type): Don't look at top-level qualifiers on
	expressions.
	* typeck.c (decay_conversion): Likewise.
	(build_component_ref): Make sure the type of the COMPONENT_REF
	contains top-level qualifiers, as appropriate.  Improve
	error-handling.
	(build_indirect_ref): Simplify.  Don't strip top-level qualifiers.
	(build_array_ref): Likewise.
	(build_unary_op): Improve error-recovery.
	(unary_complex_lvalue): Make taking the address a bound member
	function an error, not a sorry.
	(build_conditional_expr): Look at the type qualifiers, not the
	qualifiers on the expression itself.

From-SVN: r22802
1998-10-03 23:11:19 +00:00
Jason Merrill
009425e185 error.c (dump_type_real): Handle NAMESPACE_DECL.
* error.c (dump_type_real): Handle NAMESPACE_DECL.
	* parse.y (base_class.1): Avoid crash on error.
	* decl.c (make_typename_type): If context is a namespace, the code
	is in error.

From-SVN: r22342
1998-09-08 20:52:50 -04:00
Mark Mitchell
0c8feefe30 cp-tree.h (anonymous_namespace_name): Declare.
* cp-tree.h (anonymous_namespace_name): Declare.
	* decl.c: Define it.
	(push_namespace): Use anonymous_namespace_name, rather than local
	static anon_name.
	* error.c (dump_decl): If a namespace is named
	anonymous_namespace_name, call it {anonymous}.

From-SVN: r22329
1998-09-08 11:37:48 +00:00
Mark Mitchell
0aa5b426a9 error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when comparing with global_namespace.
* error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when
	comparing with global_namespace.
	(dump_aggr_type): Likewise.

From-SVN: r22105
1998-08-30 17:45:15 +00:00
Mark Mitchell
36a117a5b3 cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
* cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
	(build_template_decl_overload): Remove.
	(set_mangled_name_for_decl): New function.
	(innermost_args): Remove is_spec parameter.
	(most_specialized, most_specialized_class): Remove declarations.
	(lookup_template_class): Add entering_scope parameter.
	(maybe_process_partial_specialization): New function.
	(finish_template_decl): Likewise.
	(finish_template_type): Likewise.
	* class.c (finish_struct): Clean up processing of member template
	specializations.
	* decl.c (pushtag): Fix	formatting.
	(lookup_tag): Improve handling of pseudo-global levels.
	(make_typename_type): Adjust call to lookup_template_class.
	(shadow_tag): Use maybe_process_partial_specialization.
	(xref_tag): Improve handling of member friends.
	(start_function): Call push_nested_class before
	push_template_decl.  Don't call push_template_decl for
	specializations.
	* decl2.c (grok_x_components): Don't call xref_tag for
	template instantiations.  Handle UNION_TYPEs like RECORD_TYPEs.
	(grokclassfn): Use set_mangled_name_for_decl.
	(arg_assoc_class): Adjust call to innermost_args.
	(mark_used): Don't call instantiate_decl for a TEMPLATE_DECL.
	* error.c (dump_function_name): Improve printing of template
	function names.
	* friend.c (is_friend): Don't compare types of decls to determine
	friendship, unless flag_guiding_decls.
	(make_friend_class): Partial specializations cannot be friends.
	(do_friend): Use set_mangled_name_for_decl.  Call
	push_template_decl_real instead of push_template_decl.
	* method.c (build_decl_overload_real): Remove prototype.  Give it
	external linkage.
	(build_overload_identififer): Adjust call to innermost_args.
	(build_template_decl_overload): Remove.
	(set_mangled_name_for_decl): New function.
	* parse.y (.finish_template_type): New non-terminal.
	(template_def): Use finish_template_decl.  Use template_extdef
	instead of extdef.
	(template_extdef, template_datadef): New non-terminals, containing
	only those rules for things which can be templates.
	(datadef): Tidy.
	(template_type, self_template_type): Use .finish_template_type.
	(named_class_head): Use maybe_process_partial_specialization.
	* pt.c (mangle_class_name_for_template): Remove context parameter.
	(get_class_bindings): Remove outer_args parameter.
	(complete_template_args): Remove.
	(add_outermost_template_args): New function.
	(register_specialization): Return the specialization.
	(unregister_specialization): New function.
	(tsubst_template_parms): Likewise.
	(most_specialized, most_specialized_class): Prototype here as
	static.
	(original_template): Rename to most_general_template.
	(tsubst_template_parms): New function.
	(set_mangled_name_for_template_decl): Likewise.
	(TMPL_ARGS_DEPTH): New macro.
	(TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Adjust.
	(TMPL_ARGS_LEVEL): New macro.
	(SET_TMPL_ARGS_LEVEL): Likewise.
	(TMPL_ARG): Likewise.
	(SET_TMPL_ARG): Likewise.
	(TMPL_ARGS_DEPTH): Likewise.
	(finish_member_template_decl): Use finish_template_decl.
	(maybe_process_partial_specialization): New function, split out
	from tsubst.
	(inline_needs_template_parms): Use TMPL_PARMS_DEPTH.
	(maybe_begin_member_template_processing): Use new macros.
	(is_member_template): Likewise.
	(is_member_template_class): Likewise.
	(add_to_template_args): Likewise.  Deal with multiple levels of
	args.
	(maybe_process_partial_specialization): New function.
	(retrieve_specialization): Add consistency check.
	(determine_specialization): Return full argument list.
	(check_explicit_specialization): Tweak friend handling.  Use full
	argument lists.  Simplify.
	(current_template_args): Use new macros.
	(push_template_decl_real): Change ill-named mainargs to specargs.
	Check that a partial specialization actually specializes at least
	one parameter.   Improve friend handling.  Modify for full
	template arguments.
	(classtype_mangled_name): Don't mangle the names of
	specializations.
	(lookup_template_class): Add entering_scope parameter.  Use it to
	avoid finding a template type when an instantiation is required.
	Simplify.  Use full template arguments.
	(tsubst_friend_function): Use unregister_specialization.  Use new
	macros.  Use full template arguments.
	(tsubst_friend_class): Substitute, using tsubst_template_parms,
	into the template parameters before passing them to
	redeclare_class_template.
	(instantiate_class_template): Simplify.  Use full template
	arguments.  Adjust calls to get_class_bindings.  Use
	SET_IDENTIFIER_TYPE_VALUE where needed.  Improve friend handling.
	(innermost_args): Use new macros.
	(tsubst_aggr_type): New function, split out from tsubst.
	(tsubst): Use tsubst_aggr_type, tsubst_template_parms, new calling
	conventions for lookup_tmeplate_class.  Refine handling of partial
	instantiations.   Remove calls to complete_template_args.
	Simplify.  Add consistency checks.  Use set_mangled_name_for_decl
	and set_mangled_name_for_template_decl.
	(tsubst_copy): Use tsubst_aggr_type.
	(instantiate_template): Use full template arguments.
	(more_specialized): Improve formatting.
	(more_specialized_class): Adjust calls to get_class_bindings.
	(get_bindings_real): Don't call complete_template_args.
	(most_specialized): Don't overwrite input; create a new list.
	(most_specialized_class): Use most_general_template.
	(regenerate_decl_from_template): Use unregister_specialization.
	Use full template arguments.
	(instantiate_decl): Use full template arguments.
	(set_mangled_name_for_template_decl): New function.
	* semantics.c (begin_class_definition): Use
	maybe_process_partial_specialization.
	(finish_member_class_template): New function.
	(finish_template_decl): Likewise.
	(finish_template_type): Likewise.
	(typeck.c): Don't crash after issuing a compiler_error.
	* Makefile.in (CONFLICTS): Adjust; we removed a s/r conflict.

From-SVN: r21433
1998-07-28 01:03:16 +00:00
Mark Mitchell
3df095e2f1 error.c (dump_type_real): Don't crash when presented with intQI_type_node or the like.
* error.c (dump_type_real): Don't crash when presented with
	intQI_type_node or the like.

From-SVN: r21284
1998-07-19 17:54:13 +00:00
Andrew MacLeod
741f283993 decl.c (grokvardecl): Don't build external assembler names for TYPENAMEs in other namespaces as there...
1998-06-16  Andrew MacLeod  <amacleod@cygnus.com>
	* decl.c (grokvardecl): Don't build external assembler names for
	TYPENAMEs in other namespaces as there is no declarator.
	* error.c (cp_file_of, cp_line_of): Don't extract file or line number
	info from DECL_CONTEXT if it is NULL.

From-SVN: r20524
1998-06-16 12:36:14 +00:00
John Carr
71e89f27cd tree.c (debug_binfo): Make printf format match arguments.
1998-06-10  John Carr  <jfc@mit.edu>
	* tree.c (debug_binfo): Make printf format match arguments.
	* error.c (OB_PUTI): Make printf format match arguments.

From-SVN: r20401
1998-06-10 05:54:23 +00:00
Martin v. Löwis
3e3f722c44 cp-tree.h (DECL_NAMESPACE_ALIAS, [...]): Declare.
* cp-tree.h (DECL_NAMESPACE_ALIAS, ORIGINAL_NAMESPACE): Declare.
	* decl.c (lookup_name_real): Add namespaces_only parameter.
	If set, return only NAMESPACE_DECLs.
	(select_decl): Likewise.
	(identifier_type_value): Give additional parameter.
	(lookup_name_nonclass): Likewise.
	(lookup_name): Likewise.
	(find_binding): Skip namespace aliases.
	(binding_for_name): Likewise.
	(push_namespace): Check for namespace aliases.
	(lookup_name_namespace_only): New function.
	(begin_only_namespace_names, end_only_namespace_names): New functions.
	* decl2.c (set_decl_namespace): Skip namespace aliases.
	(do_using_directive): Likewise.
	(do_namespace_alias): Produce namespace aliases, fix alias
	redeclaration.
	* error.c (dump_decl): Support SCOPE_REF.
	* parse.y (extdef): Wrap lookup with namespace_only for namespace
	aliases and using declarations.

From-SVN: r20236
1998-06-04 22:26:55 -04:00
Jason Merrill
285baa062b error.c (dump_expr): Clean up NEW_EXPR case.
* error.c (dump_expr): Clean up NEW_EXPR case.
	* tree.c (mapcar): Support NEW_EXPR.
	* error.c (dump_expr): Support NEW_EXPR.
	* decl2.c (arg_assoc_type): Return 0 for LANG_TYPE.

From-SVN: r20218
1998-06-03 21:33:03 -04:00
Per Bothner
31b72b87a0 language_as_string: Handle lang_java.
�
	* language_as_string:  Handle lang_java.

From-SVN: r20062
1998-05-26 05:55:06 -07:00
Jason Merrill
6b57ac2977 decl.c (push_namespace): Namespaces have type void.
* decl.c (push_namespace): Namespaces have type void.
	* typeck2.c (incomplete_type_error): Complain about namespace
	used as expression.
	* typeck.c (decay_conversion): Likewise.
	* error.c (dump_expr): Support namespaces.

From-SVN: r20035
1998-05-24 18:37:10 -04:00
Jason Merrill
f9d94ea4d4 decl.c (grokfndecl): Handle definition of specialization in friend declaration.
* decl.c (grokfndecl): Handle definition of specialization in
	friend declaration.
	* error.c (dump_decl): Fix LOOKUP_EXPR handling.

From-SVN: r19919
1998-05-20 19:53:04 -04:00
Brendan Kehoe
5a11e05b69 class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.
* class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.
	* error.c (dump_expr): Handle an ARROW_EXPR.

From-SVN: r19885
1998-05-19 14:16:49 -04:00
Kaveh R. Ghazi
7dee3f36c6 Warning patches:
* Makefile.in (lex.o): Depend on output.h.
        * call.c (add_function_candidate): Remove unused variable `cand'.
        (add_conv_candidate): Likewise.
        (build_builtin_candidate): Likewise.
        * cp-tree.h: Add prototype for `types_overlap_p'.
        * decl.c (signal_catch): Mark parameter `sig' with ATTRIBUTE_UNUSED.
        * decl2.c (merge_functions): Remove unused variables `tmp' and
        `tempn'.
        * error.c (expr_as_string): Mark parameter `v' with ATTRIBUTE_UNUSED.
        (code_as_string): Likewise.
        (language_as_string): Likewise.
        (parm_as_string): Likewise.
        (op_as_string): Likewise.
        (assop_as_string): Likewise.
        (cv_as_string): Likewise.
        * lex.c: Include output.h.
        * pt.c (type_unification): Cast first argument of `bzero' to a char*.
        * search.c (dfs_no_overlap_yet): Mark parameter `t' with
        ATTRIBUTE_UNUSED.
        * tinfo.cc (__class_type_info::dcast): Change the type of variable
        `i' from int to size_t.
        * typeck.c (language_lvalue_valid): Mark parameter `exp' with
        ATTRIBUTE_UNUSED.

From-SVN: r19707
1998-05-13 10:00:46 +00:00
Jason Merrill
6eb3bb273d error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or DECL_NAMESPACE_SCOPE_P.
* error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or
	DECL_NAMESPACE_SCOPE_P.
	(lang_decl_name): Likewise.
	* pt.c (tsubst_friend_function, tsubst): Likewise.
	* decl.c (pushdecl, redeclaration_error_message, start_decl,
	cp_finish_decl, start_function): Likewise.
	* class.c (finish_struct_1): Likewise.
	* call.c (build_over_call): Likewise.
	(compare_ics): Use DERIVED_FROM_P.

From-SVN: r19705
1998-05-12 17:42:34 -04:00
Mark Mitchell
07389efeea error.c (dump_simple_decl): New function, broken out from ...
* error.c (dump_simple_decl): New function, broken out from ...
	(dump_decl): Use it.

From-SVN: r19694
1998-05-12 07:23:31 +00:00
Martin v. Löwis
2c73f9f57a massive namespace patch
From-SVN: r19631
1998-05-07 22:06:26 -04:00
Kaveh R. Ghazi
faa25e97f1 error.c: Convert to using ctype macros defined in system.h.
* error.c: Convert to using ctype macros defined in system.h.
        * method.c: Likewise.
        * xref.c: Likewise.
        * lex.c: Likewise.  Also remove redundant system header stuff.

From-SVN: r19577
1998-05-06 11:41:58 +00:00
Robert Lipe
54f92bfbb1 call.c, [...]: Add include of toplev.h.
Wed May  6 06:36:41 1998  Robert Lipe  <robertl@dgii.com>
        * cp/call.c, cp/class.c, cp/decl.c, cp/decl2.c,
        cp/errfn.c, cp/error.c, cp/except.c, cp/expr.c,
        cp/friend.c, cp/init.c, cp/lex.c, cp/method.c,
        cp/pt.c, cp/repo.c, cp/rtti.c, cp/search.c,
        cp/semantics.c, cp/sig.c, cp/tree.c, cp/typeck.c,
        cp/typeck2.c, cp/xref.c: Add include of toplev.h.

From-SVN: r19565
1998-05-06 05:01:35 +00:00
Jason Merrill
6df38d6ddc * error.c (dump_type_real): Declare canonical_name.
From-SVN: r19384
1998-04-23 05:35:38 -04:00
Mark Mitchell
294471c351 cp-tree.h (type_as_string_real): New function.
Fri Apr 17 21:25:00 1998  Mark Mitchell  <mmitchell@usa.net>
	* cp-tree.h (type_as_string_real): New function.
	* pt.c (mangle_class_name_for_template): Use it.
	* error.c (dump_aggr_type): Change prototype.
	(dump_type_prefix): Likewise.
	(dump_type_suffix): Likewise.
	(dump_type_real): Convert from dump_type.  If desired, the
	"canonica" name of a typedef, i.e., the name of the underlying
	type, can be printed.
	(dump_type): Call dump_type_real.

From-SVN: r19273
1998-04-17 21:25:38 +00:00
Jeffrey A Law
8d052bc70c call.c: Include system.h.
* call.c: Include system.h.  Remove includes, declarations and
        defines provided by system.h.
        * class.c, cvt.c, decl.c, decl2.c, errfn.c error.c: Likewise.
        * except.c, expr.c friend.c, g++spec.c, init.c, input.c: Likewise.
        * lex.c, parse.y, pt.c, ptree.c repo.c rtti.c, search.c: Likewise.
        * semantics.c, sig.c, spew.c, tree.c, typeck.c: Likewise.
        * typeck2.c, xref.c: Likewise.
        * Makefile.in: Dependencies updated as appropriate.
        * Make-lang.in: Likewise.
system.h cutover from the cp subdir

From-SVN: r18917
1998-03-31 06:25:46 -07:00
Mark Mitchell
a9936d39ea error.c (dump_decl): Be a bit more explicit with template type arguments, when verbose.
* error.c (dump_decl): Be a bit more explicit with template
	type arguments, when verbose.

From-SVN: r18858
1998-03-27 20:25:21 +00:00
Mark Mitchell
050367a36d cplus-dem.c (optable): Add sizeof.
* cplus-dem.c (optable): Add sizeof.
	(demangle_template_value_parm): New function containing code
	previously found in demangle_template.
	(demangle_integral_value): New function which handles complicated
	integral expressions.
	(demangle_template): Use them.
	* error.c (dump_expr): Remove unused variable `l'.
	* pt.c (for_each_template_parm): New function, created by
	converting uses_template_parms.
	(tree_fn_t): New typedef.
	(uses_template_parms): Use it.
	(mark_template_parm): New function.
	(push_template_decl): Check that the argument list of a partial
	specialization uses all the template parameters.
	* Make-lang.in (c++filt): Don't delete cxxmain.c after we're done
	with it; we might want it for debugging.
	* cp-tree.h (type_unification): Change interface.
	* class.c (finish_struct_1): Skip nested template types, just like
	ordinary nested types.
	(instantiate_type): Use new interface to type_unification.
	* lex.c (init_lex): Add __sz as opname for sizeof.
	* method.c (build_overload_scope_ref): New function.
	(build_overload_int): Handle complex expressions.  Set
	numeric_output_need_bar if necessary.
	(build_overload_value): Handle non-PARM_DECL nodes; this
	routine is now used by build_overload_int.  Remove some
	assignments to numeric_output_need_bar.  Use
	build_overload_scope_ref.
	(build_qualified_name): Note that some template mangled names end
	with digits, and set numeric_output_need_bar appropriately.  Use
	build_underscore_int.
	* pt.c (unify): Change interface.
	(type_unification_real): Likewise.
	(determine_specialization): Use new interfaces.
	(tsubst): Deal gracefully with situations in which the argument
	vector is not fully filled.
	(fn_type_unification): Use new interfaces.
	(type_unification): Likewise.  Remove NOP_EXPR hack.
	(type_unification_real): Likewise.
	(unify): Likewise.  Deal with unification of complex expresions.

From-SVN: r18795
1998-03-24 10:25:44 +00:00
Jason Merrill
30394414d9 Partial implementation of namespaces.
* decl.c (push_namespace): Handle redeclaration error.
	* cp-tree.h (IDENTIFIER_NAMESPACE_VALUE): New macro.
	(IDENTIFIER_NAMESPACE_BINDINGS): New macro.
	(NAMESPACE_BINDING): New macro.
	(IDENTIFIER_GLOBAL_VALUE): Use NAMESPACE_BINDING.
	* *.c: Use them.
	* pt.c (push_template_decl): Use innermost_args.
	* decl.c (get_unique_name): Tweak from earlier in the name.
	* cp-tree.def: Add CPLUS_BINDING node.
	* cp-tree.h (tree_binding): new struct
	(BINDING_SCOPE, BINDING_VALUE): new macros
	(current_namespace, global_namespace): declare extern
	(struct lang_decl_flags): new field in_namespace
	(DECL_NAMESPACE_USING, DECL_NAMESPACE_USERS): new macros
	(DECL_NAMESPACE, SET_DECL_NAMESPACE): new macros
	(TREE_INDIRECT_USING): new macro
	* decl2.c (current_namespace, global_namespace): Declare.  The
	value is a NAMESPACE_DECL now, not a TREE_LIST.
	(is_namespace_ancestor, namespace_ancestor):new static functions.
	(add_using_namespace, ambiguous_decl): likewise.
	(lookup_using_namespace): new support function for lookup_name.
	(qualified_lookup_using_namespace): new support function for
	do_scoped_id and lookup_namespace_name
	(get_namespace_id): mark as obsolete.
	(current_namespace_id): Likewise.
	(do_namespace_alias): Implement.
	(do_using_directive): Implement as call to add_using_namespace.
	* decl.c (binding_for_name): new function.
	(push_namespace, pop_namespace): implement.
	(push_decl): don't install a FUNCTION_DECL in the global branch.
	(lookup_namespace_name): implement using qualified lookup.
	(lookup_name_real): For global scoping, lookup in
	global_namespace. For namespace scoping, lookup in given
	namespace. For unscoped lookup, iterate over namespace,
	considering using directives.
	(init_decl_processing): initialize global_namespace.
	(grokvardecl): Build assembler name as static name for globals.
	(grokdeclarator): Remove old namespace mangling.
	(xref_tag): When installing a global binding for the
	tag, make sure we have an identifier.
	* method.c (build_overload_nested_name): mangle namespaces.
	(build_qualified_name): Likewise.
	(build_decl_overload_real): Likewise.
	* lex.c (build_lang_decl): set namespace for new declaration to
	current_namespace.
	(do_scoped_id): find global names in global or current
	namespace, or using qualified namespace lookup, depending on
	context.
	* init.c (build_member_call): When scope is namespace, use
	build_x_function_call instead.
	(build_offset_ref): When scope is namespace, collapse processing
	to lookup_namespace_name instead.
	* error.c (dump_decl): Support NAMESPACE_DECL.
	* decl.c (pushdecl): Bind globals to current namespace.
	(push_overloaded_decl): Likewise.
	(lookup_tag): Likewise.
	(lookup_name_current_level): Likewise.
	(xref_tag): Likewise.
	(start_function): Likewise.
	* lex.c (do_identifier): Likewise.
	(identifier_typedecl_value): Likewise.
	(real_yylex): Likewise.
	* method.c (do_inline_function_hair): Likewise.
	* parse.y (unscoped): Likewise.
	* pt.c (check_explicit_specialization): Likewise.
	(lookup_template_class): Likewise.
	* rtti.c (call_void_fn): Likewise.
	* sig.c (build_sigtable): Likewise.
	* ptree.c (lang_print_xnode): New function.

From-SVN: r18227
1998-02-24 19:49:51 -05:00
Jason Merrill
f84b4be9a7 Support for friend templates.
* typeck.c (build_x_function_call): Handle static member function
	templates like non-templates.  Handle friend templates like normal
	function templates.
	* pt.c (tsubst, *_PARM): Don't use orig_level.
	(get_bindings): Don't call add_to_template_args.
	(instantiate_template): Likewise.
	(tsubst, FUNCTION_DECL): Call add_to_template_args as appropriate.
	* ptree.c (print_lang_type): Print index/level for template parms.
	* Make-lang.in (cc1plus): Note that cc1plus depends on
	cp/cp-tree.h and cp/cp-tree.def.
	* cp-tree.def (TEMPLATE_CONST_PARM): Remove.
	(TEMPLATE_PARM_INDEX): New tree code, used to indicate a
	position in a template parameter list.
	* cp-tree.h (template_parm_index): New structure, used as the tree
	structure for a TEMPLATE_PARM_INDEX.
	(TEMPLATE_PARM_IDX): New macro.
	(TEMPLATE_PARM_LEVEL): Likewise.
	(TEMPLATE_PARM_DESCENDANTS): Likewise.
	(TEMPLATE_PARM_ORIG_LEVEL): Likewise.
	(TEMPLATE_PARM_DECL): Likewise.
	(TEMPLATE_TYPE_PARM_INDEX): Likewise.
	(TEMPLATE_TYPE_ORIG_LEVEL): Likewise.
	(TEMPLATE_TYPE_DECL): Likewise.
	(TEMPLATE_CONST_IDX): Remove.
	(TEMPLATE_CONST_LEVEL): Likewise.
	(TEMPLATE_CONST_SET_INFO): Likewise.
	(TEMPLATE_TYPE_SET_INFO): Likewise.
	(TEMPLATE_TYPE_IDX): Redefine in terms of TEMPLATE_PARM_INDEX
	node.
	(TEMPLATE_TYPE_LEVEL): Likewise.
	* decl.c (decls_match): Call comp_template_parms, rather than
	expanding it inline.
	(duplicate_decls): If two template declarations are being merged,
	then their TEMPLATE_INFOs should be merged as well.
	(grokfndecl): Save template-id information when declaring a friend
	with explicit template arguments.  Pass arguments to
	check_explicit_specialization via correct convention; at some
	point check_explicit_specialization changed, but these call-sites
	did not.
	(grokdeclarator): Tidy up slightly.
	* decl2.c (check_classfn): Tidy up slightly.  Don't assume that
	two template functions with the same DECL_ASSEMBLER_NAME the same,
	since the names are not yet mangled.
	* error.c (dump_decl): Use TEMPLATE_PARM_INDEX instead of
	TEMPLATE_CONST_PARM.
	(dump_expr): Likewise.  Use the TEMPLATE_PARM_DECL to get at the
	decl for a non-type parameter, rather than printing `<tparm ...>'.
	* friend.c (is_friend): Handle TEMPLATE_DECL friends.
	(do_friend): Deal with template friends.
	* lex.c (do_pending_inlines): Call
	maybe_begin_member_template_processing, rather than
	conditionally calling begin_member_template_processing.
	(process_next_inline): Likewise.  Call
	maybe_end_member_template_processing, rather than
	conditionally calling end_member_template_processing.
	(do_pending_defargs): Likewise.
	(do_identifier): Use TEMPLATE_PARM_INDEX instead of
	TEMPLATE_CONST_PARM.
	* method.c (build_mangled_template_parm_index): New function.
	(build_overload_value): Use it.
	(build_overload_name): Likewise.
	* pt.c (finish_member_template_decl): Allow friend declarations.
	(template_class_depth): New function.
	(is_member_template): Rename, and modify, to become...
	(is_member_or_friend_template): New function.
	(end_member_template_processing): Rename, and modify, to become...
	(maybe_end_member_template_processing).
	(build_template_parm_index): New function.
	(reduce_template_parm_level): New function.
	(process_template_parm): Modify to use build_template_parm_index.
	(current_template_args): Change name to current_template_parms.
	(push_template_decl): Deal with friend templates.
	(uses_template_parms): Use TEMPLATE_PARM_INDEX instead of
	TEMPLATE_CONST_PARM.
	(tsubst_friend_function): New function.
	(instantiate_class_template): Generate the DECL_FRIENDLIST
	for a new instantiation by using tsubst_friend_function rather
	than just tsubst.
	(tsubst): Don't tsubst into a type which is a TEMPLATE_DECL.
	Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM, and the
	appropriate new macros.  Use reduce_template_parm_level to
	generate lower-level template parameters.  Handle tsubst'ing into
	TEMPLATE_DECLS that declare TEMPLATE_TEMPLATE_PARMS.  Don't forget
	to tsubst the DECL_CONTEXT and DECL_CLASS_CONTEXT of newly created
	templates.  Similarly for the template parameters for a new
	template.
	(tsubst_copy): Tidy up slightly.  Use TEMPLATE_PARM_INDEX instead
	of TEMPLATE_CONST_PARM.  Handle TYPE_DECLs by tsubsting into them.
	(unify): Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM.
	(get_bindings): Call add_to_template_args if necessary.
	(instantiate_decl): Handle instantiations of friend templates.
	* search.c (lookup_field_1): Don't treat the TYPE_FIELDS of a
	TEMPLATE_TYPE_PARM as a list of fields; it's not!
	* spew.c (yylex): Do a little manual constant propogation to
	clarify the code.

From-SVN: r18198
1998-02-22 22:17:44 -05:00
Jeffrey A Law
e30416cfd9 * error.c: Include sys/types.h.
From-SVN: r18176
1998-02-22 11:57:30 -07:00
Kriang Lerdsuwanakij
e7e6663285 error.c (dump_decl): Fix type of default arguments for template template parameters and nontype...
* error.c (dump_decl): Fix type of default arguments for template
	template parameters and nontype template parameters.
	* parse.y (template_parm): Handle invalid default template
	template arguments here.
	* parse.y (template_parm): Use template_arg instead of PTYPENAME
	for default template template argument.
	* pt.c (coerce_template_parms): Merge default template argument
	codes.  Can treat RECORD_TYPE as template name if it is implicitly
	created.  Fix argument index in error message.
	* typeck.c (comptypes): Merge template argument comparison codes in
	TEMPLATE_TEMPLATE_PARM and RECORD_TYPE.

From-SVN: r17650
1998-02-03 17:30:26 -05:00
Kaveh R. Ghazi
a703fb388b Various fixes for -Wall problems from Kaveh. See ChangeLog for details.
From-SVN: r17586
1998-02-01 17:04:13 -07:00
Jason Merrill
abff8e0691 class.c (instantiate_type): Don't just return a known type if it's wrong.
* class.c (instantiate_type): Don't just return a known type if
 	it's wrong.
	* class.c (instantiate_type): Remove handling of FUNCTION_DECL
	since that code could never be reached.
	* error.c (dump_decl): Avoid aborting in the midst of printing an
	error message about an illegal template declaration.
	* parse.y (structsp): Print an error message, rather than crashing,
	when a class-head does not name a class.
	* pt.c (convert_nontype_argument):  Allow REAL_TYPE and COMPLEX_TYPE
	template arguments as a g++ extension.
	* cp-tree.def (ALIGNOF_EXPR): New tree code.
	* decl2.c (grok_alignof): If processing_template_decl, just store
	the expression.
	* typeck.c (c_alignof): Likewise.
	* decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR.
	* error.c (dump_expr): Likewise.
	* pt.c (tsubst_copy): Likewise.
	* tree.c (cp_tree_equal): Likewise.
	* pt.c (uses_template_parms): Correctly determine whether or not a
	SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant
	folding can be done.

From-SVN: r17545
1998-01-28 19:08:53 -05:00
Mark Mitchell
e1467ff26b call.c (add_template_candidate_real): New function.
* call.c (add_template_candidate_real): New function.
	(add_template_candidate): Use it.
	(add_template_conv_candidate): Likewise.
	(joust): Pass extra argument to more_specialized.
	* class.c (instantiate_type): Handle a single FUNCTION_DECL.
	(is_local_class): Remove.
	(finish_struct): Check TI_PENDING_SPECIALIZATION_FLAG.
	* cp-tree.h (is_local_class): Remove.
	(perform_array_to_pointer_conversion): Likewise.
	(finish_member_template_decl): Add.
	(check_explicit_specialization): Return a tree, not an int.
	(more_specialized): Take additional argument.
	(get_bindings): Likewise.
	(TI_PENDING_SPECIALIZATION_FLAG): New macro.
	* cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
	(perform_array_to_pointer_conversion): Remove.
	* decl.c (saved_scope): Add processing_specialization,
	processing_explicit_instantiation fields.
	(maybe_push_to_top_level): Save them.
	(pop_from_top_level): Restore them.
	(grokfndecl): Use new return value from
	check_explicit_specialization.
	(start_decl): Don't check flag_guiding_decls before pushing
	decls.
	(cp_finish_decl): Remove previous (bogus) change.
	(grok_declarator): Use decl_function_context rather than
	is_local_class.
	* decl2.c (finish_file): Pass extra argument to get_bindings.
	(build_expr_from_tree): Let build_x_component_ref check
	validity of arguments rather than doing it here.
	* lex.c (cons_up_default_function): Remove code fooling with
	processing_specialization, processing_explicit_instantiation
	flags, as that is now done in {maybe_push_top,pop_from}_top_level.
	* method.c (build_overload_identifier): Mangle local classes in
	template functions correctly.
	* parse.y (finish_member_template_decl): Move to pt.c.
	* pt.c (finish_member_template_decl): Moved here from parse.y.
	(print_candidates): New function.
	(determine_specialization): Change interface.  Properly look for
	most specialized versions of template candidates.
	(check_explicit_specialization): Fully process explicit
	instantiations.
	(push_template_decl): Avoid looking at CLASSTYPE fields in
	FUNCTION_DECLS.
	(determine_overloaded_function): Remove.
	(convert_nontype_argument): Change name from
	convert_nontype_parameter.  Use determine_overloaded_function
	instead of instantiate_type.
	(mangle_class_name_for_template): Handle type contexts as well as
	function contexts.
	(classtype_mangled_name): Likewise.
	(lookup_template_class): Likewise.
	(tsubst): Likewise.
	(more_specialized): Take explict template arguments as a
	parameter.
	(most_specialized): Likewise.
	(get_bindings): Likewise.  Check that return types match before
	proclaiming a function a match.
	(do_decl_instantiation): Remove code searching for function to
	instantiate; that is now done in check_explicit_specialization.
	(add_maybe_template): Pass extra argument to get_bindings.
	* tree.c (really_overloaded_fn): Use is_overloaded_fn to simplify
	implementation.
	* typeck.c (build_component_ref): Check for invalid arguments.

From-SVN: r17512
1998-01-27 15:47:56 -05:00
Jason Merrill
67c2a92854 error.c (dump_decl): Fix type default template args.
* error.c (dump_decl): Fix type default template args.
	(dump_type): Hand TEMPLATE_DECL off to dump_decl.

From-SVN: r17470
1998-01-24 07:26:46 -05:00
Jason Merrill
b7a290122f tweak
From-SVN: r17469
1998-01-23 22:04:11 -05:00
Kriang Lerdsuwanakij
73b0fce8fd pt.c (coerce_template_parms): Don't access elements of ARGLIST that is not really present.
Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>
	* pt.c (coerce_template_parms): Don't access elements of ARGLIST
	that is not really present.  Substitute default arguments in
	template template arguments.  Correctly convert TEMPLATE_DECL to
	TEMPLATE_TEMPLATE_PARM.
	(comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM
	are no longer treated specially here.
	* parse.y (template_template_parm): Fix copy error.
	* decl.c (grokdeclarator): Warn about missing `typename' for nested
	type created from template template parameters.
	* parse.y (bad_parm): Likewise
	* class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
	(push_nested_class): Likewise.
	* cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
	* cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
	(copy_template_template_parm): Declare.
	* decl.c (arg_looking_for_template): New variable.
	(lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
	Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
	node if arg_looking_for_template is nonzero.
	(pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
	(grok_op_properties, xref_tag, xref_basetypes): Likewise.
	(grokdeclarator): Handle TEMPLATE_DECL.
	* decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
	* error.c (dump_type): Add TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM.
	(dump_type_prefix, dump_type_suffix) Handle TEMPLATE_TEMPLATE_PARM.
	(dump_decl): Handle unnamed template type parameters.
	Handle template template parameters.
	(dump_function_name): Handle template template parameters.
	* init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef):
	Handle TEMPLATE_TEMPLATE_PARM.
	* method.c (build_template_template_parm_names): New function.
	(build_template_parm_names): Handle TEMPLATE_DECL.
	(build_overload_nested_name, build_overload_name):
	Handle TEMPLATE_TEMPLATE_PARM.
	* parse.y (maybe_identifier): New nonterminal.
	(template_type_parm): Use it.
	(template_template_parm, template_arg1): New nonterminal.
	(template_parm): Add template_template_parm rules.
	(template_arg): Set processing_template_arg.
	(template_arg1): Rules moved from template_arg.
	(primary, nonnested_type): Set arg_looking_for_template if we are
	processing template arguments.
	* pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
	(process_template_parm): Handle template template parameters.
	(coerce_template_parms, comp_template_args): Likewise.
	(mangle_class_name_for_template, lookup_template_class): Likewise.
	(uses_template_parms): Handle TEMPLATE_DECL and
	TEMPLATE_TEMPLATE_PARM.
	(current_template_args): Handle TEMPLATE_DECL.
	(tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
	* search.c (dfs_walk, dfs_record_inheritance):
	Handle TEMPLATE_TEMPLATE_PARM.
	* tree.c (copy_template_template_parm): New function.
	(mapcar): Handle TEMPLATE_TEMPLATE_PARM.
	* typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.

From-SVN: r17441
1998-01-22 06:03:56 -05:00
Mark Mitchell
7565064686 decl.c (start_decl): Don't allow duplicate definitions of static data members.
* decl.c (start_decl): Don't allow duplicate definitions of static
	data members.
	* call.c (build_user_type_conversion_1): Handle user-defined
	template conversion operators correctly.
	* decl2.c (build_expr_from_tree): Issue an error message if the
	object in a COMPONENT_REF is a TEMPLATE_DECL.
	* typeck.c (incomplete_type_error): Handle TEMPLATE_TYPE_PARMs.
	* class.c (is_local_class): New function.
	* cp-tree.h (is_local_class): Declare it.
	(last_tree): Likewise.
	(begin_tree): Likewise.
	(end_tree): Likewise.
	(lookup_template_class): Change prototype.
	* decl.c (cp_finish_decl): Check for NULL where necesary.
	Consider FUNCTION_DECLS to declare objects with top-level binding,
	when calling make_decl_rtl.
	(grokdeclarator): Give members of local classes internal linkage.
	(start_function): Remove declaration of last_tree.
	(finish_function): Set flag_keep_inline_functions around call to
	rest_of_compilation if we are processing a member function in a
	local class.
	(start_method): Call push_template_decl for member functions of
	local classes in template functions.
	* decl2.c (import_export_decl): Don't give external linkage to
	instantiations of templates with internal linkage.
	* parse.y (last_tree): Remove declaration.
	(template_type): Pass extra parameter to lookup_template_class.
	(self_template_type): Likewise.
	(structsp): Move call to reset_specialization into left_curly.
	(left_curly): Call reset_specialization, and begin_tree.
	* pt.c (saved_trees): New variable.
	(mangle_class_name_for_template): Change prototype.  Use
	additional function context to name local classes in templates
	correctly.
	(classtype_mangled_name): Pass the context.
	(push_template_decl): Handle local classes and templates, and
	member functions for such classes.
	(convert_nontype_parameter): Fix handling of pointer-to-member
	constants.
	(lookup_template_class): Handle local classes in templates.
	(tsubst): Likewise.  Don't assume that template instantiations
	have external linkage; pay attention to the template declaration.
	(mark_decl_instantiated): Likewise.
	(begin_tree): New function.
	(end_tree): Likewise.
	* decl.c (xref_basetypes): Don't call complete_type for basetypes
	that involve template parameters; that can lead to infinite
	recursion unnecessarily.
	* pt.c (register_specialization): Do not register specializations
	that aren't ready to be registered yet.
	(check_explicit_specialization): Handle explicit specialization of
	constructors and destructors.
	(build_template_decl): New function.
	(push_template_delc): Handle out-of-class specializations of
	member templates.
        * pt.c (check_explicit_specialization): Set up the template
        information before registering the specialization.
        (coerce_template_parms): Fix thinko.
        (tsubst): Handle specializations of member templates correctly.
	* class.c (finish_struct_methods): Remove calls to
	check_explicit_specialization from here.
	(finish_struct): And insert them here.
	* cp-tree.h (perform_qualification_conversions): New function.
	(perform_array_to_pointer_conversion): Likewise.
	(begin_explicit_instantiation): Likewise.
	(end_explicit_instantiation): Likewise.
	(determine_specialization): Renamed from
	determine_explicit_specialization.
	(comp_template_parms): New function.
	(processing_explicit_instantiation): New variable.
	* cvt.c (perform_qualification_conversions): New function.
	(perform_array_to_pointer_conversion): Likewise.
	* decl.c (duplicate_decls): Don't consider template functions
	alike unless they have the same parameters.  Refine handling of
	instantiation/specialization mismatches.
	(start_decl): Don't call pushdecl for template specializations,
	since they don't affect overloading.
	(start_function): Likewise
	(grokfndecl): Call check_explicit_specialization a little later.
	Don't call duplicate_decls for memberm template specializations.
	(grokdeclarator): Don't update template_count for classes that are
	themselves specializations.  Remove use of `2' as parameter to
	grokfndecl since that value isn't used.
	* lex.c (cons_up_default_function): Save and restore
	processing_explicit_instantiation around calls to grokfield.
	* parse.y (finish_member_template_decl): New function.
	(component_decl_1): Use it.
	(fn.def2): Likewise.
	(template_arg_list_opt): New nonterminal.
	(template_type): Use it.
	(self_template_type): Likewise.
	(template_id): Likewise.
	(object_template_id): Likewise.
	(notype_template_declarator): Likwise.
	(begin_explicit_instantiation): Likewise.
	(end_explicit_instantiation): Likewise.
	(explicit_instantiation): Use them.
	* pt.c (coerce_template_parms): Add parameters.
	(processing_explicit_instantiation): New variable.
	(convert_nontype_parameter): New function.
	(determine_overloaded_function): Likewise.
	(begin_explicit_instantiation): Likewise.
	(end_explicit_instantiation): Likewise.
	(retrieve_specialization): Likewise.
	(register_specialization): Likewise.
	(processing_explicit_specialization): Removed.
	(determine_specialization): Handle specializations of member
	functions of template class instantiations.
	(check_explicit_specialization): Refine to conform to standard.
	(comp_template_parms): New function.
	(coerce_template_parms): Call convert_nontype_parameter.
	(tsubst): Refine handling of member templates.  Use
	register_specialization.
	(instantiate_template): Use retrieve_specialization.
	(do_decl_instantiation): Likewise.
	(instantiate_decl): Likewise.
	(type_unification): Improve handling of explict template
	arguments.
	* tree.c (mapcar): Return error_mark_node, rather than aborting,
	on VAR_DECLS, FUNCTION_DECLS, and CONST_DECLS.
	* typeck.c (build_unary_op): Call determine_specialization, rather
	than determine_explicit_specialization.

From-SVN: r17426
1998-01-19 17:41:40 -05:00
Bruno Haible
224c649b80 * error.c (dump_decl): For enum tags, output the tag, not its value.
From-SVN: r17381
1998-01-16 18:55:44 -05:00
Jason Merrill
0253134551 except.c: Remove register_exception_table{,_p}.
* except.c: Remove register_exception_table{,_p}.
	* decl2.c (finish_file): Remove call to register_exception_table.
	* cp-tree.def: Add AGGR_INIT_EXPR.
	* error.c, tree.c, typeck.c: Replace uses of NEW_EXPR with
	AGGR_INIT_EXPR where appropriate.
	* expr.c (cplus_expand_expr): Likewise.  Simplify.

From-SVN: r17132
1997-12-18 09:52:24 -05:00
Jason Merrill
6748b64398 tree.c (mapcar): Handle TRY_CATCH_EXPR et al.
* tree.c (mapcar): Handle TRY_CATCH_EXPR et al.
	* error.c (dump_expr): Likewise.

From-SVN: r17115
1997-12-16 11:51:07 -05:00
Jason Merrill
0fb9f1c39b error.c (dump_decl): Handle LOOKUP_EXPR.
* error.c (dump_decl): Handle LOOKUP_EXPR.

Sun Dec  7 15:45:07 1997  Mark Mitchell  <mmitchell@usa.net>

	* rtti.c (build_dynamic_cast): Copy the cast-to type to the
	permanent obstack if we are processing a template decl.
	* typeck.c (build_static_cast): Likewise.
	(build_const_cast): Likewise.
	(build_reinterpret_cast): Likewise.

	* pt.c (coerce_template_parms): Coerce some expressions, even
	when processing_template_decl.

From-SVN: r17001
1997-12-07 19:33:08 -05:00
Jason Merrill
aa36c0813a tree.c (is_overloaded_fn): Handle getting a fn template.
* tree.c (is_overloaded_fn): Handle getting a fn template.
	(really_overloaded_fn): Likewise.
	* error.c (dump_decl): Handle TEMPLATE_ID_EXPRs better.
	* pt.c (check_explicit_specialization): Tweak.
	(determine_explicit_specialization): Tweak.

	* tree.c, cp-tree.h (get_target_expr): New fn.

1997-12-02  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (determine_explicit_specialization): Avoid an internal
	error for bad specializations.

	* method.c (build_overload_value): Handle SCOPE_REF.

From-SVN: r16928
1997-12-03 14:46:56 -05:00
Jason Merrill
74cd8397f8 pt.c (check_explicit_specialization): Complain about using a template-id for a non-specialization.
* pt.c (check_explicit_specialization): Complain about using a
	template-id for a non-specialization.

Fri Nov 28 01:56:35 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

        * error.c (dump_decl): Handle TEMPLATE_ID_EXPR.

From-SVN: r16818
1997-11-28 05:30:44 -05:00
Jason Merrill
5951f637bc decl.c (make_implicit_typename): Handle case where t is not actually from context.
* decl.c (make_implicit_typename): Handle case where t is not
 	actually from context.
	* tree.c (get_type_decl): Lose identifier case.
	* spew.c (yylex): Lose useless call to identifer_typedecl_value.
	* parse.y (nonnested_type): Just use lookup_name.
	(complex_type_name): Just use IDENTIFIER_GLOBAL_VALUE.

Wed Nov 19 11:45:07 1997  Michael Tiemann  <tiemann@axon.cygnus.com>

	* error.c (dump_function_name): Test DECL_LANG_SPECIFIC in case
	T was built in C language context (for example, by
	output_func_start_profiler).

From-SVN: r16589
1997-11-19 23:07:26 -05:00
Brendan Kehoe
b2bb2710f3 lex.c (FILE_NAME_NONDIRECTORY): Delete macro.
* lex.c (FILE_NAME_NONDIRECTORY): Delete macro.
        (file_name_nondirectory): New function, doing the same as the macro.
        (set_typedecl_interface_info): Use it instead of the macro.
        (check_newline): Likewise.
        (handle_cp_pragma): Likewise.

        * repo.c (get_base_filename): Cast result of rindex to char*.
        (open_repo_file): Likewise.
        * xref.c (open_xref_file): Likewise.
        * error.c (dump_char): Make its arg int, not char.

bring over the changes that went in yesterday to fix irix6 native cc
build problems

From-SVN: r16261
1997-11-01 14:50:18 -05:00
Mark Mitchell
92eca6404c decl.c (duplicate_decls): Handle template specializations correctly.
Mon Oct 20 11:44:20 1997  Mark Mitchell  <mmitchell@usa.net>

	* decl.c (duplicate_decls): Handle template specializations
	correctly.
	* error.c (dump_function_name): Fix printing of specializations of
	member functions that are not member templates.
	* cp-tree.h (processing_specialization): Make global.
	* pt.c (processing_specialization): Likewise.
	* lex.c (cons_up_default_function): Save and restore
	processing_specialization to avoid confusion.

From-SVN: r16101
1997-10-20 14:46:24 -04:00
Jason Merrill
a6967cc077 decl.c (init_decl_processing): Give null_node unknown* type.
* decl.c (init_decl_processing): Give null_node unknown* type.
	* typeck.c (comp_target_types): Handle UNKNOWN_TYPE.
	(common_type): Likewise.
	* error.c (args_as_string): Recognize null_node.

From-SVN: r16100
1997-10-20 14:09:06 -04:00
Jason Merrill
386b8a85a6 [multiple changes]
Sat Sep 27 16:22:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* friend.c (do_friend): Disable injection for all template-derived
 	decls.
	* decl2.c (lang_decode_option): Handle -fguiding-decls.
	* parse.y (notype_template_declarator): New nonterminal.
	(direct_notype_declarator): Use it.
	(complex_direct_notype_declarator): Likewise.
	(object_template_id): Accept any kind of identifier after TEMPLATE.
	(notype_qualified_id): Don't add template declarators here.

Sat Sep 27 16:21:58 1997  Mark Mitchell  <mmitchell@usa.net>

        * call.c (add_template_candidate): Add explicit_targs parameter.
        (build_scoped_method_call): Use it.
        (build_overload_call_real): Likewise.
        (build_user_type_conversion_1): Likewise.
        (build_new_function_call): Likewise.
        (build_object_call): Likewise.
        (build_new_op): Likewise.
        (build_new_method_call): Likewise.
        (build_new_function_call): Handle TEMPLATE_ID_EXPR.
        (build_new_method_call): Likewise.

        * class.c (finish_struct_methods): Add specialization pass to
        determine which methods were specializing which other methods.
        (instantiate_type): Handle TEMPLATE_ID_EXPR.

        * cp-tree.def (TEMPLATE_ID_EXPR): New tree code.

        * cp-tree.h (name_mangling_version): New variable.
	(flag_guiding_decls): Likewise.
        (build_template_decl_overload): New function.
        (begin_specialization): Likewise.
        (reset_specialization): Likewise.
        (end_specialization): Likewise.
        (determine_explicit_specialization): Likewise.
        (check_explicit_specialization): Likewise.
        (lookup_template_function): Likewise.
        (fn_type_unification): Add explicit_targs parameter.
        (type_unification): Likewise.

        * decl.c (duplicate_decls): Add smarts for explicit
        specializations.
        (grokdeclarator): Handle TEMPLATE_ID_EXPR, and function
        specializations.
        (grokfndecl): Call check_explicit_specialization.

        * decl2.c (lang_decode_option): Handle -fname-mangling-version.
        (build_expr_from_tree): Handle TEMPLATE_ID_EXPR.
        (check_classfn): Handle specializations.

        * error.c (dump_function_name): Print specialization arguments.

	* friend.c (do_friend): Don't call pushdecl for template
        instantiations.

        * init.c (build_member_call): Handle TEMPLATE_ID_EXPR.

        * lang-options.h: Add -fname-mangling-version, -fguiding-decls,
	and -fno-guiding-decls.

        * lex.c (identifier_type): Return PFUNCNAME for template function
        names.

        * method.c (build_decl_overload_real): New function.
        (build_template_parm_names): New function.
        (build_overload_identifier): Use it.
        (build_underscore_int): New function.
        (build_overload_int): Use it.  Add levels for template
        parameters.
        (build_overload_name): Likewise.  Also, handle TYPENAME_TYPEs.
        (build_overload_nested_names): Handle template type parameters.
        (build_template_decl_overload): New function.

        * parse.y (YYSTYPE): New ntype member.
        (nested_name_specifier): Use it.
        (nested_name_specifier_1): Likewise.
        (PFUNCNAME): New token.
        (template_id, object_template_id): New non-terminals.
        (template_parm_list): Note specializations.
        (template_def): Likewise.
        (structsp): Likewise.
        (fn.def2): Handle member template specializations.
        (component_decl_1): Likewise.
        (direct_notype_declarator): Handle template-ids.
        (component_decl_1): Likewise.
        (direct_notype_declarator): Handle template-ids.
        (primary): Handle TEMPLATE_ID_EXPR, and template-ids.

        * pt.c (processing_specializations): New variable.
        (template_header_count): Likewise.
        (type_unification_real): New function.
        (processing_explicit_specialization): Likewise.
        (note_template_header): Likewise.
        (is_member_template): Handle specializations.
        (end_template_decl): Call reset_specialization.
        (push_template_decl): Handle member template specializations.
        (tsubst): Likewise.
        (tsubst_copy): Handle TEMPLATE_ID_EXPR.
        (instantiate_template): Handle specializations.
        (instantiate_decl): Likewise.
        (fn_type_unification): Handle explicit_targs.
        (type_unification): Likewise.  Allow incomplete unification
        without an error message, if allow_incomplete.
        (get_bindings): Use new calling sequence for fn_type_unification.

        * spew.c (yylex): Handle PFUNCNAME.

        * tree.c (is_overloaded_fn): Handle TEMPLATE_ID_EXPR.
        (really_overloaded_fn): Likewise.
        (get_first_fn): Handle function templates.

        * typeck.c (build_x_function_call): Use really_overloaded_fn.
        Handle TEMPLATE_ID_EXPR.
        (build_x_unary_op): Likewise.
        (build_unary_op): Likewise.
        (mark_addressable): Templates whose address is taken are marked
        as used.

From-SVN: r15774
1997-09-28 15:16:59 -04:00
Mark Mitchell
0355541399 error.c (dump_decl): Avoid crashing when presented with a uninitialized constant...
Tue Sep  9 17:57:25 1997  Mark Mitchell  <mmitchell@usa.net>

	* error.c (dump_decl): Avoid crashing when presented with a
	uninitialized constant, as can occur with a template parameter.

From-SVN: r15208
1997-09-09 22:28:20 -04:00
Mark Mitchell
786b524596 pt.c (begin_member_template_processing): Take a function as argument, not a set of template arguments.
Mon Sep  8 01:21:43 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (begin_member_template_processing): Take a function as
	argument, not a set of template arguments.  Use the template
	parameters, rather than the arguments.  Handle non-type parameters
	correctly.  Push a binding level for the parameters so that multiple
	member templates using the same parameter names can be declared.
	(end_member_template_processing): Pop the binding level.
	(push_template_decl): Mark member templates as static when
	appropriate.

	* lex.c (do_pending_inlines): Pass the function, not its template
	arguments, to begin_member_template_processing.
	(process_next_inline): Likewise.
	(do_pending_defargs): Likewise.

	* error.c (dump_expr): Obtain the correct declaration for a
	TEMPLATE_CONST_PARM.

	* call.c (add_template_conv_candidate): New function.
	(build_object_call): Handle member templates, as done in the other
	build_ functions.

From-SVN: r15155
1997-09-08 05:28:51 -04:00
Jason Merrill
98c1c66880 class.c (grow_method): Remove check for redeclaration.
* class.c (grow_method): Remove check for redeclaration.

Fri Sep  5 01:37:17 1997  Mark Mitchell  <mmitchell@usa.net>

	* cp-tree.h (INNERMOST_TEMPLATE_PARMS): New macro.
	(DECL_INNERMOST_TEMPLATE_PARMS): Likewise.
	(PRIMARY_TEMPLATE_P): Use it.
	* call.c (build_overload_call_real): Use it.
	* class.c (instantiate_type): Likewise.
	* decl.c (decls_match): Likewise.
	* method.c (build_overload_identifier): Likewise.
	* pt.c (push_template_decl): Likewise.
	(classtype_mangled_name): Likewise.
	(lookup_template_class): Likewise.

	* cp-tree.h (DECL_NTPARMS): Change name from DECL_NT_PARMS to
	DECL_NTPARMS to conform to usage elsewhere.
	* call.c (add_template_candidate): Likewise.
	* class.c (instantiate_type): Likewise.
	* pt.c (instantiate_template): Likewise.
	(get_bindings): Likewise.

	* class.c (grow_method): Use DECL_FUNCTION_TEMPLATE_P instead of
	is_member_template.

	* pt.c (unify): Undo changes to allow multiple levels of template
	parameters.
	(type_unification): Likewise.
	(fn_type_unification): Likewise.
	(get_class_bindings): Likewise.
	* cp-tree.h (Likewise).

	* decl.c (replace_defarg): Check that the type of the default
	parameter does not invlove a template type before complaining
	about the initialization.

	* error.c (dump_expr): Deal with template constant parameters in
	member templates correctly.

	* pt.c (is_member_template): Deal with class specializations
	correctly.
	(tsubst): Handle "partial instantiation" of member templates
	correctly.

Wed Sep  3 12:30:24 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (type_unification): Change calling squence to allow for
	multiple levels of template parameters.
	(tsubst_expr): Likewise.
	(tsubst): Likewise.
	(tsubst_copy): Likewise.
	(instantiate_template): Likewise.
	(unify): Likewise.
	* call.c (build_overload_call_real): Use it.
	(add_builtin_candidate): Use it.
	(build_new_method_call): Use it.
	* class.c (instantiate_type): Use it.
	* decl.c (grokdeclarator): Use it.
	* decl2.c (finish_file): Use it.
	* method.c (build_overload_identifier): Use it.

	* call.c (add_template_candidate):  Add additional parameter for
	the function return type.  Call fn_type_unification istead of
	type_unification.
	(build_user_type_conversion_1): Handle member templates.
	(build_new_function_call): Likewise.
	(build_new_op): Likewise.
	(build_new_method_call): Likewise.

	* class.c (grow_method): Don't give an error message indicating
 	that two member templates with the same name are ambiguous.
	(finish_struct): Treat member template functions just like member
 	functions.

	* cp-tree.h (check_member_template): Add declaration.
	(begin_member_template_processing): Likewise.
	(end_member_template_processing): Likewise.
	(fn_type_unification): Likewise.
	(is_member_template): Likewise.
	(tsubst): Change prototype.
	(tsubst_expr): Likewise.
	(tsubst_copy): Likewise.
	(instantiate_template): Likewise.
	(get_bindings): Likewise.

	* decl.c (decls_match): Handle multiple levels of template
	parameters.
	(pushdecl): Handle template type params just like other type
	declarations.
	(push_class_level_binding): Return immediately if the
	class_binding_level is NULL.
	(grokfndecl): If check_classfn() returns a member_template, use
	the result of the template, not the template itself.

	* decl2.c (check_member_template): New function.  Check to see
	that the entity declared to be a member template can be one.
	(check_classfn): Allow redeclaration of member template functions
	with different types; the new functions can be specializations or
	explicit instantiations.

	* error.c (dump_decl): Handle multiple levels of template
	parameters.
	(dump_function_decl): Update to handle function	templates.

	* lex.c (do_pending_inlines): Set up template parameter context
	for member templates.
	(process_next_inline): Likewise.

	* method. (build_overload_identifier): Adjust for multiple levels
	of template parameters.

	* parse.y (fn.def2): Add member templates.
	(component_decl_1): Likewise.

	* pt.c (begin_member_template_processing): New function.
	(end_member_template_processing): Likewise.
	(is_member_template): Likewise.
	(fn_type_unification): Likewise.
	(current_template_parms): Return a vector of all the template
	parms, not just the innermost level of parms.
	(push_template_decl): Deal with the possibility of member
	templates.
	(lookup_template_class): Likewise.
	(uses_template_parms): Likewise.
	(tsubst): Modify processing to TEMPLATE_TYPE_PARM and
	TEMPLATE_CONST_PARM to deal with multiple levels of template
	arguments.   Add processing of TEMPLATE_DECL to produce new
	TEMPLATE_DECLs from old ones.
	(do_decl_instantiation): Handle member templates.

	* search.c (lookup_fnfields_1): Handle member template conversion
	operators.

	* tree.c (cp_tree_equal): Check the levels, as well as the
	indices, of TEMPLATE_CONST_PARMs.

	* typeck.c (comptypes): Check the levels, as well as the indices,
	fo TEMPLATE_TYPE_PARMs.
	(build_x_function_call): Treat member templates like member
	functions.

Member templates.

From-SVN: r15130
1997-09-06 04:10:07 -04:00
Jason Merrill
922ddba49f call.c (joust): Tweak message.
* call.c (joust): Tweak message.

Sat Aug 23 18:02:59 1997  Mark Mitchell  <mmitchell@usa.net>

	* error.c (type_as_string): Put const/volatile on template type
	parameters where appropriate.

From-SVN: r14919
1997-08-25 17:30:44 -04:00
Jason Merrill
49c249e1c8 [multiple changes]
Wed Aug 20 17:25:08 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (is_subseq): Don't try to be clever.

Wed Aug 20 03:13:36 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* parse.y, pt.c: Include "except.h".
	* call.c, class.c, class.h, cp-tree.h, cvt.c, decl.c, decl2.c,
 	error.c, except.c, expr.c, friend.c, g++spec.c, init.c, input.c,
 	lex.c, lex.h, method.c, parse.y, pt.c, repo.c, rtti.c, search.c,
 	sig.c, spew.c, tree.c, typeck.c, typeck2.c, xref.c: Finish
 	prototyping.

Wed Aug 20 01:34:40 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (mark_vtable_entries): Instead of replacing pure
	virtuals with a reference to __pure_virtual, copy the decl and
	change the RTL.

From-SVN: r14868
1997-08-20 20:50:39 -04:00
Jason Merrill
da20811c09 merge
From-SVN: r14852
1997-08-19 18:37:19 -04:00
Brendan Kehoe
42976354a6 92th Cygnus<->FSF quick merge
From-SVN: r14524
1997-07-24 17:09:25 -04:00
Mike Stump
37c46b43db 91th Cygnus<->FSF quick merge
From-SVN: r14134
1997-05-28 23:20:02 +00:00
Mike Stump
2ba25f504d 90th Cygnus<->FSF quick merge
From-SVN: r13673
1997-02-21 20:28:30 +00:00
Mike Stump
de22184bb2 90th Cygnus<->FSF quick merge
From-SVN: r13542
1997-01-21 21:32:30 +00:00
Mike Stump
d2e5ee5c70 90th Cygnus<->FSF quick merge
From-SVN: r13321
1996-12-18 02:46:25 +00:00
Mike Stump
9a3b49acbc 90th Cygnus<->FSF quick merge
From-SVN: r13141
1996-11-12 19:49:48 +00:00
Mike Stump
5156628f9f 89th Cygnus<->FSF quick merge
From-SVN: r12883
1996-09-30 21:34:04 +00:00
Mike Stump
d11ad92ebe 88 Cygnus<->FSF merge
From-SVN: r12674
1996-08-26 20:32:48 +00:00
Mike Stump
c73964b2fb 87th Cygnus<->FSF quick merge
From-SVN: r12606
1996-08-08 22:54:56 +00:00
Mike Stump
6467930b06 *** empty log message ***
From-SVN: r12602
1996-08-08 22:08:30 +00:00
Mike Stump
e92cc02916 87 Cygnus<->FSF merge
From-SVN: r12424
1996-07-11 01:13:25 +00:00
Mike Stump
e349ee739e 86th Cygnus<->FSF quick merge
From-SVN: r12126
1996-05-30 19:11:58 +00:00
Mike Stump
4ac1474483 86th Cygnus<->FSF quick merge
From-SVN: r11974
1996-05-16 18:43:00 +00:00
Mike Stump
c91a56d266 86th Cygnus<->FSF merge
From-SVN: r11654
1996-04-02 21:44:27 +00:00
Mike Stump
fc37869868 85th Cygnus<->FSF quick merge
From-SVN: r11587
1996-03-21 19:46:11 +00:00
Mike Stump
357a4089d9 85th Cygnus<->FSF quick merge
From-SVN: r11506
1996-03-09 20:23:30 +00:00
Mike Stump
e76a26469d 85th Cygnus<->FSF merge
From-SVN: r11497
1996-03-08 00:38:10 +00:00
Mike Stump
ec25526966 84th Cygnus<->FSF merge
From-SVN: r11399
1996-03-02 01:49:15 +00:00
Mike Stump
5566b478bd 83rd Cygnus<->FSF merge
From-SVN: r11362
1996-02-28 22:01:56 +00:00
Mike Stump
cffa872980 82nd Cygnus<->FSF merge
From-SVN: r11328
1996-02-20 20:35:10 +00:00
Mike Stump
2ee887f272 81st Cygnus<->FSF merge
From-SVN: r11187
1996-02-09 22:43:25 +00:00
Mike Stump
72b7eeff72 76th Cygnus<->FSF merge
From-SVN: r10815
1995-12-19 06:51:14 +00:00
Mike Stump
f30432d726 75th Cygnus<->FSF merge
From-SVN: r10438
1995-10-12 02:33:51 +00:00
Richard Kenner
8ecb1d9245 Rename called function.
From-SVN: r10050
1995-06-22 22:51:13 -04:00
Richard Kenner
e9fa0c7c6f Update FSF address.
From-SVN: r9966
1995-06-15 08:29:51 -04:00
Mike Stump
a9aedbc26d 71st Cygnus<->FSF merge
From-SVN: r9719
1995-05-16 21:10:32 +00:00
Richard Kenner
ddd5a7c180 Fix typos in comments.
From-SVN: r9711
1995-05-16 08:14:26 -04:00
Mike Stump
28cbf42c14 59th Cygnus<->FSF merge
From-SVN: r9225
1995-03-23 00:44:31 +00:00
Mike Stump
b7484fbe2b 58th Cygnus<->FSF merge
From-SVN: r9186
1995-03-15 23:03:59 +00:00
Mike Stump
8ccc31eb61 56th Cygnus<->FSF merge
From-SVN: r8957
1995-02-16 15:24:37 +00:00
Mike Stump
6060a79633 50th Cygnus<->FSF merge
From-SVN: r8657
1994-12-16 02:07:31 +00:00
Mike Stump
f376e137d4 47th Cygnus<->FSF merge
From-SVN: r8129
1994-09-26 20:15:18 +00:00
Mike Stump
0059501924 46 Cygnus<->FSF merge
From-SVN: r7943
1994-08-18 20:50:43 +00:00
Mike Stump
a292b002ee 45th Cygnus<->FSF merge
From-SVN: r7862
1994-08-05 20:25:20 +00:00
Mike Stump
a0a339271a 39th Cygnus<->FSF merge
From-SVN: r7439
1994-06-03 21:42:31 +00:00
Mike Stump
2986ae008b 38th Cygnus<->FSF merge
From-SVN: r7337
1994-05-19 20:19:03 +00:00
Mike Stump
8d2733caec 36th Cygnus<->FSF merge
From-SVN: r7221
1994-05-06 09:27:46 +00:00
Mike Stump
700f8a8792 35th Cygnus<->FSF merge
From-SVN: r7217
1994-05-05 22:19:26 +00:00
Mike Stump
39211cd56b 34th Cygnus<->FSF merge
From-SVN: r7171
1994-04-28 22:48:45 +00:00
Mike Stump
7177d104dd 33rd Cygnus<->FSF merge
From-SVN: r7134
1994-04-21 23:30:18 +00:00
Mike Stump
8926095fe7 31th Cygnus<->FSF merge.
From-SVN: r6996
1994-04-08 06:08:43 +00:00
Mike Stump
51c184be09 30th Cygnus<->FSF merge.
From-SVN: r6859
1994-03-23 23:33:53 +00:00
Mike Stump
8d08fdba59 Initial revision
From-SVN: r6613
1994-02-24 01:02:37 +00:00