view gcc/cp/ChangeLog-1998 @ 16:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
line wrap: on
line source

Tue Dec 22 15:09:25 1998  Kaveh R. Ghazi  <>

	* (cvt.o): Depend on toplev.h.

	* cp-tree.h (check_template_shadow, pod_type_p): Add prototypes.

	* cvt.c: Include toplev.h.

	* except.c (get_eh_caught, get_eh_handlers): Hide prototypes and

	* init.c (expand_vec_init): Initialize variable `itype'.

	* lex.c (yyerror): Cast the argument passed to a ctype function to
	an unsigned char.

	* method.c (build_mangled_C9x_name): Wrap prototype and definition

	* typeck.c (build_binary_op): Mark parameter `convert_p' with

1998-12-22  Mark Mitchell  <>

	* cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
	* tree.c (build_exception_variant): Don't crash on empty throw

1998-12-18  DJ Delorie  <>

	* cvt.c (convert_to_reference): Check for both error_mark_node
	and NULL_NODE after call to convert_for_initialization.

1998-12-17  Jason Merrill  <>

	* 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.

1998-12-16  Mark Mitchell  <>

	* class.c (resolve_address_of_overloaded_function): Do conversion
	to correct type here, rather than ...
	(instantiate_type): Here.

	* cp-tree.h (DECL_TEMPLATE_PARM_P): New macro.
	(decl_template_parm_p): Remove.
	* decl.c (pushdecl): Don't set DECL_CONTEXT for a template
	* lex.c (do_identifier): Use DECL_TEMPLATE_PARM_P.
	* pt.c (push_inline_template_parms_recursive): Set it.
	(decl_template_parm_p): Remove.
	(check_template_shadow): Use DECL_TEMPLATE_PARM_P.
	(process_template_parm): Set it.

Wed Dec 16 16:33:58 1998  Dave Brolley  <>

	* lang-specs.h (default_compilers): Pass -MD, -MMD and -MG to cc1plus
	if configured with cpplib.

1998-12-15  Mark Mitchell  <>

	* decl.c (poplevel): Make sure ns_binding is initialized.

	* decl.c (finish_function): Undo inadvertent change in previous

1998-12-14  Mark Mitchell  <>

	* class.c (pushclass): Tweak handling of class-level bindings.
	(resolve_address_of_overloaded_function): Update pointer-to-member
	(instantiate_type): Likewise.
	* cvt.c (cp_convert_to_pointer): Likewise.
	* decl.c (pop_binding): Take the DECL to pop, not just the name.
	Deal with `struct stat' hack.
	(binding_level): Add to documentation.
	(push_binding): Clear BINDING_TYPE.
	(add_binding): New function.
	(push_local_binding): Use it.
	(push_class_binding): Likewise.
	(poplevel): Adjust calls to pop_binding.
	(poplevel_class): Likewise.
	(pushdecl): Adjust handling of TYPE_DECLs; add bindings for hidden
	declarations to current binding level.
	(push_class_level_binding): Likewise.
	(push_overloaded_decl): Adjust handling of OVERLOADs in local
	(lookup_namespace_name): Don't crash when confronted with a
	(lookup_name_real): Do `struct stat' hack in local binding
	(build_ptrmemfunc_type): Adjust documentation.
	(grokdeclarator): Don't avoid building real array types when
	processing templates unless really necessary.
	(finish_method): Adjust calls to pop_binding.
	* decl2.c (reparse_absdcl_as_expr): Recursively call ourselves,
	not reparse_decl_as_expr.
	(build_expr_from_tree): Deal with a template-id as the function to
	call in a METHOD_CALL_EXPR.
	* pt.c (convert_nontype_argument): Tweak pointer-to-member handling.
	(maybe_adjust_types_For_deduction): Don't do peculiar things with
	(resolve_overloaded_unification): Handle COMPONENT_REFs.  Build
	pointer-to-member types where necessary.
	* tree.c (build_cplus_array_type_1): Don't avoid building real
	array types when processing templates unless really necessary.
	(build_exception_variant): Compare the exception lists correctly.

1998-12-13  Mark Mitchell  <>

	* cp-tree.def (CPLUS_BINDING): Update documentation.
	* cp-tree.h (LOCAL_BINDING_P): New macro.
	(lang_identifier): Rename local_value to bindings.
	(tree_binding): Make `scope' of type `void*', not `tree'.
	(BINDING_SCOPE): Update documentation.
	(set_identifier_local_value): Remove.
	(push_local_binding): New function.
	(push_class_binding): Likewise.
	* class.c (pushclass): Update comments; use push_class_binding.
	* decl.c (set_identifier_local_value_with_scope): Remove.
	(set_identifier_local_value): Likewise.
	(push_binding): New function.
	(pop_binding): Likewise.
	(binding_level): Update documentation.  Remove shadowed.
	(BINDING_LEVEL): New macro.
	(free_binding_nodes): New variable.
	(poplevel): Adjust for new name-lookup scheme.  Don't mess up
	BLOCK_VARs when doing for-scope extension.  Remove effectively
	dead code.
	(pushlevel_class): Tweak formatting.
	(poplevel_class): Adjust for new name-lookup scheme.
	(print_binding_level): Likewise.
	(store_bindings): Likewise.
	(pushdecl): Likewise.
	(pushdecl_class_level): Likewise.
	(push_class_level_binding): Likewise.
	(push_overloaded_decl): Update comments.  Adjust for new
	name-lookup scheme.
	(lookup_name_real): Likewise.
	(lookup_name_current_level): Likewise.
	(cp_finish_decl): Likewise.
	(require_complete_types_for_parms): Likewise.  Remove misleading
	#if 0'd code.
	(grok_parms): Likewise.  Don't call
	require_complete_types_for_parms here.
	(grok_ctor_properties): Don't treat templates as copy
	(grop_op_properties): Or as assignment operators.
	(start_function): Document.  Adjust for new name-lookup scheme.
	(finish_function): Likewise.
	* decl2.c (do_local_using_decl): Use push_local_binding.
	* lex.c (begin_definition_of_inclass_inline): New function, split
	out from ...
	(do_pending_inlines): Here, and ...
	(process_next_inline): Here.
	(get_time_identifier): Use TIME_IDENTIFIER_* macros.
	(init_filename_times): Likewise.
	(extract_interface_info): Likewise.
	(ste_typedecl_interface_info): Likewise.
	(check_newline): Likewise.
	(dump_time_statistics): Likewise.
	(handle_cp_pragma): Likewise.
	(do_identifier): Adjust for new name-lookup scheme.
	* parse.y (function_try_block): Return ctor_initializer_opt value.
	(fndef): Use it.
	(fn.defpen): Pass appropriate values to start_function.
	(pending_inline): Use functor_try_block value, and pass
	appropriate values to finish_function.
	* pt.c (is_member_template): Update documentation; remove handling
	of FUNCTION_DECLs.  As per name, this function should deal only in
	(decl_template_parm_p): Change name of olddecl parameter to decl.
	(check_template_shadow): Adjust for new name-lookup scheme.
	(lookup_template_class): Likewise.
	(tsubst_decl): Tweak so as not to confuse member templates with
	copy constructors and assignment operators.
	(unify): Handle UNION_TYPEs.
	* ptree.c (print_lang_identifier): Adjust for new name-lookup scheme.
	(lang_print_xnode): Adjust for new name-lookup scheme.
	* typeck.c (mark_addressable): Likewise.
	(c_expand_return): Likewise.

1998-12-08  Jason Merrill  <>

	* decl.c (grokdeclarator): Allow field with same name as class
	in extern "C".

	* decl.c (lookup_name_real): Don't limit field lookup to types.
	* class.c (check_member_decl_is_same_in_complete_scope): No error
	if icv and x are the same.
	* lex.c (do_identifier): Tweak error message.

1998-12-10  Mark Mitchell  <>

	* decl.c (start_enum): Use push_obstacks, not
	(finish_enum): Call pop_obstacks.

1998-12-10  Mark Mitchell  <>

	* class.c (instantiate_type): Return error_mark_node rather than

1998-12-09  Mark Mitchell  <>

	* cp-tree.h (most_specialized_instantiation): New function.
	(print_candidates): Likewise.
	* class.c (validate_lhs): Remove.
	(resolve_address_of_overloaded_function): New function, split out
	and then substantially reworked, from ...
	(instantiate_type): Use it.  Simplify.
	* cvt.c (convert_to_reference): Complain when caller has indicated
	that's the right thing to do.  Don't crash if instantiate_type
	* pt.c: Substitute `parameters' for `paramters' throughout.
	(print_candidates): Don't make it static.
	(most_specialized_instantiation): Split out from ...
	(most_specialized): Here.

Wed Dec  9 15:33:01 1998  Dave Brolley  <>

	* lex.c (lang_init_options): Initialize cpplib.
	* decl2.c (parse_options,cpp_initialized): Removed.
	(lang_decode_option): Move initialization of cpplib to

1998-12-09  Mark Mitchell  <>

	* decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as
	well as the TYPE_DECL, when a typedef name is assigned to a
	previously anonymous type.

1998-12-08  Andrew MacLeod  <>

	* cp/except.c (call_eh_info): Use __start_cp_handler instead of
	__cp_eh_info for getting the eh info pointer.  Add table_index to
	field list.
	(push_eh_cleanup): Don't increment 'handlers' data field.
	(process_start_catch_block): Don't set the 'caught' field.

	* cp/ (CP_EH_INFO): New macro for getting the
	exception info pointer within library routines.
	(__cp_eh_info): Use CP_EH_INFO.
	(__start_cp_handler): Get exception info pointer, set caught field,
	and increment the handlers field.  Avoids this being done by handlers.
	(__uncatch_exception, __check_eh_spec): Use CP_EH_INFO macro.
	(uncaught_exception): Use CP_EH_INFO macro.

Tue Dec  8 10:48:21 1998  Jeffrey A Law  (

	* (cxxmain.o): Depend on $(DEMANGLE_H), not demangle.h

Mon Dec  7 17:56:06 1998  Mike Stump  <>

	* lex.c (check_newline): Add support for \ as `natural'
	characters in file names in #line to be consistent with #include
	handling.  We support escape processing in the # 1 "..." version of
	the command.  See also support in cp/lex.c.

1998-12-07  Zack Weinberg  <>

	* cp/decl2.c: s/data/opts/ when initializing cpp_reader

1998-12-07  Jason Merrill  <>

	* 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

	* 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.

	* 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.

1998-12-05  Jason Merrill  <>

	* decl2.c (coerce_new_type): Use same_type_p.
	(coerce_delete_type): Likewise.

	* call.c (check_dtor_name): Return 1, not error_mark_node.

1998-12-04  Jason Merrill  <>

	* lex.c (handle_cp_pragma): Disable #pragma interface/implementation

	* 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.

	* 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.

	* pt.c (check_explicit_specialization): Complain about specialization
	with C linkage.

	* 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.

1998-12-03  Mark Mitchell  <>

	* class.c (handle_using_decl): Fix comment.  Don't lookup
	constructors in base classes.
	(validate_lhs): Fix typo in comment.
	* search.c (lookup_field_1): Don't return a USING_DECL.

	* cp-tree.h (DECL_ACCESS): Improve documentation.

	* decl.c (expand_static_init): Don't set the initialization-done
	flag until the initialization is done.

1998-12-02  Mark Mitchell  <>

	* decl2.c (validate_nonmember_using_decl): Complain about using
	declarations for class members.

1998-11-29  Jason Merrill  <>

	* typeck2.c (process_init_constructor): Use same_type_p.

	* decl.c (check_tag_decl): Don't warn about null decl inside a

	* pt.c (unify, case OFFSET_TYPE): Pass down 'strict' rather than
	(convert_nontype_argument): Use TYPE_PTRMEMFUNC_FN_TYPE.
	(resolve_overloaded_unification): Strip baselinks.

Fri Nov 27 13:07:23 1998  Kaveh R. Ghazi  <>

	* g++spec.c: Don't prototype xmalloc.

1998-11-25  Jason Merrill  <>

	* except.c (expand_throw): Use TYPE_PTR_P to check for pointers.

	* decl.c (check_tag_decl): Do complain about null friend decl at
	file scope.

1998-11-25  Andreas Schwab  <>

	* lex.c (make_lang_type): Clear the whole struct lang_type, not
	only the first multiple of sizeof (int).

1998-11-24  Jason Merrill  <>

	* decl.c (start_decl): An explicit specialization of a static data
	member is only a definition if it has an initializer.

	* except.c (expand_throw): Use cp_finish_decl for the throw temp.
	* cvt.c (build_up_reference): Pass DIRECT_BIND down into
	* init.c (expand_default_init): Check for DIRECT_BIND instead of

	* call.c (build_over_call): Use build_decl.

	* except.c (expand_throw): Just use convert, not

	* lex.c (handle_generic_pragma): Use token_buffer.

	* decl.c (check_tag_decl): Don't complain about null friend decl.

1998-11-24  Dave Pitts  <>

	* (DEMANGLER_PROG): Move the output arguments to the
	first position.
	* lex.c (check_newline): Use ISALPHA.
	(readescape): Use ISGRAPH.
	(yyerror): Use ISGRAPH.

1998-11-24  Nathan Sidwell  <>

	* search.c (get_abstract_virtuals): Do not use initial
	* typeck2.c (abstract_virtuals_error): Show location of abstract
	* call.c (build_new_method_call): Use
	CLASSTYPE_ABSTRACT_VIRTUAL, rather than recalculate.
	* class.c (finish_struct_bits): Don't bother working out whether
	get_abstract_virtuals will do anything, just do it.

1998-11-24  Graham  <>

	* typeck.c (build_component_ref): Remove unused statement.

1998-11-24  Jason Merrill  <>

	* class.c (add_method): Catch invalid overloads.

	* class.c (add_method): Build up OVERLOADs properly for conversion ops.
	* search.c (lookup_conversions): Handle getting real OVERLOADs.
	(add_conversions): Likewise.  Revert last change.
	* call.c (add_conv_candidate): Pass totype to add_candidate instead
	of fn.  Don't add a new candidate if the last one was for the same
	(print_z_candidates): Handle getting a type as a function.
	(joust): If we got two conversion candidates to the same type,
	just pick one.
	(build_object_call): Lose 'templates'.
	(build_user_type_conversion_1): Handle getting real OVERLOADs.

1998-11-23  Jason Merrill  <>

	* typeck2.c (process_init_constructor): If there are elements
	that don't have initializers and they need to have constructors
	run, supply them with initializers.

	* class.c (finish_struct_1): A class with a 0-width bitfield is
	still empty.

1998-11-23  Mark Mitchell  <>

	* pt.c (instantiate_class_template): Don't try to figure out what
	specialization to use for a partial instantiation.  Correct
	typos in a couple of comments.  Avoid calling uses_template_parms
	multiple times.

1998-11-23  Benjamin Kosnik  <>

	* method.c (process_overload_item): Add call to
	build_mangled_C9x_name for intTI_type_nodes.
	(build_mangled_C9x_name): Add prototype, define.
	* decl.c (init_decl_processing): Add names for

1998-11-23  Jason Merrill  <>

	* parse.y (named_class_head): Update CLASSTYPE_DECLARED_CLASS.

	* class.c (finish_struct_1): Set things up for 0-width bitfields
	like we do for others.

	* decl.c (check_tag_decl): New fn.
	(shadow_tag): Split out from here.
	* decl2.c (grok_x_components): Call it.

1998-11-22  Jason Merrill  <>

	* decl.c: Lose warn_about_return_type.
	(grokdeclarator): Always complain about implicit int, except for
	`main () { ... }'.

	* decl.c (tag_name): New fn.
	(xref_tag): Complain about using typedef-name after class-key.

	* init.c (expand_vec_init): Also keep going if from_array.

	* tree.c (is_overloaded_fn): Also handle the output of

	* decl.c (grokdeclarator): Use constructor_name when comparing
	field name against enclosing class.
	* class.c (finish_struct_anon): Likewise.

1998-11-22  Mark Mitchell  <>

	* decl.c (poplevel): Remove code to handle KEEP == 2.
	(finish_function): Don't confuse BLOCK-order when
	processing a destructor.

1998-11-21  Jason Merrill  <>

	* decl.c (require_complete_types_for_parms): Call layout_decl
	after we've completed the type.

1998-11-21  Martin von Löwis  <>

	* decl2.c (validate_nonmember_using_decl): Allow using templates
	from the global namespace.

1998-11-21  Jason Merrill  <>

	Handle specifying template args to member function templates.
	* tree.c (build_overload): Always create an OVERLOAD for a template.
	* search.c (add_conversions): Handle finding an OVERLOAD.
	* decl2.c (check_classfn): Likewise.
	* lex.c (identifier_type): See through a baselink.
	* parse.y (do_id): Don't call do_identifier if we got a baselink.
	* class.c (instantiate_type, case TREE_LIST): Recurse.

	* decl.c (grokdeclarator): Allow a boolean constant for array
	bounds, odd as that sounds.

	* pt.c (unify): Be more strict about non-type parms, except for
	array bounds.

1998-11-19  Manfred Hollstein  <>

	* (mandir): Replace all uses of $(mandir) by $(man1dir).

1998-11-19  Jason Merrill  <>

	* semantics.c (begin_class_definition): Call
	maybe_process_partial_specialization before push_template_decl.
	Don't call push_template_decl for a specialization.
	* search.c (lookup_field): Do return a member template class.
	* decl2.c (handle_class_head): Handle member template classes.

	* decl.c (grokdeclarator): A parm type need not be complete.

	* pt.c (convert_nontype_argument): Fix thinko.

1998-11-18  Mark Mitchell  <>

	* cp-tree.h (PTRMEM_CST_CLASS): Fix typo.
	(global_delete_fndecl): New variable.
	* decl.c (global_delete_fndecl): Define it.
	(init_decl_processing): Set it.
	* init.c (build_builtin_delete_call): Use it.
	* tree.c (mapcar): Recursively call mapcar for the type of EXPR

1998-11-18  Jason Merrill  <>

	* decl.c (cplus_expand_expr_stmt): Always complain about unresolved

	* tree.c (lvalue_p_1): An INDIRECT_REF to a function is an lvalue.
	* call.c (build_object_call): Also support references to functions.
	* typeck.c (convert_for_initialization): Don't decay a function
	if the target is a reference to function.

	* search.c (add_conversions): Get all the overloads from a class.

	* decl.c (grok_ctor_properties): Complain about any constructor
	that will take a single arg of the class type by value.

	* typeck2.c (build_functional_cast): Can't create objects of
	abstract classes this way.
	* cvt.c (ocp_convert): Likewise.

	* decl.c (grokfndecl): Member functions of local classes are not

1998-11-18  Mark Mitchell  <>

	* (cc1plus): Add dependency on hash.o.

1998-11-18  Jason Merrill  <>

	* search.c (get_abstract_virtuals): Complain about virtuals with
	no final overrider.
	* typeck2.c (abstract_virtuals_error): Remove handling for virtuals
	with no final overrider.
	* class.c (override_one_vtable): Don't set DECL_ABSTRACT_VIRTUAL_P
	on virtuals with no final overrider.

	* lex.c (reinit_parse_for_block): Add a space after the initial ':'.

	* class.c (finish_struct_1): Don't remove zero-width bit-fields until
	after layout_type.

	* friend.c (do_friend): Don't set_mangled_name_for_decl.

	* class.c (finish_struct_anon): Complain about non-fields.
	* decl2.c (build_anon_union_vars): Likewise.

	* decl.c (grokdeclarator): Normal data members can't have the same
	name as the class, either.
	* class.c (finish_struct_anon): Neither can members of an
	anonymous union.

1998-11-17  Mark Mitchell  <>

	* 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.
	(CLASS_TYPE_MARKED_*): Use them.
	* 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
	(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
	* 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
	* pt.c (process_template_parm): Don't set
	(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
	(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
	* tree.c (make_binfo): Check CLASS_TYPE_P.
	(copy_template_template_parm): Adjust.
	(make_temp_vec): Use push_expression_obstack.
	* typeck.c (complete_type): Use new macros.
	(comptypes): Likewise.

1998-11-17  Jason Merrill  <>

	* pt.c (tsubst): Add diagnostics for invalid array, reference
	and pointer to member types.

1998-11-16  Jason Merrill  <>

	* typeck2.c (my_friendly_abort): Don't fatal twice in a row.

	* typeck.c (c_expand_start_case): Use build_expr_type_conversion.

	* parse.y (structsp): Fix cut-and-paste error.

	* init.c (build_new): Complain about non-integral size.

	* parse.y (unary_expr): Complain about defining types in sizeof.

	* typeck.c (expr_sizeof): Complain about sizeof an overloaded fn.

	* rtti.c (build_x_typeid): Complain about typeid without
	including <typeinfo>.
	(get_typeid): Likewise.  Complain about typeid of incomplete type.
	(get_tinfo_fn_dynamic): Likewise.
	(get_typeid_1): Not static anymore.
	* except.c (build_eh_type_type): Use get_typeid_1.

	* rtti.c (build_dynamic_cast_1): Give errors for dynamic_cast to
	ambiguous or private bases.  Fix warning for reference cast.

1998-11-16  Mark Mitchell  <>

	* cp-tree.h (DECL_TEMPLATE_INSTANTIATED): New macro.
	* decl.c (duplicate_decls): Remove special-case code to deal with
	template friends, and just do the obvious thing.
	* pt.c (register_specialization): Tweak for clarity, and also to
	clear DECL_INITIAL for an instantiation before it is merged with a
	(check_explicit_specialization): Fix indentation.
	(tsubst_friend_function): Handle both definitions in friend
	declaration and outside friend declarations.
	(tsubst_decl): Don't clear DECL_INITIAL for an instantiation.
	(regenerate_decl_from_template): Tweak accordingly.
	(instantiate_decl): Likewise.

1998-11-16  Jason Merrill  <>

	* decl.c (cplus_expand_expr_stmt): Promote warning about naked
	member function reference to error.
	* cvt.c (ocp_convert): Complain about converting an overloaded
	function to void.

	* init.c (build_offset_ref): Just return a lone static member

	* decl.c (cp_finish_decl): Only complain about real CONSTRUCTORs,
	not internal ones.

	* typeck.c (build_binary_op_nodefault): Improve error handling.

	* decl.c (grokfndecl): Complain about making 'main' a template.

	* typeck.c (string_conv_p): Don't convert from wchar_t[] to char*.

	* call.c (build_method_call): Handle a BIT_NOT_EXPR around a
	TYPE_DECL in a template.

1998-11-15  Jason Merrill  <>

	* typeck2.c (my_friendly_abort): Add URL in the other case, too.

	* decl.c (struct cp_function): Add named_label_uses.
	(push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.
	(define_label): Also complain about jumping into the scope of
	non-POD objects that don't have constructors.
	* tree.c (pod_type_p): New fn.

	* pt.c (instantiate_class_template): Clear TYPE_BEING_DEFINED sooner.
	* rtti.c (synthesize_tinfo_fn): Call import_export_decl here.
	(get_tinfo_fn): Not here.
	* repo.c (repo_get_id): Abort if we get called for an incomplete

1998-11-13  Mark Mitchell  <>

	* except.c (expand_throw): Make sure first argument to
	__cp_push_exception is of type `void*' to avoid spurious error

1998-11-11  Jason Merrill  <>

	* pt.c (try_one_overload): Take orig_targs again.  Only check for
	mismatches against them; we don't care what a previous call found.
	(resolve_overloaded_unification): Adjust.

	* search.c (lookup_field): Don't return anything for a non-type
	field from a dependent type.
	* decl.c (grokdeclarator): Resolve SCOPE_REFs of the current class
	in an array declarator.
	(start_decl): Push into the class before looking for the field.

1998-11-08  Mark Mitchell  <>

	* method.c (build_overload_value): Handle REFERENCE_TYPE.

1998-11-08  Martin von Löwis  <>

	* decl.c (grokdeclarator): Allow namespace-scoped members if they
	are friends.

1998-11-08  Jason Merrill  <>

	* pt.c (tsubst_decl): Don't mess with the global value of an

1998-11-03  Christopher Faylor  <>

	* decl.c (init_decl_processing): Remove CYGWIN conditional
	since CYGWIN is now able to deal with trapping signals.

Sat Nov  7 15:48:02 1998  Kaveh R. Ghazi  <>

	* cp-tree.h: Don't include gansidecl.h.
	* Include gansidecl.h (since we don't include config.h)
	* g++spec.c: Don't include gansidecl.h.

1998-11-06  Mark Mitchell  <>

	* cp-tree.h (lang_decl_flags): Add defined_in_class.  Decrease
	size of dummy.
	(check_static_variable_definition): New function.
	* decl.c (cp_finish_decl): Set DECL_DEFINED_IN_CLASS_P, if
	(check_static_variable_definition): Split out from ...
	(grokdeclarator): Here.
	* pt.c (check_default_tmpl_args): New function, split out from ...
	(push_template_decl_real): Here.
	(instantiate_template): Fix comment.

1998-11-04  Mark Mitchell  <>

	* cp-tree.h (CP_TYPE_CONST_P): Make {0,1}-valued.
	(CP_TYPE_VOLATILE_P): Likewise.
	(CP_TYPE_RESTRICT_P): Likewise.

1998-11-03  Mark Mitchell  <>

	* pt.c (tsubst): Use build_index_type, not build_index_2_type.

1998-11-02  Jason Merrill  <>

	* class.c (instantiate_type): Be more helpful.

	* decl2.c (import_export_decl): Call import_export_class.

	* decl2.c (build_expr_from_tree): Propagate TREE_HAS_CONSTRUCTOR.
	* pt.c (tsubst_copy): Likewise.

1998-11-02  Mark Mitchell  <>

	* init.c (expand_vec_init): Fix off-by-one error.

1998-11-02  Alexandre Oliva  <>

	* parse.y (apparent_template_type): New type.
	(named_complex_class_head_sans_basetype): Use it.
	* (CONFLICTS): One new conflict.
	* parse.c: Regenerated.

1998-11-01  Mark Mitchell  <>

	* cp-tree.h (COMPARE_STRICT): New macro.
	(COMPARE_BASE): Likewise.
	(same_type_p): Likewise.
	(same_or_base_type_p): Likewise.
	* call.c (standard_conversion): Use them, in place of comptypes
	with numeric arguments.
	(reference_binding): Likewise.
	(convert_like): Likewise.
	(build_over_call): Likewise.
	(is_subseq): Likewise.
	(is_properly_derived_from): Likewise.
	(compare_ics): Likewise.
	(joust): Likewise.
	* class.c (delete_duplicate_fields_1): Likewise.
	(resolves_to_fixed_type_p): Likewise.
	(instantiate_type): Likewise.  Remove #if 0'd code.
	* decl.c (decls_match): Likewise.  Use COMPARE_REDECLARATION here.
	(pushdecl): Likewise.
	(lookup_name_real): Likewise.
	(grokdeclarator): Likewise.  Check for illegal array declarations.
	(grokparms): Likewise.
	(grok_op_properties): Likewise.
	* decl2.c (check_classfn): Likewise.
	* friend.c (is_friend): Likewise.
	(make_friend_class): Likewise.
	* init.c (expand_aggr_init): Likewise.
	(expand_vec_init): Likewise.
	* pt.c (is_member_template_class): Remove declaration.
	(is_specialization_of): Use COMPARE_* and new macros.
	(comp_template_parms): Likewise.
	(convert_nontype_argument): Likewise.
	(coerce_template_template_parms): Likewise.
	(template_args_equal): Likewise.
	(lookup_template_class): Likewise.
	(type_unification_real): Likewise.
	(unify): Likewise.
	(get_bindings_real): Likewise.
	* search.c (covariant_return_p): Likewise.
	(get_matching_virtual): Likewise.
	* sig.c (match_method_types): Likewise.
	* tree.c (vec_binfo_member): Likewise.
	(cp_tree_equal): Likewise.
	* typeck.c (common_type): Likewise.
	(comp_array_types): Likewise.  Get issues involving unknown array
	bounds right.
	(comptypes): Update comments.  Use new flags.
	(comp_target_types): Use new macros.
	(compparms): Likewise.
	(comp_target_parms): Likewise.
	(string_conv_p): Likewise.
	(build_component_ref): Likewise.
	(build_indirect_ref): Likewise.
	(build_conditional_expr): Likewise.
	(build_static_cast): Likewise.
	(build_reinterpret_cast): Likewise.
	(build_const_cast): Likewise.
	(build_modify_expr): Likewise.
	(convert_for_assignment): Likewise.
	(comp_ptr_ttypes_real): Likewise.
	(ptr_reasonably_similar): Likewise.
	(comp_ptr_ttypes_const): Likewise.

1998-10-31  Jason Merrill  <>

	* rtti.c (build_dynamic_cast_1): Fix cut-and-paste error.

1998-10-30  Mark Mitchell  <>

	* decl2.c (delete_sanity): Pass integer_zero_node, not
	integer_two_node, to build_vec_delete.
	* init.c (build_array_eh_cleanup): Remove.
	(expand_vec_init_try_block): New function.
	(expand_vec_init_catch_clause): Likewise.
	(build_vec_delete_1): Don't deal with case that auto_delete_vec
	might be integer_two_node anymore.
	(expand_vec_init): Rework for initialization-correctness and
	* typeck2.c (process_init_constructor): Make mutual exclusivity
	of cases more obvious.

1998-10-29  Jason Merrill  <>

	* decl.c (lookup_name_real): OK, only warn if not lexing.
	Simplify suggested fix.

	* cp-tree.h (IDENTIFIER_MARKED): New macro.
	* search.c (lookup_conversions): Use breadth_first_search.
	(add_conversions): Avoid adding two conversions to the same type.
	(breadth_first_search): Work with base binfos, rather
	than binfos and base indices.
	(get_virtual_destructor): Adjust.
	(tree_has_any_destructor_p): Adjust.
	(get_matching_virtual): Adjust.

	* pt.c (push_template_decl_real): Generalize check for incorrect
	number of template parms.
	(is_member_template_class): #if 0.

1998-10-29  Richard Henderson  <>

	* (cc1plus): Put CXX_OBJS, and thence @extra_cxx_objs@,

1998-10-28  Zack Weinberg  <>

	* lex.c: Call check_newline from lang_init always.  After
	calling cpp_start_read, set yy_cur and yy_lim to read from the
	cpplib token buffer.

1998-10-28  Jason Merrill  <>

	* class.c (instantiate_type): Don't consider templates for a normal

	* class.c (finish_struct_1): Don't complain about non-copy
	assignment ops in union members.

	* class.c (build_vtable): Don't pass at_eof to import_export_vtable.
	(prepare_fresh_vtable): Likewise.
	(finish_struct_1): Don't call import_export_class.
	* decl2.c (finish_vtable_vardecl): Do import/export stuff.
	(finish_prevtable_vardecl): Lose.
	(finish_file): Don't call it.
	* pt.c (instantiate_class_template): Likewise.
	* cp-tree.h: Remove it.

	* init.c (build_delete): Reset TYPE_HAS_DESTRUCTOR here.
	* decl.c (finish_function): Not here.
	(start_function): Do set DECL_INITIAL.

	* pt.c (push_template_decl_real): Complain about default template
	args for enclosing classes.

	* call.c (add_function_candidate): Treat conversion functions
	as coming from the argument's class.
	* cp-tree.h (DECL_CONV_FN_P): New fn.
	* 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.

1998-10-27  Jason Merrill  <>

	* lex.c (do_identifier): Also generate LOOKUP_EXPR for RESULT_DECL.
	* method.c (hack_identifier): Also check for using RESULT_DECL
	from outer context.

1998-10-27  Mark Mitchell  <>

	* decl.c (grokdeclarator): Use type_quals, rather than constp,

1998-10-27  Jason Merrill  <>

	* call.c (standard_conversion): instantiate_type here.
	(reference_binding): And here.
	(implicit_conversion): Not here.
	(build_op_delete_call): No need to cons up an OVERLOAD.
	* cvt.c (cp_convert_to_pointer): instantiate_type here.
	(convert_to_reference): And here.
	* decl.c (grok_reference_init): Not here.
	(grokparms): Or here.
	* typeck2.c (digest_init): Or here.
	* typeck.c (decay_conversion): Take the address of overloaded
	functions, too.
	(require_instantiated_type): Lose.
	(convert_arguments): Don't handle unknown types here.
	(build_c_cast): Likewise.
	(build_binary_op): Gut.
	(build_conditional_expr): Don't require_instantiated_type.
	(build_modify_expr): Likewise.
	(build_static_cast): Don't instantiate_type.
	(build_reinterpret_cast): Likewise.
	(build_const_cast): Likewise.
	(convert_for_initialization): Likewise.
	(build_ptrmemfunc): Use type_unknown_p.
	(convert_for_assignment): Also do default_conversion on overloaded
	functions.  Hand them off to ocp_convert.

1998-10-26  Mark Mitchell  <>

	* 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.

1998-10-26  Jason Merrill  <>

	* decl.c (grokdeclarator): Complain about a variable using
	constructor syntax coming back null from start_decl.

	* friend.c (make_friend_class): Complain about trying to make
	a non-class type a friend.

	* decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
	(start_function): Not here.

1998-10-26  Brendan Kehoe  <>

	* decl.c (grokdeclarator): Disallow `explicit' in a friend declaration.

1998-10-26  Jason Merrill  <>

	* typeck2.c (process_init_constructor): Only skip anonymous fields
	if they are bitfields.

	* 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.

1998-10-26  Manfred Hollstein  <>

	* cp-tree.h (FORMAT_VBASE_NAME): Make definition unconditional.

1998-10-26  Jason Merrill  <>

	* typeck.c (convert_arguments): Don't handle pmf references

	* init.c (build_member_call): Don't try to convert to the base type
	if it's ambiguous or pedantic.

	* typeck2.c (check_for_new_type): Only depend on pedantic for
	C-style casts.

1998-10-25  Mark Mitchell  <>

	* decl.c (grokdeclarator): Set DECL_NONCONVERTING_P for all
	non-converting constructors.

1998-10-24  Martin von Löwis  <>

	* gxxint.texi: Correct documentation for n, N, Q, and B.

1998-10-23  Martin von Löwis  <>

	* parse.y (condition): Convert VAR_DECL from reference to indirect

1998-10-23  Andrew MacLeod  <>

	* (__cp_pop_exception): Free the original exception
	value, not the potentially coerced one.

1998-10-23  Mark Mitchell  <>

	* (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_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'.
	(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.

1998-10-23  Jason Merrill  <>

	* cp-tree.h (CP_TYPE_READONLY): New macro to handle arrays.
	(CP_TYPE_VOLATILE): Likewise.
	* decl.c (grokdeclarator): Use them.
	* tree.c (canonical_type_variant): Likewise.

1998-10-22  Martin von Löwis  <>

	* parse.y (named_class_head): Push into class while parsing the
	base class list.
	* decl2.c (push_scope, pop_scope): New functions.
	* cp-tree.h: Declare them.
	* init.c (build_new_1): Delay cleanup until end of full expression.

1998-10-21  Jason Merrill  <>

	* typeck.c (build_component_ref): Use of a type here is an error.

1998-10-19  Jason Merrill  <>

	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"
	* 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
	(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.

1998-10-18  Martin von Löwis  <>

	* decl2.c (validate_nonmember_using_decl): Fix using-directives of
	std if std is ignored.

1998-10-18  Jason Merrill  <>

	* decl.c (grokvardecl): Fix thinko.

	* decl.c (grokdeclarator): Embedded attrs bind to the right,
	not the left.

	* parse.y (fn.def2): Fix 'attrs' format.

1998-10-18  Alastair J. Houghton  <>

	* (CONFLICTS): Update.
	* parse.y (expr_or_declarator_intern): New rule.
	(expr_or_declarator, direct_notype_declarator, primary,
	functional_cast): Use it.
	(notype_declarator_intern): New rule.
	(notype_declarator, complex_notype_declarator): Use it.

1998-10-17  Jason Merrill  <>

	* decl.c (grokfndecl): Set DECL_CONTEXT to namespace if appropriate.
	(grokvardecl): Likewise.

Sat Oct 17 23:27:20 1998  Kaveh R. Ghazi  <>

	* class.c (make_method_vec): Cast 1st argument of `bzero' to (PTR).
	(add_method): Likewise for arguments 1 & 2 of `bcopy'.

	* decl.c (signal_catch): Mark with ATTRIBUTE_NORETURN.

	* pt.c (process_partial_specialization): Cast 1st argument of
	`bzero' to (PTR).

	* tree.c (build_base_fields): Cast `base_align' to (int) when
	comparing against one.

1998-10-16  Mark Mitchell  <>

	* decl.c (lookup_name_real): Handle template parameters for member
	templates where said parameters have the same name as the
	surrounding class.

	* decl.c (expand_static_init): Build cleanups before entering the
	anonymous function used to do them to avoid access-checking

	* decl.c (grokfndecl): Add back call to cplus_decl_attributes
	accidentally removed by previous change, and make DECL_RTL here.
	* class.c (add_method): Don't make DECL_RTL here.

	* pt.c (for_each_template_parm): Don't examine uninstantiated
	default arguments.

1998-10-16  Dave Brolley  <>

	* lex.c (real_yylex): Fix unaligned access of wchar_t.

1998-10-16  Mark Mitchell  <>

	* class.c (add_method): Fix documentation to reflect previous
	changes.  Check for duplicate method declarations here.
	* decl.c (decls_match): Handle FUNCTION_DECL vs TEMPLATE_DECL
	correctly; such things never match.
	(grokfndecl): Don't look for duplicate methods here.
	* decl2.c (check_classfn): Don't assume names are mangled.
	Don't add bogus member function declarations to a class before the
	class type is complete.
	(grokfield): Reformat error message.
	* method.c (set_mangled_name_for_decl): Don't mangle names while

1998-10-16  Jason Merrill  <>

	* typeck.c (build_indirect_ref): Complain about a pointer to data
	member, too.
	* typeck2.c (build_m_component_ref): Don't indirect a pointer to
	data member.
	* init.c (resolve_offset_ref): Don't undo the above.

	* cp-tree.h (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): New macros.
	(struct lang_decl_flags): Add `bitfield'.
	* class.c (finish_struct_1): Use DECL_C_BIT_FIELD instead of
	* decl2.c (grokbitfield, grok_alignof): Likewise.
	* init.c (build_offset_ref): Likewise.
	* typeck.c (build_component_addr, expr_sizeof): Likewise.
	* cvt.c (build_up_reference): Don't crash if taking the address
	returns error_mark_node.

	* decl.c (grokfndecl): Also check ctype when checking for ::main().

1998-10-15  Jason Merrill  <>

	* decl.c (grokfndecl): ::main and __builtin_* get C linkage.
	Do mangling here.
	(grokdeclarator): Instead of here.
	* friend.c (do_friend): Lose special handling of ::main and
	* cp-tree.h (DECL_MAIN_P): Check for C linkage.

	* spew.c (yylex): Clear looking_for_typename if we got
	'enum { ... };'.

1998-10-15  Mark Mitchell  <>

	* class.c (maybe_warn_about_overly_private_class): Improve error
	messages for class with only private constructors.

	* cp-tree.def (TYPENAME_TYPE): Add to documentation.
	* cp-tree.h (TYPENAME_TYPE_FULLNAME): Document.
	(build_typename_type): New function.
	* decl.c (build_typename_type): Broken out from ...
	(make_typename_type): Use it.
	* search.c (lookup_field): Likewise.

1998-10-14  Benjamin Kosnik  <>

	* pt.c (convert_nontype_argument): Check against type_referred_to.
	* decl.c (grokvardecl): Check for declarator name before building

1998-10-14  Mark Mitchell  <>

	* pt.c (lookup_template_class): Add comment.
	(instantiate_class_template): Don't mark the _TYPE node for
	member class templates as an instantiation.

1998-10-14  Jason Merrill  <>

	* decl.c (grokfndecl): Fix my thinko.

1998-10-13  Jason Merrill  <>

	* (fast_compare): Remove.
	(before): Just use strcmp.
	* (operator==): Just use strcmp.

1998-10-13  Klaus-Georg Adams  <>

	* decl.c (grokfndecl): Don't check for linkage in `extern "C"'

1998-10-13  Mark Mitchell  <>

	* cp-tree.h (specializations_of_same_template_p): Remove.
	* search.c (get_template_base): Don't use it.
	(get_template_base_recursive): Likewise.
	* pt.c (specializations_of_same_template_p): Remove.
	(unify): Don't use it.
	(lookup_template_class): Find the correct parent when setting

1998-10-12  Jason Merrill  <>

	* (operator==): Always compare names.

1998-10-12  Herman ten Brugge  <>

	* decl.c (start_function): Fix cut-and-paste error.

1998-10-12  Jason Merrill  <>

	* inc/typeinfo: Add #pragma interface.
	(operator!=): Just call operator==.
	* Add #pragma implementation.
	(operator==): Move from inc/typeinfo and
	Check __COMMON_UNRELIABLE instead of _WIN32.

	* typeck2.c (my_friendly_abort): Add URL.

1998-10-12  Alastair J. Houghton  <>

	* decl.c (start_method): Added extra parameter for attributes.
	* cp-tree.h (start_method): Update prototype.
	* parse.y (fn.def2): Update start_method parameter list.

1998-10-11  Mark Mitchell  <>

	* cp-tree.h (specializations_of_same_template_p): Declare.
	* pt.c (specializations_of_same_template_p): New function.
	(unify): Use it.
	* search.c (get_template_base): Use it.
	(get_template_base_recursive): Likewise.

1998-10-10  Manfred Hollstein  <>

	* decl2.c (start_objects): Add new variable `joiner' and
	initialize it properly.

1998-10-09  Mark Mitchell  <>

	* search.c (expand_upcast_fixups): Tweak to match 1998-10-07
	change to vtable types.

	* cvt.c (ocp_convert): Avoid infinite recursion caused by
	1998-10-03 change.

1998-10-08  Jason Merrill  <>

	* pt.c (resolve_overloaded_unification): New fn.
	(try_one_overload): Likewise.
	(unify): Don't fail on unknown type.
	(type_unification_real): Likewise.  Use resolve_overloaded_unification
	to handle an overloaded argument.
	(template_args_equal): Split out...
	(comp_template_args): From here.
	(determine_specialization): Also allow a template with more
	parms than were explicitly specified.
	* cp-tree.h: Add template_args_equal.
	* call.c (resolve_args): Remove TEMPLATE_ID_EXPR code.

Thu Oct  8 15:58:30 1998  Anthony Green  <>

	* semantics.c (finish_asm_stmt): Revert my 1998-09-28

Thu Oct  8 06:00:19 1998  Jeffrey A Law  (

	* typeck.c (unsigned_type): Only return TItype nodes when
	HOST_BITS_PER_WIDE_INT is >= 64 bits.
	(signed_type): Likewise.
	* decl.c (intTI_type_node, unsigned_intTI_type_node): Only declare
	when HOST_BITS_PER_WIDE_INT is >= 64 bits.
	(init_decl_processing): Only create TItype nodes when
	HOST_BITS_PER_WIDE_INT is >= 64 bits.
	* cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Only declare
	when HOST_BITS_PER_WIDE_INT is >= 64 bits.

Wed Oct  7 12:32:44 1998  Kaveh R. Ghazi  <>

	* (hash.h): Add -L KR-C -F ', 0, 0' flags to gperf.
	(gxx.gperf): Update comments describing invocation flags.
	(hash.h): Regenerate using gperf 2.7.1 (19981006 egcs).

1998-10-07  Mark Mitchell  <>

	* class.c (finish_struct_1): Add commentary on previous change.

	* cp-tree.h (vtbl_ptr_type_node): New variable.
	* class.c (build_vtbl_ref): Don't indirect through the vptr; it's
	already of the right type.
	(finish_struct_1): Make the vptr be of type vtbl_ptr_type_node.
	Simplify code to grow vtable.
	* decl.c (vtbl_ptr_type_node): Define.
	(init_decl_processing): Initialize it.

1998-10-06  Mark Mitchell  <>

	* 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.
	(PTRMEM_CST_CLASS): New macro.
	(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
	(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
	(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
	(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
	* expr.c (cpls_expand_expr): Remove dead code.  Handle
	* 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
	(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.

	* call.c (resolve_args): Resolve template specializations, if

Tue Oct  6 07:57:26 1998  Kaveh R. Ghazi  <>

	* (spew.o): Depend on toplev.h.

	* call.c (compare_ics): Initialize variables `deref_from_type2',
	`deref_to_type1' and `deref_to_type2'.

	* except.c (get_eh_type): Hide prototype and definition.
	(process_start_catch_block_old): Remove unused static prototype.

	* pt.c (tsubst_decl): Initialize variable `argvec'.

	* spew.c: Include toplev.h.

1998-10-05  Jason Merrill  <>

	* pt.c (instantiate_decl): Do save and restore file position.

1998-10-05  Martin von Löwis  <>

	* method.c (build_decl_overload_real): Clear
	numeric_output_need_bar after __.

1998-10-05  Nathan Sidwell  <>

	* call.c (build_new_method_call): Issue 'incomplete type' error,
	if class is not defined.

1998-10-05  Kaveh R. Ghazi  <>

	* call.c (build_object_call): Move declaration of variable
	`fn' into the scope where it is used.  Don't access variable
	`fn' when it is uninitialized, instead use `fns'.

1998-10-04  Theodore Papadopoulo  <>

	* errfn.c (cp_thing): Print buf as a string not as a printf format
	to avoid problems with the operator%.  Consequently, `%%' sequences
	in format are copied as `%' in buf.

1998-10-04  Jason Merrill  <>

	* pt.c (pop_tinst_level): Call extract_interface_info.
	(instantiate_decl): Don't save and restore file position.

	* decl.c (cp_finish_decl): Make statics in extern inlines and
	templates common, if possible and the target doesn't support weak

	* decl.c (grokdeclarator): Remove redundant calls to
	build_type_variant and some duplicated code.
	* sig.c (build_signature_reference_type): Only take the type parm.
	(build_signature_pointer_type): Likewise.
	* tree.c (build_cplus_method_type): Adjust.
	* cp-tree.h: Update.

1998-10-04  Mark Mitchell  <>

	* call.c (build_over_call): Make pedwarns about dropped qualifiers
	into full-fledged errors.
	* cvt.c (convert_to_reference): Likewise.
	* typeck.c (convert_for_assignment): Likewise.

	* search.c (expand_upcast_vtables): In addition to unsetting
	TREE_READONLY, remove top-level const type qualifier.

1998-10-03  Mark Mitchell  <>

	* class.c (current_class_ptr, current_class_ref): Clarify
	* 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
	* 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
	* typeck.c (decay_conversion): Likewise.
	(build_component_ref): Make sure the type of the COMPONENT_REF
	contains top-level qualifiers, as appropriate.  Improve
	(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.

1998-10-03  Jason Merrill  <>

	* decl2.c (merge_functions): Remove duplicates.

	* decl2.c: Add -f{no-,}implicit-inline-templates.
	(import_export_decl): Check it.

	* decl.c (lookup_name_real): Template parms also take precedence
	over implicit typename.  Only warn if yylex.

	* typeck.c (build_conditional_expr): Only fold if ifexp is an

	* decl2.c (finish_vtable_vardecl): Check DECL_INTERFACE_KNOWN
	instead of linkage.

1998-10-01  Jason Merrill  <>

	* cp-tree.h (FORMAT_VBASE_NAME): New macro.
	* class.c (build_vbase_pointer): Use it.
	* rtti.c (expand_class_desc): Likewise.
	* tree.c (build_vbase_pointer_fields): Likewise.

Thu Oct  1 10:43:45 1998  Nick Clifton  <>

	* decl.c (start_decl): Add invocation of
	(start_function): Add invocation of

	* lex.c: Replace occurrences of HANDLE_SYSV_PRAGMA with

1998-09-28  Anthony Green  <>

	* semantics.c (finish_asm_stmt): Always permit volatile asms.

1998-09-28  Mark Mitchell  <>

	* decl.c (grokdeclarator): Tighten checks for invalid
	destructors.  Improve error-messages and error-recovery.
	* decl2.c (check_classfn): Don't assume that mangled destructor
	names contain type information.

1998-09-25  Jason Merrill  <>

	* search.c (get_base_distance): Remove assert.

	* decl2.c (build_anon_union_vars): Don't process a field with no
	(finish_anon_union): Also complain about local anon unions with no

1998-09-25  Martin von Löwis  <>

	* decl.c (lookup_namespace_name): If the name is a namespace,
	return it immediately.

Fri Sep 25 11:45:38 1998  Kaveh R. Ghazi  <>

	* cp-tree.h (define_case_label): Remove unused parameter.
	(check_java_method): Likewise.
	(grokclassfn): Likewise.
	(expand_aggr_init): Likewise.
	(build_x_delete): Likewise.
	(maybe_end_member_template_processing): Likewise.
	(unshare_base_binfos): Add prototype.
	(string_conv_p): Likewise.
	(my_friendly_abort): Mark with ATTRIBUTE_NORETURN.

	* cvt.c (build_up_reference): Remove unused parameter
	`checkconst', all callers changed.
	(build_type_conversion): Mark parameter `code' with
	(build_expr_type_conversion): Initialize variable `conv'.

	* decl.c (push_namespace): Initialize variable `d'.
	(define_case_label): Remove unused parameter `decl', all callers

	* decl2.c (lang_decode_option): If !USE_CPPLIB, mark parameter
	`argc' with ATTRIBUTE_UNUSED.
	(grokclassfn): Remove unused parameter `cname', all callers
	(check_java_method): Likewise for parameter `ctype'.
	(copy_assignment_arg_p): Mark parameter `virtualp' with
	(finish_prevtable_vardecl): Likewise for parameter `prev'.

	* expr.c (extract_init): Likewise for parameters `decl' and `init'.

	* init.c (expand_aggr_init_1): Remove unused parameter
	`alias_this', all callers changed.
	(expand_aggr_init): Likewise.
	(expand_default_init): Likewise.
	(build_new_1): Initialize variable `susp'.
	(build_x_delete): Remove unused parameter `type', all callers

	* lex.c (set_typedecl_interface_info): Mark parameter `prev' with
	(readescape): Use (unsigned) value in shift.
	(real_yylex): Likewise.  Likewise.  Also cast `sizeof' to int when
	comparing to a signed quantity.

	* pt.c (maybe_end_member_template_processing): Remove unused
	parameter `decl', all callers changed.
	(check_explicit_specialization): Add braces around empty body in
	an else-statement.
	(current_template_args): Initialize variable `args'.
	(lookup_template_class): Likewise for variable `prev_local_enum'.
	(tsubst_decl): Likewise for variable `r'.
	(set_mangled_name_for_template_decl): Initialize variable

	* spew.c (scan_tokens): Change type of parameter `n' to unsigned.
	Likewise for variable `i'.
	(yylex): Initialize variable `trrr'.

	* typeck.c (compparms): Mark variable `strict' with

	* xref.c (simplify_type): Cast argument of ctype function to
	`unsigned char'.

1998-09-24  Mark Mitchell  <>

	* cp-tree.h (language_lvalue_valid): Remove.
	* decl.c (grokdeclarator): Don't disallow references to functions.
	* tree.c (lvalue_p_1): New function, combining duplicated
	code from ...
	(lvalue_p): Use it.
	(real_lvalue_p): Likewise.
	* typeck.c (language_lvalue_valid): Remove.
	(build_modify_expr): Treat FUNCTION_TYPEs as readonly, even though
	they don't have TREE_READONLY set.
	* typeck2.c (readonly_error): Add case for FUNCTION_DECLs.

1998-09-24  Benjamin Kosnik  <>

	* spew.c (yylex): Give diagnostic.
	* hash.h (is_reserved_word): Add export.
	* gxx.gperf: Likewise.
	* lex.h (rid): Add RID_EXPORT.
	* lex.c (init_parse): Likewise.

Tue Sep 22 21:01:19 1998  Gerald Pfeifer  <>

	* friend.c (do_friend): Make warning a full sentence.

1998-09-22  Mark Mitchell  <>

	* parse.y (component_decl_list): Improve error-recovery.

1998-09-22  Benjamin Kosnik  <>

	* decl.c (make_typename_type): Move error to point where name
	variable can be used by dump_type.

1998-09-22  Mark Mitchell  <>

	* decl.c (grokfndecl): Improve error-recovery.
	* decl2.c (grokfield): Likewise.
	* pt.c (finish_member_template_decl): Likewise.

1998-09-20  Martin von Löwis  <>

	* method.c (hack_identifier): Finding multiple members is always
	an error.

1998-09-21  Per Bothner  <>

	* (c++-filt):  Link libiberty.a after cxxmain.o.

Mon Sep 21 01:53:05 1998  Felix Lee  <>

	* lex.c (init_lex): Use getenv ("LANG"), not GET_ENVIRONMENT ().

1998-09-20  Mark Mitchell  <>

	* class.c (maybe_warn_about_overly_private_class): Reformat.

1998-09-17  Andrew MacLeod  <>

	* (__cplus_type_matcher): Realign some code.

1998-09-16  Mark Mitchell  <>

	* (tinfo.o): Use CXXFLAGS when compiling.
	(tinfo2.o): Likewise.
	(exception.o): Likewise.
	(new.o): Likewise.
	(opnew.o): Likewise.
	(opnewnt.o): Likewise.
	(opvnew.o): Likewise.
	(opvnewnt.o): Likewise.
	(opdel.o): Likewise.
	(opdelnt.o): Likewise.
	(opvdel.o): Likewise.
	(opvdelnt.o): Likewise.

1998-09-16  Richard Henderson  <>

	* decl.c (init_decl_processing): Kill __builtin_fp and __builtin_sp.

1998-09-15  Alexandre Oliva  <>

	* call.c (build_field_call): Handle static data members too.

	* typeck.c (comptypes): When comparing pointer types, check
	whether referred types match even in strictest modes.

1998-09-15  Mark Mitchell  <>

	* cp-tree.h: Revert previous change.
	(finish_struct_methods): Remove declaration.
	* class.c: Revert previous change.
	(maybe_warn_about_overly_private_class): New function.
	(finish_struct_methods): Declare here, and make static.  Remove
	unnecessary parameters.  Tidy slightly.  Use
	(finish_struct_1): Adjust.  Remove check for private constructors,
	now done elsewhere.
	(finish_struct): Adjust.

1998-09-15  Andrew MacLeod  <>

	* except.c (expand_start_catch_block): No need to check for new
	exception model.
	(process_start_catch_block_old): Deleted.
	(process_start_catch_block): Add call to start_decl_1().
	(expand_end_catch_block): Add call to end_catch_handler().
	* (__cplus_type_matcher): Only check the exception
	language if there is an exception table.

1998-09-15  Andrew MacLeod  <>

	* search.c (expand_indirect_vtbls_init): Mark temporary stack slots
	as used to prevent conflicts with virtual function tables.

1998-09-14  Mark Mitchell  <>

	* cp-tree.h (lang_type): Add has_non_private_static_mem_fn.
	(CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN): New macro, to access it.
	* class.c (maybe_class_too_private_p): New function.
	(finish_struct_methods): Use it.
	(finish_struct_1): Likewise.

	* pt.c (check_specialization_scope): Fix spelling error.
	(check_explicit_specialization): Remove code to handle explicit
	specializations in class scope; they are now correctly diagnosed
	as errors.

1998-09-10  Mark Mitchell  <>

	* decl.c (pushdecl): Don't copy types if the
	DECL_ABSTRACT_ORIGIN of the new decl matches the TYPE_NAME of the

1998-09-09  Kriang Lerdsuwanakij  <>

	* class.c (get_enclosing_class): New function.
	(is_base_of_enclosing_class): Likewise.
	* cp-tree.h (get_enclosing_class): Declare.
	(is_base_of_enclosing_class): Likewise.
	* pt.c (coerce_template_parms): Use them.

1998-09-09  Jason Merrill  <>

	* g++spec.c (lang_specific_driver): Check whether MATH_LIBRARY is
	null to decide whether to use it.

	* error.c (dump_type_real): Handle NAMESPACE_DECL.
	* parse.y (base_class.1): Avoid crash on error.

1998-09-08  Martin von Löwis  <>

	* decl.c (make_typename_type): If context is a namespace, the code
	is in error.

1998-09-08  Mumit Khan  <>

	* parse.y (nomods_initdcl0): Set up the parser stack correctly.

1998-09-08  Mark Mitchell  <>

	* 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}.

	* decl.c (grokparms): Distinguish between references and pointers
	in error message.

1998-09-08  Richard Henderson  <>
	    Mark Mitchell  <>

	* pt.c (process_partial_specialization): Consistently allocate
	and zero tpd.parms based on ntparms.  Use tpd2.parms, not
	tpd.parms, where appropriate.

Sun Sep  6 00:00:51 1998  Jeffrey A Law  (

	* (INCLUDES): Update after recent toplevel gcc

1998-09-05  Mark Mitchell  <>

	* class.c (finish_struct): Remove hackery to deal with explicit
	specializations in class scope.
	* decl.c (grokfndecl): Improve error-recovery.
	* decl2.c (grokfield): Likewise.
	* pt.c (check_specialization_scope): New function.
	(begin_specialization): Call it.
	(process_partial_specialization): New function, split out from
	push_template_decl.  Check partial specializations more
	(push_template_decl): Call it.
	(check_explicit_specialization): Don't attempt to handle explicit
	specializations in class scope.
	(template_parm_data): Document.  Add current_arg and
	(mark_template_parm): Set it.
	(tsubst_arg_types): Remove unused variable.
	* semantics.c (begin_class_definition): Tweak.

1998-09-04  Mark Mitchell  <>

	* inc/typeinfo (type_info::type_info(const char*)): Make

	* cp-tree.h (hash_tree_cons_simple): New macro.
	* pt.c (tsubst_arg_types): New function.  Use hash_tree_cons.
	(coerce_template_parms): Use make_temp_vec, instead of
	make_tree_vec.  Document this behavior.
	(lookup_template_class): Likewise.
	(tsubst, cases METHOD_TYPE, FUNCTION_TYPE): Use tsubst_arg_types.
	Remove dead code (and add assertion to check its deadness).  Fix
	bug w.r.t. exception specifications.

1998-09-03  Jason Merrill  <>

	* decl2.c (import_export_vtable): Always make artificials comdat.
	(import_export_decl): Likewise.
	* pt.c (mark_decl_instantiated): Likewise.

1998-09-03  Mark Mitchell  <>

	* cp-tree.h (finish_globally_qualified_member_call_expr):
	Rename to ...
	* semantics.c: Likewise.
	* parse.y (primary): Use it.
	* method.c (hack_identifier): Remove redundant code.

	* init.c (resolve_offset_ref): Call convert_from_reference to
	handle members of reference type.  Improve error recovery.

1998-09-03  Benjamin Kosnik  <>

	* cp-tree.h: Declare warn_nontemplate_friend.
	* decl2.c (lang_decode_option): Set.
	* lang-options.h: Add -Wnon-template-friend.
	* friend.c (do_friend): Use to toggle non-template function warning.

1998-09-03  Mark Mitchell  <>

	* decl.c (finish_enum): Don't resolve CONST_DECLs to their
	corresponding INTEGER_CSTs when processing_template_decl.
	* pt.c (tsubst_enum): Tweak accordingly.

1998-09-03  Benjamin Kosnik  <>

	* decl.c (pushdecl_class_level): Add warning here.
	(pushdecl): Tweak.

1998-09-02  Jason Merrill  <>

	* cvt.c (convert_pointer_to_real): Tidy.
	* search.c (get_base_distance_recursive): Simplify.
	(get_base_distance): Likewise.

	* pt.c (unify): Only special-case INTEGER_TYPE if it uses template

Wed Sep 02 09:25:29 1998  Nick Clifton  <>

	* lex.c (check_newline):  Call HANDLE_PRAGMA before
	HANDLE_SYSV_PRAGMA if both are defined.  Generate warning messages
	if unknown pragmas are encountered.
	(handle_sysv_pragma): Interpret return code from
	handle_pragma_token ().  Return success/failure indication rather
	than next unprocessed character.
	(pragma_getc): New function: retrieves characters from the
	input stream.  Defined when HANDLE_PRAGMA is defined.
	(pragma_ungetc): New function: replaces characters back into the
	input stream.  Defined when HANDLE_PRAGMA is defined.

1998-09-01  Jason Merrill  <>

	* decl2.c (output_vtable_inherit): Use %cDIGIT in the operands.
	* class.c (build_vtable_entry_ref): Likewise.

1998-09-01  Mark Mitchell  <>

	* decl2.c (import_export_decl): Likewise.
	* pt.c (instantiate_decl): Use it.

1998-09-01  Jason Merrill  <>

	* decl.c (lookup_name_real): Also do implicit typename thing for
	artificial TYPE_DECLs.
	* search.c (lookup_field): Likewise.
	(lookup_fnfields, lookup_field): Adjust for implicit typename kludge.
	* semantics.c (begin_constructor_declarator): Use enter_scope_of.
	(enter_scope_of): Extract type from implicit typename.
	(begin_class_definition): Likewise.
	* lex.c (identifier_type): Handle implicit typename when checking

	* cp-tree.h: Declare flag_strict_prototype.
	* lex.c (do_scoped_id, do_identifier): Don't implicitly_declare if
	* decl.c (init_decl_processing): If -f{no,-}strict-prototype wasn't
	specified, set it to the value of pedantic.

1998-09-01  Mark Mitchell  <>

	* decl2.c (arg_assoc): Handle template-id expressions as arguments.

1998-08-31  Mark Mitchell  <>

	* decl.c (finish_enum): Handle member enums of classes declared in
	template functions.

	* decl2.c (grok_x_components): Strip attributes before calling

1998-08-31  Jason Merrill  <>

	* cp-tree.h, decl2.c: Remove support for -fall-virtual,
	-fenum-int-equivalence and -fno-nonnull-objects.
	* class.c (check_for_override): Remove support for -fall-virtual.
	(finish_struct_1): Likewise.
	* call.c (build_new_op): Remove support for -fenum-int-equivalence.
	* typeck.c (build_binary_op_nodefault): Likewise.
	* cvt.c (ocp_convert): Likewise.
	* call.c (build_vfield_ref): Remove support for -fno-nonnull-objects.
	* class.c (build_vbase_path): Likewise.

Sun Aug 30 22:16:31 1998  H.J. Lu  (

	* (INTERFACE): New, set to 1.

1998-08-30  Mark Mitchell  <>

	* error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when
	comparing with global_namespace.
	(dump_aggr_type): Likewise.

	* decl.c (grokfndecl): Issue error on declaration of friend
	templates with explicit template arguments.

	* pt.c (convert_template_argument): New function, split out
	(coerce_template_parms): Here.
	(tsubst): Attempt better error-recovery.

1998-08-28  Benjamin Kosnik  <>

	* pt.c (decl_template_parm_p): Add checks for

1998-08-28  Mark Mitchell  <>

	* lex.c (do_identifier): Fix thinko in previous change.

1998-08-28  Jason Merrill  <>

	* search.c (dfs_search, binfo_for_vtable, dfs_bfv_helper): New fns.
	* decl2.c (output_vtable_inherit): Call binfo_for_vtable.

1998-08-28  Richard Henderson  <>

	Add support for discarding unused virtual functions.
	* lang-options.h: Add -fvtable-gc.
	* cp-tree.h: Add flag_vtable_gc.
	* decl2.c (output_vtable_inherit): New fn.
	(finish_vtable_vardecl): Call it.
	* class.c (build_vtable_entry_ref): New fn.
	(build_vtbl_ref): Call it.

1998-08-28  Mark Mitchell  <>

	* cp-tree.h (build_enumerator): Take the enumeration type as a
	* decl.c (finish_enum): Don't set the TREE_TYPE for the
	enumeration constant values if we're processing_template_decls.
	Don't set the type for the CONST_DECLs either; that's done in
	(build_enumerator): Take the enumeration type as a
	* lex.c (do_identifier): Don't resolve enumeration constants while
	processing template declarations, even if they happen to be

	* parse.y (current_enum_type): New variable.
	(primary): Don't allow statement-expression in local classes just
	as we don't in global classes.
	(structsp): Use current_enum_type.
	(enum_list): Likewise.
	* pt.c (tsubst_enum): Don't check for NOP_EXPRs introduced by
	finish_enum; they no longer occur.

	* cp-tree.h (finish_base_specifier): New function.
	* parse.y (base_class): Use it.
	* semantics.c (finish_base_specifier): Define it.

	* parse.y (structsp): Warn on use of typename outside of template

1998-08-27  Jason Merrill  <>

	* lex.c (handle_cp_pragma): Remove #pragma vtable.
	* lang-options.h: Remove +e options.
	* decl2.c (lang_decode_option): Likewise.
	(import_export_vtable): Don't check write_virtuals.
	(finish_vtable_vardecl, finish_file): Likewise.
	* search.c (dfs_debug_mark): Likewise.
	* semantics.c (begin_class_definition): Likewise.
	* class.c (build_vtable, finish_vtbls, finish_struct_1): Likewise.

	* call.c (build_over_call): Check flag_elide_constructors.
	* decl2.c: flag_elide_constructors defaults to 1.
	* typeck.c (convert_arguments): Remove return_loc parm.
	(build_function_call_real): Adjust.

	* search.c: Tear out all mi_matrix and memoize code.
	(lookup_field, lookup_fnfields): Use scratch_tree_cons.
	* lang-options.h: Remove documentation for -fhandle-exceptions,
	-fmemoize-lookups and -fsave-memoized.
	* cp-tree.h: Lose mi_matrix and memoize support.
	* decl2.c: Ignore -fmemoize-lookups and -fsave-memoized.
	* class.c: Lose struct class_level.
	(pushclass, popclass): Lose memoize support.
	* init.c (build_offset_ref): Likewise.

	* init.c (emit_base_init): Change modification of
	* search.c (get_base_distance_recursive): Likewise.
	(get_base_distance): Likewise.
	(lookup_member): Likewise.
	(convert_pointer_to_single_level): Likewise.
	(lookup_field): Likewise.  Lose setting TREE_VIA_* on TREE_LISTs.
	(lookup_fnfields): Likewise.
	* tree.c (propagate_binfo_offsets): Don't call unshare_base_binfos.
	(unshare_base_binfos): Don't call propagate_binfo_offsets.
	(layout_basetypes): Call propagate_binfo_offsets instead of
	* decl.c (xref_basetypes): Call unshare_base_binfos.
	* pt.c (instantiate_class_template): Likewise.
	* tree.c (reverse_path): Remove 'copy' parm; always make a
	temporary copy.
	* class.c (build_vbase_path): Just call it.
	* search.c (compute_access): Likewise.  Don't re-reverse.

1998-08-27  Mark Mitchell  <>

	* class.c (build_vbase_path): Use reverse_path.
	(finish_base_struct): Move warnings for inaccessible bases to
	(modify_one_vtable): Remove check of TREE_USED (binfo).
	(fixup_vtable_deltas1): Likewise.
	* cp-tree.h (BINFO_INHERITANCE_CHAIN): Document here.
	(xref_tag): Remove binfos parameter.
	(make_binfo): Remove chain parameter.
	(reverse_path): Add copy parameter.
	* decl.c (init_decl_processing): Change calls to xref_tag.
	(xref_tag): Remove binfos parameter.
	(xref_basetypes): Change calls to make_binfo.
	* decl2.c (grok_x_components): Change calls to xref_tag.
	(handle_class_head): Likewise.
	* friend.c (do_friend): Likewise.
	* lex.c (make_lang_type): Change calls to make_binfo.
	* parse.y (structsp): Change calls to xref_tag.
	(named_complex_class_head_sans_basetype): Likewise.
	(named_class_head): Likewise.
	* rtti.c (init_rtti_processing): Likewise.
	* search.c (compute_access): Change calls to reverse_path.
	(dfs_get_vbase_types): Change calls to make_binfo.
	(get_vbase_types): Remove dead code.
	* tree.c (unshare_base_binfos): Change calls to make_binfo.
	(layout_basetypes): Warn here about inaccessible bases.
	(make_binfo): Remove chain parameter.
	(reverse_path): Add copy parameter.

1998-08-27  Jason Merrill  <>

	* class.c: #if 0 complete_type_p.
	* init.c (build_java_class_ref, build_new_1): Remove unused locals.
	* method.c (process_overload_item): Likewise.
	* typeck.c (comp_target_types): Likewise.

	Stop sharing binfos for indirect virtual bases.
	* tree.c (propagate_binfo_offsets): Unshare vbases, too.
	(layout_basetypes): Likewise.
	(unshare_base_binfos): Copy vbases, too.
	BINFO_VBASE_INIT_MARKED): Remove obsolete macros.
	* search.c (lookup_field, lookup_fnfields, lookup_member): Remove
	reference to BINFO_VIA_PUBLIC.
	(marked_pushdecls_p, unmarked_pushdecls_p): New fns.
	(push_class_decls): Use them.
	(dfs_pushdecls): Use SET_BINFO_PUSHDECLS_MARKED.
	(dfs_compress_decls): Use CLEAR_BINFO_PUSHDECLS_MARKED.

1998-08-27  Mark Mitchell  <>

	* decl.c (build_enumerator): Set DECL_CONTEXT for the

1998-08-26  Mark Mitchell  <>

	* cp-tree.h (finish_enum): Change prototype.
	* decl.c (finish_enum): Use TYPE_VALUES, rather than taking a
	VALUES parameter.  Don't try to compute mins/maxs if
	* parse.y (structsp): Use new calling sequence for finish_enum.
	* pt.c (tsubst_enum): Likewise.  Take the new type as input.
	(lookup_template_class): Remove unused variables.  Tweak.
	Register enums on instantiation list before substituting
	enumeration constants.
	(tsubst_decl): Remove unused variables.
	(regenerate_decl_from_template): Likewise.

	* decl.c (duplicate_decls): Don't obliterate the
	DECL_TEMPLATE_INFO for a template if we're not replacing it with

	* lex.c (do_identifier): Fix typo in comment.

Wed Aug 26 10:54:51 1998  Kaveh R. Ghazi  <>

	* errfn.c: Remove stdarg.h/varargs.h.
	* tree.c: Likewise.

1998-08-25  Brendan Kehoe  <>

	* pt.c (tsubst_copy): Only do typename overloading on an
	IDENTIFIER_NODE that happens to look like a typename if it actually
	has a type for us to use.

1998-08-25  Jason Merrill  <>

	* typeck.c (comp_cv_target_types): Split out...
	(comp_target_types): From here.  Don't allow cv-qual changes under
	a pointer if nptrs == 0.  Fix OFFSET_TYPE handling.
	(build_ptrmemfunc): Pass 1 to nptrs.
	* cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.

1998-08-25  Mark Mitchell  <>

	* search.c (dependent_base_p): Don't compare a binfo to
	current_class_type; use the TREE_TYPE of the binfo instead.

	* cp-tree.h (CLASS_TYPE_P): Revise definition.

1998-08-25  Jason Merrill  <>

	* decl.c (duplicate_decls): Don't complain about different
	exceptions from an internal decl even if pedantic.

	* typeck.c (convert_for_assignment): Converting from pm of vbase
	to derived is an error, not a sorry.

	* call.c (build_over_call): Use convert_pointer_to_real for 'this'.
	* class.c (fixed_type_or_null): Rename from
	resolves_to_fixed_type_p.  Return the dynamic type of the
	expression, if fixed, or null.
	(resolves_to_fixed_type_p): Use it.  Return 0 if the dynamic type
	does not match the static type.
	(build_vbase_path): Rename 'alias_this' to 'nonnull'.  Use
	resolves_to_fixed_type_p again.

1998-08-24  Mark Mitchell  <>

	* pt.c (tsubst_decl): Move special case code for dealing with
	tricky friend templates here from ...
	(regenerate_decl_from_template): Here.

1998-08-24  Jason Merrill  <>

	* decl.c (start_decl): Remove redundant linkage check.

1998-08-24  Gavin Romig-Koch  <>

	* typeck.c (c_expand_return): Handle the case that valtype
	is wider than the functions return type.

1998-08-24  Mark Mitchell  <>

	* cp-tree.h (CLASS_TYPE_P): New macro.
	* decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE.
	* pt.c (process_template_parm): Undo previous change.

1998-08-24  Benjamin Kosnik  <>

	* cp-tree.h: Declare.
	* pt.c (decl_template_parm_p): New function.
	* decl.c (pushdecl): Check decls for redeclaring template parms.
	(xref_tag): Make redeclaration an error, print decl.
	* decl2.c (grokfield): Check field_decls for redeclaration as well.

1998-08-24  Jason Merrill  <>

	* parse.y (primary): Fix up the type of string constants.

1998-08-24  Mark Mitchell  <>

	* typeck.c (convert_for_initialization): Move check for odd uses
	of NULL to avoid duplicate warnings.

1998-08-24  Jason Merrill  <>

	* tree.c (lvalue_type): Fix for arrays.
	* typeck.c (string_conv_p): New fn.
	(convert_for_assignment): Use it.
	(build_unary_op): Use lvalue_type.
	* call.c (standard_conversion, convert_like): Use string_conv_p.
	(add_function_candidate): Use lvalue_type.
	* cvt.c (convert_to_reference): Likewise.
	* decl2.c (lang_decode_option): Ignore -traditional.
	* decl.c (init_decl_processing): flag_writable_strings inhibits

1998-08-24  Andrew MacLeod  <>

	* lang-options.h (lang_options): Add fconst-strings to the list
	of valid options.
	* decl2.c (lang_f_options, lang_decode_option): Likewise.

1998-08-24  Nathan Sidwell  <>

	* lex.c (real_yylex): Don't warn about long long constants if
	we're allowing long long.

1998-08-24  Martin von Löwis  <>

	* decl.c (pushdecl): Use IDENTIFIER_NAMESPACE_VALUE instead of
	accessing bindings directly.

	* search.c (my_tree_cons): Reimplement.

	* lang-specs.h: Remove __HONOR_STD.
	* inc/exception, inc/new, inc/new.h, inc/typeinfo: Likewise.

1998-08-23  Mark Mitchell  <>

	* decl.c (grokdeclarator): Complain about in-class initialization
	of aggregates and/or references.
	* pt.c (process_template_parm): Clear IS_AGGR_TYPE for

	* decl2.c (grok_array_decl): Add comment.
	(mark_used): Don't instantiate an explicit instantiation.
	* friend.c (make_friend_class): Remove bogus comment.  Fix check
	for partial specializations.
	* pt.c (check_explicit_specialization): Don't
	(mark_decl_instantiated): Or here.
	(do_decl_instantiation): Do it here, instead.  Add checks for
	duplicate explicit instantiations, etc.  Tidy.
	(do_type_instantiation): Likewise.
	(instantiate_decl): Improve comments.  Complain about explicit
	instantiations where no definition is available.

	* cp-tree.h (ansi_null_node): Remove.
	* call.c (build_over_call): Warn about converting NULL to an
	arithmetic type.
	* cvt.c (build_expr_type_conversion): Likewise.  Use
	null_ptr_cst_p instead of expanding it inline.
	* decl.c (ansi_null_node): Remove.
	(init_decl_processing): Make null_node always have integral type.
	* except.c (build_throw): Warn about converting NULL to an
	arithmetic type.
	* lex.c (init_parse): Remove handling of ansi_null_node.
	* pt.c (type_unification_real): Don't convert NULL to void* type.
	* typeck.c (build_binary_op_nodefault): Fix NULL warnings.
	(convert_for_assignment): Warn about converting NULL to an
	arithmetic type.
	(convert_for_initialization): Likewise.

1998-08-20  Jason Merrill  <>

	* tree.c (search_tree, no_linkage_helper, no_linkage_check): New fn.
	* pt.c (coerce_template_parms): Use no_linkage_check.
	* decl.c (grokvardecl): Likewise.
	(grokfndecl): Likewise.  Members of anonymous types have no linkage.

	* method.c (process_overload_item): Remove useless code.

1998-08-20  Per Bothner  <>

	Handle new'ing of Java classes.
	* init.c (build_class_classref):  New function.
	(build_new_1):  If type is TYPE_FOR_JAVA:  Call _Jv_AllocObject;
	constructor does not return this;  don't need to exception-protect.

	* pt.c (lookup_template_class):  Copy TYPE_FOR_JAVA flag.
	* decl2.c (acceptable_java_type):  Handle template-derived types.

1998-08-20  Per Bothner  <>

	* decl2.c (import_export_vtable):  Suppress vtables for Java classes.

1998-08-20  Mark Mitchell  <>

	* decl.c (duplicate_decls): Always merge the old and new patterns
	for templates, regardless of whether or not the new one has
	DECL_INITIAL.  Don't throw away specializations.  Merge
	* pt.c (tsubst_decl): Use the right pattern when calculating the
	complete args for a new template instance.
	(do_decl_instantiation): Fix typo in comment.
	(regenerate_decl_from_template): Deal with tricky friend template
	(instantiate_decl): Likewise.

Thu Aug 20 09:09:45 1998  Jeffrey A Law  (

	* init.c (build_builtin_delete_call): Add missing assemble_external

1998-08-20  Jason Merrill  <>

	* parse.y (notype_unqualified_id): Also accept ~A<int>.

1998-08-19  Mark Mitchell  <>

	* typeck.c (build_binary_op_nodefault): Warn on use of NULL in
	* except.c (build_throw): Warn when NULL is thrown, even with
	-ansi.  Use ansi_null_node, rather than integer_zero_node, in the
	thrown expression.

	* cp-tree.h (ansi_null_node): New variable.
	* decl.c (ansi_null_node): New variable.
	(init_decl_processing): Initialize its type.
	* lex.c (init_parse): Initialize its value.  Use ansi_null_node
	for null_node in non-ANSI mode.
	* typeck.c (build_binary_op_nodefault): Use ansi_null_node in
	place of null_node to avoid spurious errors.

1998-08-17  Mark Mitchell  <>

	* cp-tree.h (enter_scope_of): New function.
	* parse.y (complex_direct_notype_declarator): Use it.
	* semantics.c (enter_scope_of): New function.

1998-08-17  Jason Merrill  <>

	* decl.c (grokparms): No, here.

	* decl.c (grokdeclarator): Catch parm with pointer to array of
	unknown bound here...
	* method.c (process_overload_item): ...not here.

	* gxxint.texi: Remove obsolete documentation of overloading code.

	* decl.c (finish_enum): Also set TYPE_SIZE_UNIT.
	* class.c (finish_struct_bits): Likewise.

	* tree.c (lvalue_type): Fix for arrays.
	* typeck.c (build_unary_op): Use lvalue_type.
	* call.c (add_function_candidate): Likewise.
	* cvt.c (convert_to_reference): Likewise.

	* decl2.c (lang_decode_option): Ignore -traditional.

	* init.c (build_offset_ref): Don't mess with error_mark_node.
	* lex.c (do_scoped_id): Use cp_error.

	* rtti.c (get_tinfo_fn): Don't mess with the context for now.

1998-08-17  Benjamin Kosnik  <>

	* decl.c (grokdeclarator): Allow anonymous types to be cv-qualified.

Mon Aug 17 10:40:18 1998  Jeffrey A Law  (

	* cp-tree.h (set_identifier_local_value): Provide prototype.

	* decl2.c (do_namespace_alias): Remove unused variables `binding'
	and `old'.

Fri Aug 14 16:42:27 1998  Nick Clifton  <>

	* Rename BBISON to BISON so that it can be properly
	inherited from the parent makefile.

1998-08-13  Jason Merrill  <>

	* lang-options.h: Add -finit-priority.
	* decl2.c: Likewise.  Check flag_init_priority instead of

	* decl2.c (setup_initp): New fn.
	(start_objects, finish_objects, do_ctors): Handle init_priority.
	(do_dtors, finish_file): Likewise.

1998-08-13  Jason Merrill  <>

	* pt.c (tsubst_copy): Hush warning.

	* rtti.c (get_tinfo_fn): Also set DECL_IGNORED_P.

1998-08-12  Mark Mitchell  <>

	* pt.c (print_template_context): Don't abort when instantiating a
	synthesized method.

	* decl.c (grokdeclarator): Issue errors on namespace qualified
	declarators in parameter lists or in class scope.

1998-08-09  Mark Mitchell  <>

	* pt.c (check_explicit_specialization): Don't abort on bogus
	explicit instantiations.

1998-08-07  Mark Mitchell  <>

	* typeck.c (require_complete_type): Use complete_type_or_else.
	(complete_type_or_else): Always return NULL_TREE on failure, as

	* pt.c (tsubst_aggr_type): Prototype.
	(tsubst_decl): New function, split out from tsubst.  Set
	input_filename and lineno as appropriate.
	(pop_tinst_level): Restore the file and line number saved in
	(instantiate_class_template): Set input_filename and lineno as
	(tsubst): Move _DECL processing to tsubst_decl.  Make sure the
	context for a TYPENAME_TYPE is complete.

	* decl2.c (grokbitfield): Issue errors on bitfields declared with
	function type.
	(do_dtors): As in do_ctors, pretend to be a member of the same
	class as a static data member while generating a call to its

	* cvt.c (cp_convert_to_pointer): Handle NULL pointer
	conversions, even in complex virtual base class hierarchies.

1998-08-06  Mark Mitchell  <>

	* cp-tree.h (ENUM_TEMPLATE_INFO): New macro.
	(ENUM_TI_TEMPLATE): Likewise.
	(ENUM_TI_ARGS): Likewise.
	(lookup_nested_type_by_name): Remove.
	* decl.c (maybe_process_template_type_declaration): Handle enums.
	(start_enum): Don't check for primary-template enum declarations
	(finish_enum): Clean up, document.  Make sure template enum
	constants get the correct type.
	(build_enumerator): Copy initializers for template enumerations,
	(grok_enum_decls): Document.
	* lex.c (do_identifier): Document use of LOOKUP_EXPR a bit
	better.  Build LOOKUP_EXPRs for local variables, even if they are
	* pt.c (tsubst_enum): Remove field_chain parameter.
	(template_class_depth): Include the depth of surrounding function
	(push_template_decl): Check for primary-template enum declarations
	here.  Deal with enumeration templates.
	(lookup_template_class): Likewise.
	(for_each_template_parm): Likewise.
	(instantiate_class_template): Don't call tsubst_enum directly,
	call tsubst instead, to instantiate enums.  Deal with all
	field_chain issues here, not in tsubst_enum.
	(lookup_nested_type_by_name): Remove.
	(tsubst_aggr_type): Revise handling of enumeration types.
	(tsubst): Likewise.
	(tsubst_copy): Likewise.
	(tsubst_expr): Call tsubst, not tsubst_enum for TAG_DEFNs.

1998-08-04  Mark Mitchell  <>

	* decl.c (pushtag): Don't mangle the name of a TYPE_DECL if it
	uses template parameters.
	* method.c (build_template_parm_names): Use the full set of
	template arguments for tsubst'ing.
	(build_overload_identifier): Pass the full set of template
	arguments to build_template_parm_names, not just the
	* pt.c (TMPL_ARGS_DEPTH): Define using
	(NUM_TMPL_ARGS): New macro.
	(add_outermost_template_args): Deal with the case where the outer
	args will be completely discarded.
	(coerce_template_parms): Use the full set of template arguments
	for tsubst'ing.  Simplify.  Add some asserts.  Improve
	error messages.
	(lookup_template_class): Pass the full set of template arguments
	to coerce_template_parms.
	(tsubst): Add assertion.
	(do_type_instantiation): Don't instantiate member template

	* init.c (build_offset_ref): Deal with a TEMPLATE_ID_EXPR whose
	name is a LOOKUP_EXPR, rather than an IDENTIFIER_NODE.

1998-08-03  Jason Merrill  <>

	* method.c (set_mangled_name_for_decl): Change return type to void.

	* decl.c (lookup_name_real): A namespace-level decl takes priority
	over implicit typename.  Avoid doing the same lookup twice.

	* search.c (dependent_base_p): New fn.
	(dfs_pushdecls, dfs_compress_decls): Use it.

	* typeck.c (get_member_function_from_ptrfunc): Don't try to handle
	virtual functions if the type doesn't have any.

1998-08-03  Mark Mitchell  <>

	* decl2.c (grokfield): Don't mangle the name of a TYPE_DECL if it
	uses template parameters.

1998-08-02  Mark Mitchell  <>

	* cp-tree.def (LOOKUP_EXPR): Document.  Remove second argument.
	* cp-tree.h (DECL_TI_TEMPLATE): Improve documentation.
	* lex.c (do_identifier): Don't use a second argument, or a type,
	when building LOOKUP_EXPRs.
	(do_identifier): Likewise.
	(do_scoped_id): Likewise.
	* method.c (hack_identifier): Improve error message.
	* pt.c (lookup_template_function): Don't needlessly call
	copy_to_permanent or build_min.
	(tsubst_copy): Remove #if 0'd code.  tsubst into LOOKUP_EXPRs if
	(do_decl_instantiation): Improve error message.
	* tree.c (mapcar, case LOOKUP_EXPR): Don't be sorry; make a copy.
	(build_min): Copy the type to the permanent obstack, too.

1998-08-01  Jason Merrill  <>

	* init.c (init_init_processing): Remove BI* handling.
	(build_builtin_call): Remove.
	(build_builtin_delete_call): New fn.
	(build_delete): Use it.

1998-07-31  Mark Mitchell  <>

	* cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
	(maybe_check_template_type): New function.
	* decl.c (maybe_process_template_type_declaration): New function,
	split out from pushtag  Call maybe_check_template_type.
	* friend.c (do_friend): Use PROCESSING_REAL_TEMPLATE_DECL_P.
	* pt.c (template_class_depth_real): Generalization of ...
	(template_class_depth): Use it.
	(register_specialization): Use duplicate_decls for duplicate
	declarations of specializations.
	(maybe_check_template_type): New function.
	(push_template_decl_real): Fix comment.
	(convert_nontype_argument): Likewise.
	(lookup_template_class): Likewise.  Avoid an infinite loop on
	erroneous code.
	(tsubst_friend_function): Fix comment.
	(tsubst, case FUNCTION_DECL): Deal with a DECL_TI_TEMPLATE that is
	* semantics.c (begin_function_definition): Use
	reset_specialization to note that template headers don't apply
	directly to declarations after the opening curly for a function.

1998-07-29  Jason Merrill  <>

	* decl.c (push_overloaded_decl): Use current_namespace instead of
	DECL_CONTEXT (decl) to determine where we go.

	* decl.c (lookup_name_real): Fix typo.

1998-07-28  Mark Mitchell  <>

	* friend.c (is_friend): Be lenient with member functions to deal
	with nested friends.

1998-07-28  Jason Merrill  <>

	* class.c (finish_struct_1): Convert integer_zero_node to
	ssizetype before passing it to set_rtti_entry.
	* typeck2.c (initializer_constant_valid_p): Allow conversion of 0
	of any size to a pointer.

1998-07-27  Mark Mitchell  <>

	* 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
	* 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
	* 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_identifier): 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
	(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_LEVEL): New macro.
	(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
	(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
	(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
	(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_template_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
	(finish_member_class_template): New function.
	(finish_template_decl): Likewise.
	(finish_template_type): Likewise.
	(typeck.c): Don't crash after issuing a compiler_error.
	* (CONFLICTS): Adjust; we removed a s/r conflict.

1998-07-27  Jason Merrill  <>

	* typeck2.c (build_functional_cast): Handle default-initialization.

	* call.c (build_over_call): Pass 1 to popclass.

	* parse.y (direct_notype_declarator): Add precedence declaration
	to notype_unqualified_id case.
	* (EXPECT): Adjust.

	* tree.c (ovl_member): Fix for single function in OVL.

1998-07-27  Dave Brolley  <>

	* c-lex.c (yylex): Fix boundary conditions in character literal and
	string literal loops.

1998-07-24  Jason Merrill  <>

	* decl.c (lookup_name_real): OK, do return the from_obj value
	unless got_object depends on template parms.

	* parse.y (nested_name_specifier_1): Pull out the TYPE_MAIN_VARIANT.

	* pt.c (coerce_template_parms): Also complain about local enums.

	* cp-tree.h: Add prototype for set_identifier_local_value.
	* decl.c (set_identifier_local_value_with_scope): Make static,
	* search.c (covariant_return_p): Likewise.
	* except.c (build_terminate_handler, alloc_eh_object): Likewise.

	* call.c (build_method_call): Only pull out the type of a destructor
	if it's a template type parm.
	* decl.c (lookup_name_real): Never return the from_obj value.

1998-07-23  Jason Merrill  <>

	* except.c (process_start_catch_block_old): Call start_decl_1 for
	catch parm.
	* decl.c (start_decl_1): Avoid duplicate error.

	* init.c (expand_default_init): Only perform the initialization if
	it will do something.

1998-07-23  H.J. Lu  (

	* parse.y (base_class): Check for invalid base class.

1998-07-23  Jason Merrill  <>

	* decl2.c (import_export_template): Fold in...
	(import_export_class): here.  Handle dllimport/export.

	* class.c (build_vtable): Pass at_eof to import_export_vtable.
	(prepare_fresh_vtable): Likewise.
	* decl2.c (import_export_class): Split out...
	(finish_prevtable_vardecl): From here.
	* class.c (finish_struct_1): Call import_export_class if at_eof.

	* decl.c (start_function): #if 0 mysterious code I wrote and have
	forgotten why.
	* rtti.c (get_tinfo_fn): If this is for a class type, set

1998-07-22  Jason Merrill  <>

	* inc/exception: Change terminate and unexpected to ().

	* parse.y (named_class_head_sans_basetype_defn): A
	named_class_head_sans_basetype followed by '{' or ':' is a defn.

1998-07-21  Jason Merrill  <>

	* tree.c (canonical_type_variant): New fn to handle arrays.
	* cp-tree.h (CANONICAL_TYPE_VARIANT): Remove.
	* pt.c (unify, default case): Also fold arg.  Fix array bounds case.
	* method.c (process_overload_item): Use build_overload_value for

1998-07-20  Dave Brolley  <>

	* lex.c (mbchar.h): #include it.
	(GET_ENVIRONMENT): New macro.
	(init_parse): Set character set based on LANG environment variable.
	(real_yylex): Handle multibyte characters in character literals.
	(real_yylex): Handle multibyte characters in string literals.

1998-07-19  Jason Merrill  <>

	* lex.c (do_identifier): Look for class value even if we don't
	have a global value.  Do implicit declaration if parsing is 2.
	* semantics.c (finish_call_expr): Pass 2 if we're doing Koenig

1998-07-19  Mark Mitchell  <>

	* decl.c (pushtag): Revert previous change.
	* pt.c (lookup_template_class): Don't put out debugging
	information for types that use template parameters.

	* decl.c (pushtag): Don't put out debugging information for
	compiler-generated typedefs.

	* error.c (dump_type_real): Don't crash when presented with
	intQI_type_node or the like.

	* semantics.c (finish_translation_unit): Fix spelling error in

1998-07-17  Jason Merrill  <>

	* decl.c (lookup_name_real): Pull out single function here.
	(select_decl): Not here.
	(unqualified_namespace_lookup): Use CP_DECL_CONTEXT.

	* decl.c (qualify_lookup): Tweak again.

	* pt.c (lookup_template_class): Don't mess with the context of the
	* decl2.c (current_decl_namespace): Remove special handling for

	* pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
	a member template specialization.

	* tree.c (ovl_member): Use decls_match to compare functions.
	* decl.c (decls_match): Check the context of a function.

	* parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER
	in Koenig lookup support rules.
	* semantics.c (finish_call_expr): Handle the new cases.

	* typeck.c (build_x_function_call): Handle overloaded methods.

	* decl.c (grokvardecl): Don't call build_static_name for extern "C".

1998-07-16  Mark Mitchell  <>

	* semantics.c (finish_object_call_expr): Revert previous change.
	* call.c (build_new_method_call): Likewise.  Instead, convert
	TYPE_DECLs to IDENTIFIERs here, in the presence of templates.

1998-07-16  Jason Merrill  <>

	* decl.c (qualify_lookup): Handle templates.

	* decl2.c (do_using_directive): Don't pass ancestor.
	* decl.c (push_using_directive): Calculate ancestor.

	* decl2.c (do_nonmember_using_decl): Allow for type shadowing.
	* decl.c (pushdecl): Move type shadowing handling from here...
	(duplicate_decls): here.
	* decl.c (set_identifier_local_value_with_scope): New fn.
	(pushdecl): Use it.
	(set_identifier_local_value, lookup_type_current_level): New fns.
	* decl2.c (do_local_using_decl): Handle types and binding level
	stuff properly.

	* init.c (build_offset_ref): Don't call mark_used on an OVERLOAD.
	* decl.c (select_decl): Extract a lone function from an OVERLOAD.
	(lookup_namespace_name): Likewise.
	* typeck.c (build_unary_op): Not here anymore.

	* decl2.c (do_class_using_decl): Make sure we get an identifier.
	* class.c (handle_using_decl): Ignore TYPE_DECLs.

	* decl.c (qualify_lookup): New fn.
	(lookup_name_real): Use it.

1998-07-16  Martin v. Löwis  <>

	* decl2.c (add_using_namespace): When directly using a namespace
	that was indirect before, promote it.

	* decl.c (select_decl): Replace two flag parameters by one.
	(unqualified_namespace_lookup): Likewise, pass flag.
	(lookup_flags): New function.
	(lookup_name_real): Compute flags, pass them.
	(lookup_namespace_name): Call with zero-flag.
	* decl2.c (ambiguous_decl): Add flag parameter, complain only
	according to flags.
	(lookup_using_namespace, qualified_lookup_using_namespace):
	Add flag parameter, pass them through.
	* lex.c (do_scoped_id): Call with zero-flag.

1998-07-16  Jason Merrill  <>

	* typeck.c (convert_for_assignment): Use comptypes.

1998-07-16  Mark Mitchell  <>

	* semantics.c (finish_object_call_expr): Move test for the
	function called being a TYPE_DECL to ...
	* call.c (build_new_method_call): Here.

1998-07-15  Jason Merrill  <>

	* decl2.c (arg_assoc_class): Also look at template arguments, if any.
	(arg_assoc): Handle error_mark_node and multiple levels of TREE_LIST.

	* lex.c (looking_for_typename): Don't initialize.

	* decl2.c (ambiguous_decl): Clarify error message.

	* decl.c (push_using_directive): Iterate over namespaces used

1998-07-15  Martin v. Löwis  <>

	* decl2.c (add_using_namespace): Iterate over namespaces used

	* decl.c (lookup_name_real): Accept namespace aliases as locals.
	(cat_namespace_levels): Ignore aliases.
	(duplicate_decls): Ignore duplicate aliases.
	* decl2.c (do_namespace_alias): Process block level namespace
	aliases.  Store alias with pushdecl.  Remove odr errors.
	* parse.y (namespace_alias): New non-terminal.
	(extdef): Use it.

1998-07-15  Jason Merrill  <>

	* decl2.c (arg_assoc_type): Handle METHOD_TYPE like FUNCTION_TYPE.
	(arg_assoc): Rewrite.

	* pt.c (complete_template_args): Don't look at the context unless
	we have to.

	* method.c (build_decl_overload_real): Fix namespace handling.

	* typeck.c (build_unary_op): Extract a lone function from an

	* call.c (build_scoped_method_call): Handle getting a namespace
	for basetype in a destructor call.
	(check_dtor_name): Handle enums.

	* parse.y (using_directive): New nonterminal.
	(extdef, simple_stmt): Use it.

1998-07-14  Martin von Löwis  <>

	* decl2.c (add_function): Move error message ...
	(arg_assoc_namespace): ... from here.

1998-07-14  Jason Merrill  <>

	* parse.y (namespace_qualifier): Fix multiple level handling.
	* decl2.c (namespace_ancestor): Use CP_DECL_CONTEXT.
	(arg_assoc): Don't skip the first argument of a function.

Tue Jul 14 20:09:22 1998  Jeffrey A Law  (

	* search.c (my_tree_cons): Clean up.

1998-07-14  Jason Merrill  <>

	* call.c (joust): Don't warn about "confusing" conversions to the
	same type.

1998-07-14  Martin von Löwis  <>

	* class.c (push_nested_class): Complain about namespaces.
	* decl.c (start_decl): Enter the object's namespace.
	(cp_finish_decl): Leave it.
	(grokdeclarator): Likewise.
	* decl2.c (check_decl_namespace): New function.
	(finish_file): Call it.
	* parse.y (complex_direct_notype_declarator): Set complexity
	of namespace-qualified ids to -1, enter the namespace.

	* method.c (build_template_decl_overload): Expect _DECL as first
	parameter.  Put context temporarily into current_namespace.
	* pt.c (check_explicit_specialization): Change caller.
	(tsubst): Likewise.

	* init.c (build_offset_ref): Call mark_used and
	convert_from_reference for namespace members.

Mon Jul 13 23:25:28 1998  Martin von Löwis  <>

	* search.c (my_tree_cons): The bitfield is at index 2.

Mon Jul 13 17:21:01 1998  Nick Clifton  <>

	* lang-options.h: Format changed to work with new --help support
	in gcc/toplev.c

1998-07-12  Martin von Löwis  <>

	* decl2.c (build_expr_from_tree): Change calls of do_identifier.
	Do Koenig lookup in CALL_EXPR.
	(arg_assoc): Handle error_mark.
	* lex.c (is_global): New function.
	(do_identifier): Expect arguments for Koenig lookup.
	* parse.y (primary): Add rules for calls of unqualified function calls.
	(do_id): Change call of do_identifier.
	* pt.c (finish_stmt_expr): Likewise.
	* semantics.c (finish_id_expr): Likewise.
	(finish_call_expr): Add integer parameter to indicate
	argument-dependent lookup.

	* decl.c (struct binding_level): New field using_directives.
	(push_using_decl): Not sorry anymore.
	(push_using_directive): New function.
	(lookup_tag): Use CP_DECL_CONTEXT to iterate.
	(unqualified_namespace_lookup): New function, code from ...
	(lookup_name_real): ... here.
	* decl2.c (lookup_using_namespace): Pass using list instead of
	initial scope.
	(validate_nonmember_using_decl): New function.
	(do_nonmember_using_decl): New function.
	(do_toplevel_using_decl): Use them.
	(do_local_using_decl): New function.
	(do_using_directive): Support block-level directives.
	* parse.y (simple_stmt): Support using declarations and
	(namespace_qualifier, namespace_using_decl): New non-terminals.

	* xref.c (classname): New function.
	(GNU_xref_hier): Change class and base parameters to tree.
	* decl.c (xref_baseypes): Change caller.
	* friend.c (make_friend_class): Likewise.

1998-07-12  Kriang Lerdsuwanakij  <>

	* typeck.c (comptypes, case TEMPLATE_TEMPLATE_PARM): Add parameter

	* pt.c (for_each_template_parm, case TEMPLATE_DECL): If it is a
	template template parameter, record its use.
	(for_each_template_parm, case TEMPLATE_TEMPLATE_PARM): Traverse
	its template arguments if exists.

	* pt.c (coerce_template_template_parms): New function equivalent
	to coerce_template_parms when IS_TMPL_PARM is true.
	(coerce_template_parms): Use it.  Remove the IS_TMPL_PARM parameter,
	all callers changed.

	(coerce_template_parms): Access ARGLIST properly when creating a
	new vector.  Only accept implicit TYPE_DECL as valid argument for
	a template template parameter when it is a base class of
	current_class_type.  Don't display error message when COMPLAIN is

1998-07-12  Klaus Kaempf  (

	* repo.c (get_base_filename): Use file_name_nondirectory.
	(open_repo_file): Likewise.
	* cp-tree.h (file_name_nondirectory): Add prototype.

1998-07-12  Jason Merrill  <>

	* friend.c (do_friend): Pull the identifier out of declarator.
	Use cp_error and friends.
	* decl2.c (qualified_lookup_using_namespace): Fix call to
	* decl.c (lookup_name_real): Don't call complete_type on a namespace.
	(grokvardecl): Use DECL_CLASS_SCOPE_P.
	* cvt.c (convert_pointer_to_real): Check for error_mark_node sooner.
	* class.c (warn_hidden): Fix for OVERLOAD.
	* cp-tree.h (DEFARG_NODE_CHECK): New macro.

Sun Jul 12 01:20:57 1998  Jeffrey A Law  (

	* g++.1 (-traditional): Remove duplicated documentation.

1998-07-11  Mark Mitchell  <>

	* method.c (flush_repeats): Add nrepeats parameter.
	(issue_nrepeats): Likewise.
	(is_back_referenceable_type): New function.  Don't back-reference
	TEMPLATE_TYPE_PARMs as well as simple types like integers.
	(build_mangled_name_for_type): Likewise.
	(build_mangled_name_for_type_with_Gcode): Likewise.
	(lasttype): Remove.
	(nrepeats): Likewise.
	(Nrepeats): Likewise.
	(start_squangling): Don't clear the variables removed above.
	(end_squangling): Likewise.
	(flush_repeats): Tidy.  Use nrepeats parameter rather than
	Nrepeats global.
	(issue_nrepeats): Likewise, but with nrepeats global.  Use
	(build_overload_nested_name): Tidy.  Add comment.  Use
	(build_underscore_int): Comment.
	(build_overload_scope_ref): Use build_mangled_name_for_type.
	(build_overload_int): Likewise.
	(build_template_template_parm_names): Tidy.
	(build_template_parm_names): Use build_mangled_name_for_type.
	(build_overload_identifier): Add comments.
	(build_mangled_name_for_type_with_Gcode): Split out from
	(build_mangled_name_for_type): Use it.
	(build_mangled_name): Rework to use build_mangled_name_for_type
	and to not use global nrepeats/Nrepeats.  Tidy.
	(process_modifiers): Tidy.
	(check_btype): Use is_backreferenceable_type.  Add comment.
	Rename `node' to `type'.
	(process_overload_item): Set numeric_output_need_bar here.
	Use build_mangled_name_for_type.  Tidy.
	(build_decl_overload_real): Tidy.  Don't use Nrepeats.  Use

	* pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
	for TYPE_DECLs.

1998-07-08  Vladimir N. Makarov  <>

	* cp-tree.h (warn_long_long): Define.
	* decl.c (grokdeclarator): Add flag `warn_long_long' as guard for
	warning "ANSI C++ does not support `long long'".
	* decl2.c (warn_long_long): Define.
	(lang_decode_option): Parse -Wlong-long, -Wno-long-long options.

1998-07-07  Jason Merrill  <>

	* decl.c (xref_tag): Handle attributes between 'class' and name.
	* parse.y (aggr): Likewise.
	* semantics.c (finish_class_definition): Likewise.
	* (EXPECTED): Adjust.

	* cp-tree.h: Declare flag_optional_diags and warn_multichar.
	* decl2.c: Define them.
	(lang_decode_option): Handle them.
	* lang-options.h: Add -foptional-diags.
	* class.c (finish_struct): Don't complain about multiple meanings of
	name if -fno-optional-diags.
	* decl.c (pushdecl_class_level): Likewise.
	* lex.c (real_yylex): Check warn_multichar.

1998-07-06  Jason Merrill  <>

	* decl.c (lookup_tag): Use CP_DECL_CONTEXT.

	* tree.c (make_binfo): Fix length.

1998-06-30  Benjamin Kosnik  <>

	* decl2.c (lang_decode_option): Remove warn_template_debugging.
	* lang-options.h: Likewise.

Mon Jun 29 20:17:40 1998  Kaveh R. Ghazi  <>

	* except.c (build_eh_type_type_ref): Remove unused variable `susp'.
	(process_start_catch_block): Likewise for variables
	`false_label_rtx', `call_rtx' and `return_value_rtx'.

1998-06-29  Brendan Kehoe  <>

	* tree.c (build_srcloc): Make sure we allocate this node on the
	permanent obstack.

Sat Jun 27 23:34:18 1998  Fred Fish  <>

	* g++spec.c (NEED_MATH_LIBRARY): Define to 1 if not already defined.
	(lang_specific_driver): Initialize need_math with NEED_MATH_LIBRARY.
	(lang_specific_driver): Only add -lm automatically if need_math is

Sat Jun 27 12:22:56 1998  Jeffrey A Law  (

	* (g++): Depend on mkstemp.o.  Link in mkstemp.o

Sat Jun 27 07:36:09 1998  Kaveh R. Ghazi  <>

	* (EXPR_H): New dependency variable.
	(decl2.o): Depend on $(EXPR_H).
	(typeck.o): Likewise.
	(init.o): Likewise.
	(expr.o): Likewise.

1998-06-25  Benjamin Kosnik  <>

	* decl.c (start_enum): Put local enums on permanent_obstack.

1998-06-25  Mark Mitchell  <>

	* cp-tree.h (c_get_alias_set): Declare.
	* decl.c (init_decl_processing): Set lang_get_alias_set.

1998-06-25  Andrew MacLeod  <>

	* cp-tree.h (mark_all_runtime_matches): Add function prototype.
	* except.c (mark_all_runtime_matches): Set TREE_SYMBOL_REFERENCED
	flag for all function decls which are in the exception table.
	* (__cplus_type_matcher): Check for CATCH_ALL_TYPE match.
	* decl2.c (finish_file): Call mark_all_runtime_matches to make sure
	code is emitted for any referenced rtti function.

1998-06-25  Dave Brolley  <>

	* lang-specs.h: Use new | syntax to eliminate
	string concatenation.

1998-06-25  Jason Merrill  <>

	* cp-tree.h (CP_DECL_CONTEXT): New macro.
	* decl2.c (is_namespace_ancestor, lookup_using_namespace): Use it.
	* method.c (build_overload_nested_name): Likewise.
	* sig.c (build_signature_pointer_or_reference_type): Don't set

1998-06-24  Martin v. Löwis  <>

	Set DECL_CONTEXT for globals to NULL_TREE instead of global_namespace.
	* cp-tree.h (FROB_CONTEXT): New macro.
	(DECL_MAIN_P): ::main should have a DECL_CONTEXT of NULL_TREE.
	* decl.c (namespace_binding): Replace NULL_TREE with
	(set_namespace_binding, pop_namespace, lookup_name_real): Likewise.
	* decl2.c (is_namespace_ancestor, lookup_using_namespace):
	* decl.c (pushtag): Use FROB_CONTEXT.
	(pushdecl, make_typename_type, define_function, grokdeclarator):
	* decl2.c (set_decl_namespace, do_namespace_alias): Likewise.
	* pt.c (push_template_decl_real, lookup_template_class, tsubst):
	* decl2.c (decl_namespace): Return global_namespace if no context.
	* method.c (build_overload_nested_name): Expect null as context.
	* pt.c (mangle_class_name_for_template): Do nothing for null
	(lookup_template_class): Allow for null id_context.

1998-06-25  Richard Henderson  <>

	* method.c (emit_thunk): Set current_function_is_thunk for the
	ASM_OUTPUT_MI_THUNK case as well.

1998-06-23  Andrew MacLeod  <>

	* (__cplus_type_matcher): Get a match_info pointer
	instead of an exception table entry as a parameter.

1998-06-23  Andrew MacLeod  <>

	* parse.y (function_try_block): Don't call start_catch_handler.
	* except.c (call_eh_info): Remove coerced field from declaration.
	(build_eh_type_type_ref): New function to create an address of a
	rtti function for the new style exception tables.
	(expand_start_catch_block): Split function, this contains the
	common part.
	(process_start_catch_block_old): New function to perform the rest
	of expand_start_catch_block under old style exceptions.
	(process_start_catch_block_old): New function to perform the rest
	of expand_start_catch_block under new style exceptions.
	(expand_end_catch_block): Only pop the false label off the stack under
	the old style of exceptions.
	* semantics.c (finish_try_block): Don't call start_catch_handler.
	* (struct cp_eh_info): Add original_value field.
	(__cplus_type_matcher): Perform type matching on the original exception
	value, and if we have a match, set the current value.
	(__cp_push_exception): Set the original exception value.

1998-06-23  Jason Merrill  <>

	* call.c (joust): Fix confusing conversion warning.

	* call.c (build_op_delete_call): Add placement parm.  Check
	* cp-tree.h, decl2.c, init.c: Adjust.
	* decl.c (finish_function): Use it.

	* pt.c (tsubst): Diagnose creating void fields or variables.

Mon Jun 22 08:50:26 1998  Kaveh R. Ghazi  <>

	* call.c (build_scoped_method_call): Remove unused variable `tmp'.

	* cp-tree.h (check_dtor_name): Add prototype.

	* init.c (expand_member_init): Remove unused variables
	`ptr_type_node', `parm' and `rval'.

	* ptree.c (print_lang_type): Use HOST_WIDE_INT_PRINT_DEC specifier
	in call to fprintf.
	(lang_print_xnode): Likewise.

	* typeck2.c (enum_name_string): Cast argument to sprintf to long
	and use %ld specifier.

	* xref.c (GNU_xref_end_scope): Use HOST_WIDE_INT_PRINT_DEC
	specifier in call to fprintf.
	(GNU_xref_member): Cast argument to sprintf to int.

Fri Jun 19 23:22:42 1998  Bruno Haible  <>

	* typeck2.c (pop_init_level): Warn about implicit zero initialization
	of struct members.

Thu Jun 18 09:32:32 1998  Kaveh R. Ghazi  <>

	* cp-tree.h: Prototype function `check_java_method'.

1998-06-17  Jason Merrill  <>

	* class.c (finish_struct): Make conflicting use of id a pedwarn.
	* decl.c (pushdecl_class_level): Likewise.

1998-06-17  Mark Mitchell  <>

	* pt.c (convert_nontype_argument): Issue an error when presented
	with an integer (real) constant that cannot be simplified to an

	* cp-tree.h (c_get_alias_set): Remove declaration added in
	1998-06-13 change that should never have been checked in.

1998-06-17  Jason Merrill  <>

	* typeck.c (build_binary_op_nodefault): Change % in format strings
	to %%.

	* decl.c (grokvardecl): Don't build_static_name for decls that
	aren't at namespace scope.

	* init.c (perform_member_init): Catch default-initialization of

1998-06-17  Mark Mitchell  <>

	* errfn.c (cp_thing): Handle the `%%' formatting sequence.

1998-06-17  Jason Merrill  <>

	* method.c (hack_identifier): Complain about getting a namespace
	or class template.
	* typeck.c (decay_conversion): Remove check for namespaces.
	* typeck2.c (incomplete_type_error): Likewise.
	* parse.y (template_arg): Add PTYPENAME expansion.

1998-06-16  Andrew MacLeod  <>

	* 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.

1998-06-16  Jason Merrill  <>

	* call.c (check_dtor_name): Split out.
	(build_scoped_method_call): Use it.
	(build_method_call): Use it.
	* init.c (build_offset_ref): Use it.

	* typeck.c (build_static_cast): Fix handling of pointers to members.

	* decl.c (finish_function): Just return nothing from a constructor.
	* typeck.c (c_expand_return): Complain about returning a void
	expression from a destructor.

1998-06-13  Mark Mitchell  <>

	* class.c (alter_access): Accept a BINFO explaining how to get
	from the entity whose accessed is being altered to the type doing
	the altering.
	(handle_using_decl): New function containing code split out from ...
	(finish_struct_1): Here.

	* cp-tree.h (complete_type_or_else): Declare.
	* init.c (build_new_1, build_delete): Use it.
	* typeck.c (require_complete_type): Use complete_type, rather than
	expanding it inline.
	(complete_type_or_else): New function.
	(build_component_ref): Use it.
	(pointer_int_sum): Make sure the type pointed to is complete.
	(pointer_diff): Likewise.

	* pt.c (for_each_template_parm): Traverse the TYPE_CONTEXT for

	* search.c (get_matching_virtual): Note that member templates
	cannot override virtual functions.

1998-06-12  Brendan Kehoe  <>

	* pt.c (check_explicit_specialization): If DECLARATOR turned into
	an error_mark_node from lookup_template_function, return the same.
	(determine_specialization): Also make sure TEMPLATE_ID isn't an
	error_mark_node, before we try to read its operands.
	* decl.c (grokdeclarator): If we got an error_mark_node from
	check_explicit_specialization, just return it right back.

1998-06-12  Mark Mitchell  <>

	* class.c (instantiate_type): Don't treat template-ids that don't
	specify any template arguments as equivalent to ordinary
	identifiers.  Use OFFSET_REF instead of SCOPE_REF to refer to
	pointer-to-members for member templates.  Tidy slightly.
	* cp-tree.def (TEMPLATE_ID_EXPR): Revise documentation.
	* init.c (build_offset_ref): Handle template-ids like ordinary
	identifiers, for the most part, but store a TEMPLATE_ID_EXPR in the
	offset part of the OFFSET_REF.
	* typeck.c (build_unary_op): Change check for unknown types to
	look for OFFSET_REFs, not SCOPE_REFs.

1998-06-11  Mark Mitchell  <>

	* pt.c (is_member_template_class): New function.
	(push_template_decl_real): Use it.

1998-06-11  Benjamin Kosnik  <>

	* friend.c (do_friend): Add support for nested classes using
	member functions of the enclosing class as friends.

1998-06-10  Mark Mitchell  <>

	* call.c (convert_default_arg): Make global, not static.
	(convert_arg_for_ellipsis): Split out from ...
	(build_over_call): Here.
	* cp-tree.h (convert_default_arg); Declare.
	(convert_arg_to_ellipsis): Likewise.
	(do_member_init): Remove.
	* init.c (do_member_init): Remove; this code is dead.
	(expand_member_init): Remove much of this code; it is dead.
	* typeck.c (convert_arguments): Use convert_default_arg and
	convert_arg_for_ellipsis, rather than duplicating here.

	* call.c (convert_like): Don't fail silently if
	build_user_type_conversion fails.  Always return error_mark_node
	for failure.

1998-06-10  Jason Merrill  <>

	* search.c (covariant_return_p): Complain about ambiguous base.

	* typeck.c (build_component_ref): Diagnose ref to nested type.

1998-06-10  Brendan Kehoe  <>

	* decl.c (grokparms): Check that INIT isn't an error_mark_node
	before giving error about invalid type for default arg.

1998-06-10  Jason Merrill  <>

	* call.c (build_method_call): Fix thinko.

1998-06-10  Dave Brolley  <>

	* decl2.c (lang_decode_option): New argc/argv interface.
	* cp-tree.h (lang_decode_option): New argc/argv interface.
	* lang-specs.h (default_compilers): Only call cpp if -E, -M or -MM is
	specified for cpplib-enabled compilers.
	* lex.c (lang_init): Don't check_newline for cpplib.
	(init_parse): Don't initialize cpplib here.

1998-06-10  Brendan Kehoe  <>

	* typeck.c (build_component_ref): Make sure FIELD has a lang_specific
	piece before checking DECL_MUTABLE_P.

1998-06-10  John Carr  <>

	* tree.c (debug_binfo): Make printf format match arguments.

	* error.c (OB_PUTI): Make printf format match arguments.

1998-06-10  Jason Merrill  <>

	* init.c (perform_member_init): Handle default-initialization.

	* except.c (build_throw): Handle throwing NULL.

	* typeck.c (build_x_function_call): Use resolve_offset_ref.

	* search.c (compute_access): Only strip an anonymous union
	for a FIELD_DECL.

	* call.c (add_builtin_candidates): Tweak.

	* cvt.c (build_expr_type_conversion): Restore code for conversion
	from class types.
	* decl2.c (delete_sanity): Use it.  Clean up.

	* typeck.c (comp_ptr_ttypes_real): Fix cv-qual comparisons.

1998-06-10  Branko Cibej  <>

	* typeck.c (c_expand_return): Don't warn about void expressions on
	return statements in functions returning void.

1998-06-09  Mark Mitchell  <>

	* pt.c (fn_type_unification): Revise documentation.  Tidy.
	(type_unification): Likewise.

1998-06-09  Andrew MacLeod  <>

	* semantics.c (finish_try_block): Rename expand_start_catch, and delete
	* parse.y (function_try_block): Rename expand_start_catch, and delete
	* except.c (expand_end_eh_spec): Rename expand_start_catch, and delete

1998-06-09  Jason Merrill  <>

	* search.c (lookup_member): New fn.
	* class.c (finish_struct_1): Use it.
	* decl.c (lookup_name_real): Use it.

Mon Jun  8 20:45:52 1998  Kaveh R. Ghazi  <>

	* (decl2.o): Depend on dwarf2out.h and dwarfout.h.

	* cp-tree.h: Add prototype for `maybe_print_template_context' and

	* decl.c (auto_function): Remove unused variable `decl'.

	* decl2.c: Include dwarf2out.h and dwarfout.h.

	* lex.c: Remove redundant declarations of `set_float_handler' and

1998-06-08  Andrew MacLeod  <>

	* except.c (init_exception_processing): Remove NEW_EH_MODEL compile
	time flag.  Call __cp_eh_info instead of __cp_exception_info.
	* (struct cp_eh_info): Remove NEW_EH_MODEL flag.
	(__cp_exception_info): Return offset into cp_eh_info structure to
	match what use to be the start of this structure.
	(__cp_eh_info): New function to return a pointer to cp_eh_info struct.
	(__cplus_type_matcher, __cp_push_exception): Remove NEW_EH_MODEL
	compile time flag.
	(__uncatch_exception, __check_eh_spec, std::uncaught_exception): Call
	__cp_eh_info instead of __cp_exception_info.

1998-06-08  Jason Merrill  <>

	* decl.c (cp_finish_decl): Disable inlining of extern inlines
	with static variables.

1998-06-08  Mark Mitchell  <>

	* init.c (build_offset_ref): Correct previous change to use build,
	not build_min.

1998-06-07  Mark Mitchell  <>

	* class.c (instantiate_type): Handle pointer-to-members where the
	member is a template.
	* init.c (build_offset_ref): Likewise.
	* typeck.c (build_unary_op): Likewise.

1998-06-07  Richard Henderson  <>

	* lex.c (lang_init_options): New function.
	(lang_init): Remove flag_exceptions == 2 hack.

1998-06-05  Jason Merrill  <>

	* search.c (envelope_add_decl): Tweak for implicit typename.

	* call.c (joust): Also warn about confusing conversion op/constructor
	overload resolution.

	* spew.c (yylex): Also return the TYPE_DECL if got_object.
	Don't clear got_object after '~'.
	* call.c (build_scoped_method_call): Tweak destructor handling.
	(build_method_call): Likewise.
	* pt.c (tsubst_copy, case METHOD_CALL_EXPR): Don't mess with
	TYPE_MAIN_VARIANT for destructors.
	* semantics.c (finish_object_call_expr): Complain about calling a

1998-06-05  Per Bothner  <>

	* g++spec.c (lang_specific_pre_link, lang_specific_extra_ofiles):
	Define - update needed by gcc.c change.

1998-06-05  Jason Merrill  <>

	* error.c (cp_printers): Use 'o' instead of '_' for the null entry.

1998-06-05  Martin v. Löwis  <>

	* 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
	* error.c (dump_decl): Support SCOPE_REF.
	* parse.y (extdef): Wrap lookup with namespace_only for namespace
	aliases and using declarations.

1998-06-04  Jason Merrill  <>

	* tree.c (really_overloaded_fn): Only see through one TREE_LIST.

	* error.c (dump_expr): Clean up NEW_EXPR case.

1998-06-04  Martin von Löwis  <>

	Suggested by Brendan Kehoe
	* decl2.c (do_toplevel_using_decl): When decl is a TYPE_DECL,
	treat it as using ::decl.

	* decl2.c (arg_assoc_type): Process unknown_type_node and OFFSET_TYPE.

	* tree.c (mapcar): Support NEW_EXPR.

	* error.c (dump_expr): Support NEW_EXPR.

1998-06-03  Jason Merrill  <>

	* method.c (make_thunk): Use overload machinery to make name.
	* search.c (covariant_return_p): New fn.
	(get_matching_virtual): Use it.

	* init.c (build_new_1): Fix check for void.

1998-06-01  Per Bothner  <>

	* cp-tree.h (TYPE_FOR_JAVA):  New macro.
	* decl.c, cp-tree.h (java_byte_type_node, java_short_type_node,
	java_int_type_node, java_long_type_node, java_float_type_node,
	java_double_type_node, java_char_type_node, java_boolean_type_node):
	New "primitive" types, with predefined names __java_byte etc.
	(record_builtin_java_type):  New function.
	(init_decl_processing):  Make Java types with record_builtin_java_type.
	(pushtag, grokdeclarator):  Set TYPE_FOR_JAVA if in extern "JAVA".
	(xref_baseypes):  If base class was TYPE_FOR_JAVA, so is this class.
	(grokfndecl):  Call check_java_method for Java classes.
	* method.c (is_java_type):  Removed.  Replaced with TYPE_FOR_JAVA.
	(process_overload_item):  Match types against specific
	java_XX_type_node types, rather than using is_java_type.
	* class.c (finish_struct_1):  Don't add default copy constructor
	or operator= if TYPE_FOR_JAVA.
	(pop_lang_conext):  Restore strict_prototyp proper if Java.
	* decl2.c (acceptable_java_type, check_java_method):  New functions.
	* pt.c (instantiate_class_template):  Copy TYPE_FOR_JAVA from pattern.
	(tsubst):  Move common statement after if statement.
	* typeck.c (comptypes):  If strict, TYPE_FOR_JAVA must match.

1998-06-01  Jason Merrill  <>

	* pt.c (for_each_template_parm): Use first_rtl_op.

	* tree.c (build_cplus_array_type_1): Also check index_type for
	template parms.

1998-05-31  Jason Merrill  <>

	* pt.c (tsubst): Always copy BINFO_BASETYPES.

1998-05-29  scott snyder  <>

	* tree.c (layout_basetypes): If we change TYPE_SIZE, change

1998-05-29  Mark Mitchell  <>

	* decl.c (grokdeclarator): Don't complain about in-class
	initialization of static consts if we don't really know the type
	of the variable.

1998-05-29  Jason Merrill  <>

	* cp-tree.h (DECL_DESTRUCTOR_P): New macro.
	* method.c (build_destructor_name): New fn.
	* decl2.c (maybe_retrofit_in_chrg): Split out...
	(grokclassfn): From here.  Reorganize.
	* decl.c (grok_ctor_properties): Make sure ctors for types with
	vbases have the in_chrg parm.
	* pt.c (instantiate_class_template): Update
	TYPE_USES_VIRTUAL_BASECLASSES from tsubsted bases.  Don't call
	(tsubst): Call grok_ctor_properties and maybe_retrofit_in_chrg.

1998-05-28  Mark Mitchell  <>

	* pt.c (instantiate_decl): Make test for whether or not static
	variables should be instantiated early match its comment.

1998-05-28  Jason Merrill  <>

	* decl.c (start_decl): Always pedwarn about vacuously redeclaring
	a member.
	(start_function): Call check_default_args.
	* decl2.c (grokfield): Don't call check_default_args.
	(check_default_args): Use cp_error_at.
	* lex.c (do_pending_defargs): Call check_default_args.

1998-05-27  Brendan Kehoe  <>

	* call.c (build_method_call): Make sure get_type_value returns
	something before we try to use its TYPE_MAIN_VARIANT.
	(build_scoped_method_call): Likewise.

1998-05-27  Jason Merrill  <>

	* typeck2.c (digest_init): Complain about getting a TREE_LIST to
	initialize an array.

	* search.c (expand_upcast_fixups): Don't set DECL_CONTEXT and

	* friend.c (do_friend): Clarify template warning.

1998-05-27  Mark Mitchell  <>

	* decl.c (shadow_label): Don't treat decls as identifiers.
	(maybe_push_to_top_level): Clear shadowed_labels.

	* pt.c (instantiate_decl): Reset lineno and filename after calling

	* decl.c (grokdeclarator): Don't try to use TYPE_OBSTACK on an

1998-05-27  Kevin Buhr  <>

	* parse.y (base_class): Use is_aggr_type, not IS_AGGR_TYPE.

1998-05-26  Kriang Lerdsuwanakij  <>

	* pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
	(convert_nontype_argument): Handle cases when nontype template
	parameters become classes after substitution.

1998-05-26  Mark Mitchell  <>

	* friend.c (is_friend): Use comptypes, rather than == to compare
	types.  Modify for new representation of template friends.
	(make_friend_class): Likewise.
	* pt.c (tsubst_friend_class): Undo 1998-05-21 change.  Tweak.
	(instantiate_class_template): Deal with template friends.

	* decl.c (store_parm_decls): Remove redundant call to

1998-05-26  Benjamin Kosnik  <>

	* decl.c (start_decl): Check for DECL_LANG_SPECIFIC before

1998-05-26  Per Bothner  <>

	* language_as_string:  Handle lang_java.

1998-05-26  Jason Merrill  <>

	* decl.c (pushdecl): Don't copy the type_decl.

1998-05-26  Martin v. Löwis  <>

	* class.c (pushclass): Always store TYPE_MAIN_VARIANT in
	* decl.c (grokdeclarator): Put typedefs on the type's obstack.

	* parse.y (complex_direct_notype_declarator): Use $1 to access
	scope of notype_qualified_id.

1998-05-26  Dave Brolley  <>

	* lex.c (parse_options,yy_cur,yy_lim): Add for cpplib.
	(init_parse): Initialize cpplib interface.

	* (CXX_OBJS): Make sure dependencies never end with an
	empty continuation.

1998-05-26  Mark Mitchell  <>

	* decl.c (pushtag): Avoid crashing on erroneous input.

1998-05-25  Martin v. Löwis  <>

	* decl.c (push_namespace): Only produce one unique name for
	anonymous namespaces.
	(get_unique_name): Remove.

1998-05-25  Mark Mitchell  <>

	* call.c (tourney): Don't do any extra comparisons.

	* decl2.c (build_anon_union_vars): Don't crash on empty sub-unions.

	* cp-tree.h (processing_template_parmlist): Declare.
	* decl.c (pushtag): Don't call push_template_decl when we
	* pt.c (processing_template_parmlist): New variable.
	(complete_template_args): Use it.
	(add_to_template_args): Likewise.
	(innermost_args): Likewise.
	(tsubst): Likewise.
	(begin_template_parm_list): Use processing_template_parmlist.
	(end_template_parm_list): Likewise.

	* cp-tree.h (ANON_UNION_TYPE_P): New macro.
	* decl.c (grokdeclarator): Use it.
	* decl2.c (grok_x_components): Likewise.
	* init.c (initializing_context): Likewise.
	* method.c (do_build_copy_constructor): Likewise.
	(do_build_assign_ref): Likewise.
	* search.c (compute_access): Likewise.
	* typeck.c (build_component_ref): Likewise.

	* decl.c (grokdeclarator): Don't give a cv-qualified version of an
	unnamed type a typedef name "for linkage purposes".

	* pt.c (lookup_template_class): Don't look at
	IDENTIFIER_CLASS_VALUE when there's no current_class_type.

	* method.c (build_overload_int): Handle error cases gracefully.

	* pt.c (instantiate_decl): Handle static member variables

	* pt.c (tsubst): Use the tsubst'd type when producing new

1998-05-24  Mark Mitchell  <>

	* tree.c (cp_tree_equal): Handle pointers to member functions.

	* call.c (maybe_handle_implicit_object): Handle QUAL_CONVs.  Make
	sure the type of the REF_BIND is a reference type.
	(maybe_handle_ref_bind, compare_ics): Rename reference_type to
	target_type for clarity.

	* parse.y (xcond): Move call to condition_conversion ...
	* semantics.c (finish_for_cond): Here.
	* parse.c: Regenerated.

1998-05-24  Jason Merrill  <>

	* decl.c (push_namespace): Namespaces have type void.
	* typeck2.c (incomplete_type_error): Complain about namespace
	used as expression.
	* typeck.c (decay_conversion): Likewise.

1998-05-24  Martin von Löwis  <>

	* error.c (dump_expr): Support namespaces.

1998-05-23  Jason Merrill  <>

	* cp-tree.def: Add SRCLOC.
	* cp-tree.h: Add struct tree_srcloc and accessor macros.
	* tree.c (build_srcloc, build_srcloc_here): New fns.
	* pt.c (add_pending_template): Use build_srcloc_here.
	(push_tinst_level): Update last_template_error_tick before erroring.
	(instantiate_decl): Restore lineno and input_filename before
	calling add_pending_template.
	* decl2.c (finish_file): Set up lineno and input_filename for
	pending templates.

1998-05-22  Jason Merrill  <>

	* decl.c (lang_print_error_function): New fn.
	(init_decl_processing): Set print_error_function to use it.
	* errfn.c (cp_thing): Don't call maybe_print_template_context here.

	* call.c (maybe_handle_ref_bind): Propagate ICS_USER_FLAG and

	* cvt.c (ocp_convert): Don't set LOOKUP_NO_CONVERSION for

	* class.c (build_vtable_entry): Use int_fits_type_p.
	(build_vtable): Pass a signed offset to build_vtable_entry.
	(prepare_fresh_vtable, modify_one_vtable, fixup_vtable_deltas1,
	set_rtti_entry): Likewise.

1998-05-22  Per Bothner  <>

	* cp-tree.h:  Add comments documenting which LANG_FLAGS are used.

1998-05-22  Jason Merrill  <>

	* pt.c (print_template_context): Use fprintf instead of cp_error.

	* pt.c (determine_specialization): Just return an error_mark_node.
	Also print the decl we want in error messages.  If we complain,
	return error_mark_node.
	(tsubst_friend_function): Set lineno and input_filename so
	error messages will be useful.
	(instantiate_template): Just return an error_mark_node.
	(check_explicit_specialization): Don't mess with a returned

	* pt.c (print_template_context): Add new argument.
	(maybe_print_template_context): New fn.
	(push_tinst_level): Increment tinst_level_tick.
	(pop_tinst_level): Likewise.
	* errfn.c (cp_thing): Call maybe_print_template_context.  Use
	xrealloc instead of xmalloc.

	* typeck.c (build_unary_op, CONVERT_EXPR): Propagate TREE_CONSTANT.

1998-05-21  Jason Merrill  <>

	* pt.c (tsubst_friend_class): Don't call redeclare_class_template
	if the template we looked up is the same as the one we already

Thu May 21 11:54:44 1998  Dave Brolley  <>

	* lex.c: (handle_sysv_pragma): FILE* parameter not used.
	(cpp_reader,parse_in): Add for cpplib.
	(check_newline): Call handle_sysv_pragma with new interface.
	(check_newline): Call GET_DIRECTIVE_LINE, not get_directive_line.

	* input.c: (yy_cur,yy_lim,yy_get_token,GETC): Add for cpplib.
	(sub_getch): Call GETC for cpplib.

	* cp-tree.h: (get_directive_line): Different prototype for cpplib.
	(GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.

	* (CXX_OBJS): Add @extra_cxx_objs@ for cpplib.

1998-05-21  Jason Merrill  <>

	* decl2.c (maybe_make_one_only): New fn.
	(import_export_vtable): Use it.
	(import_export_decl): Likewise.
	* pt.c (mark_decl_instantiated): Likewise.

1998-05-21  Mark Mitchell  <>

	* decl2.c (find_representative_member): Rename to ...
	(build_anon_union_vars): New function.
	(finish_anon_union): Fix stupidity of previous change.

1998-05-20  Jason Merrill  <>

	* decl.c (grokfndecl): Handle definition of specialization in
	friend declaration.

	* error.c (dump_decl): Fix LOOKUP_EXPR handling.

1998-05-20  Mark Mitchell  <>

	* class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P
	to look for type declarations.
	(finish_struct): Deal with templates on the CLASSTYPE_TAGS list.
	* cp-tree.h (DECL_DECLARES_TYPE_P): New macro.
	(finish_member_class_template): Declare.
	* decl.c (pushtag): Put member class templates on the
	CLASSTYPE_TAGS list, just as for ordinary member classes.
	(pushdecl_class_level): Use DECL_DECLARES_TYPE_P.
	(lookup_tag): Look for IDENTIFIER_CLASS_VALUEs, just as with
	* parse.y (component_decl): Move code to ...
	* semantics.c (finish_member_class_template): New function.
	Don't put member class templates on the list of components for a
	* parse.c: Regenerated.
	* pt.c (classtype_mangled_name): Don't try DECL_CONTEXT on types.
	In fact, don't use DECL_CONTEXT at all here.

1998-05-20  Martin von Löwis  <>

	* decl.c (record_unknown_type): New function.
	(init_decl_processing): Call it for the unknown and global type

1998-05-20  Mark Mitchell  <>

	* decl2.c (find_representative_member): New function.
	(finish_anon_union): Use it.

	* cp-tree.h (MAIN_NAME_P): New macro.
	(DECL_MAIN_P): Likwise.
	* decl.c (pushdecl): Avoid crashing on redefinitions of `main'.
	(grokfndecl): Use the new macros.
	(grokdeclarator): Likewise.
	(start_function): Likewise.
	(store_parm_decls): Likewise.
	(finsh_function): Likewise.
	* friend.c (do_friend): Likewise.
	* typeck.c (build_function_call_real): Likewise.
	(build_unary_op): Likewise.

Wed May 20 02:16:01 1998  Jason Merrill  <>

	* decl2.c (start_objects, finish_objects, do_dtors,
	do_ctors): Split out from...

Tue May 19 20:36:23 1998  Jason Merrill  <>

	* tree.c (is_overloaded_fn): Don't abort on placeholders from

Tue May 19 15:16:22 1998  Brendan Kehoe  <>

	* class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.

	* error.c (dump_expr): Handle an ARROW_EXPR.

Tue May 19 15:13:39 1998  Mark Mitchell  <>

	* decl.c (saveable_obstack): Declare.
	(pushdecl): Copy TYPE_DECLs to the same obstack as the type they
	declare, if necessary.

Tue May 19 14:50:27 1998  Mark Mitchell  <>

	* call.c (compare_qual): Remove.
	(is_subseq): Tweak.
	(is_properly_derived_from): New function.
	(maybe_handle_ref_bind): Likewise.
	(maybe_handle_implicit_object): Likewise.
	(compare_ics): Modify substantially to bring into conformance with
	the standard.
	* cp-tree.h (TYPE_PTRMEMFUNC_OBJECT_TYPE): New macro.
	(comp_cv_qualification): Declare.
	(comp_cv_qual_signature): Likewise.
	* typeck.c (comp_cv_qualification): Likewise.
	(comp_cv_qual_signature): Likewise.

Tue May 19 10:05:02 1998  Kaveh R. Ghazi  <>

	* (parse.o): Depend on toplev.h.

	* class.c (typecode_p): Remove prototype and definition.

	* cp-tree.h (currently_open_class, is_empty_class, member_p):
	Add prototype.

	* decl.c (push_overloaded_decl_top_level): Remove prototype and

	* errfn.c (cp_error): Cast function pointer `error' to (errorfn *)
	in call to `cp_thing'.
	(cp_warning): Likewise for function pointer `warning'.

	* except.c (do_function_call): Remove prototype and definition.
	(call_eh_info): Wrap variable `t1' in macro NEW_EH_MODEL.

	* method.c (is_java_type): Add prototype and make it static.

	* parse.y: Include toplev.h.

	* pt.c (type_unification): Remove unused variable `arg'.
	(instantiate_decl): Likewise for `save_ti'.

	* tree.c (propagate_binfo_offsets): Likewise for `base_binfos'.

Tue May 19 02:43:25 1998  Jason Merrill  <>

	* init.c (build_member_call): Handle template_ids.
	* parse.y (primary): Add global_scope template_id.

Mon May 18 23:22:52 1998  Jason Merrill  <>

	* decl2.c (get_sentry): Use end_temporary_allocation.
	Don't declare permanent_obstack.

Mon May 18 12:28:44 1998  Mark Mitchell  <>

	* parse.y (.finish_new_placement): New non-terminal.
	(unary_expr, new_type_id): Use it.
	* parse.c: Regenerated.

Mon May 18 12:20:27 1998  Brendan Kehoe  <>

	* pt.c (redeclare_class_template): Say where the original definition
	of the template-parameter's default argument appeared.

Mon May 18 03:00:57 1998  Jason Merrill  <>

	* call.c (build_over_call): Tweak empty class handling.

	* decl.c (make_typename_type): Use currently_open_class.

	* class.c (instantiate_type): Don't abort on TREE_NONLOCAL_FLAG.

Mon May 18 01:43:01 1998  Martin v. Löwis  <>

	* decl.c (lookup_name_real): Don't look at IDENTIFIER_LOCAL_VALUE
	for a type unless it is one.

	* class.c (finish_struct_1): Use OVL_CURRENT in error message.

Mon May 18 01:24:08 1998  Jeffrey A Law  (

	* (program_transform_name, objdir): Define.

	* (BISON): Use bison from the build tree if it exists.
	(FLEX): Likewise.

Sun May 17 14:52:08 1998  Martin v. Löwis  <>

	* typeck.c (type_unknown_p): Return true for TREE_LIST also.

	* call.c (build_method_call): Use TYPE_MAIN_VARIANT on typedefs.

Sun May 17 14:51:41 1998  Jason Merrill  <>

	* call.c (build_scoped_method_call): Likewise.

Sun May 17 13:53:48 1998  Mark Mitchell  <>

	* init.c (build_new_1): Call suspend_momentary around the creation
	of values that must be saved for exception handling.
	* parse.y (.build_new_placement): New non-terminal.
	(unary_expr, new_placement): Use it.
	* parse.c: Regenerated.

Sun May 17 12:32:08 1998  Jason Merrill  <>

	* decl.c (duplicate_decls): Use CANONICAL_TYPE_VARIANT to compare
	old and new types.

	* pt.c (tsubst): Make sure that BINFO_TYPE of new binfos is the
	canonical type.

	* call.c (build_over_call): Don't use IS_SIGNATURE on a namespace.

Fri May 15 20:28:00 1998  Jason Merrill  <>

	* decl.c (start_decl): Revert problem change.

	* (CONFLICTS): Fix.

Fri May 15 15:34:02 1998  Benjamin Kosnik  <>

	* decl.c (duplicate_decls): Clean up, add DECL_DATA_AREA bits.

Fri May 15 00:46:05 1998  Jason Merrill  <>

	* class.c (finish_struct_1): Use BINFO_SIZE.

	* decl.c (start_decl): Use 'tem'.

Thu May 14 16:30:47 1998  Andrew MacLeod  <>

	* Include eh-common.h.
	(struct cp_eh_info): Add eh_info struct with NEW_EH_MODEL.
	(__cplus_type_matcher): First stab at new C++ runtime type matcher.
	(__cp_push_exception): Initialize eh_info struct as well.
	* except.c: Remove local structs and include eh-common.h.
	(init_exception_processing): Set language and version codes.
	(call_eh_info): Add presence of eh_info to runtime description of
	struct cp_eh_info.
	(expand_end_eh_spec): Call start_catch_block() and end_catch_block().
	* semantics.c (finish_try_block): Call start_catch_block() and
	* parse.y (function_try_block): Call start_catch_block() and

Thu May 14 12:27:34 1998  Brendan Kehoe  <>

	* typeck.c (original_type): New function.
	(common_type): Use it to get the DECL_ORIGINAL_TYPE for T1 and T2,
	to see if they're actually the same.
	* cp-tree.h (original_type): Declare.

Wed May 13 12:54:30 1998  Kaveh R. Ghazi  <>

	* (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

	* 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

	* (__class_type_info::dcast): Change the type of variable
	`i' from int to size_t.

	* typeck.c (language_lvalue_valid): Mark parameter `exp' with

Tue May 12 21:37:49 1998  Jason Merrill  <>

	* error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or
	(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.

Tue May 12 07:24:18 1998  Mark Mitchell  <>

	* cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
	* method.c (build_mangled_name): Use it.
	(build_decl_overload_real): Likewise.

	* error.c (dump_simple_decl): New function, broken out from ...
	(dump_decl): Use it.

Mon May 11 11:38:07 1998  Mark Mitchell  <>

	* ptree.c (lang_print_xnode): Add missing `break'.

	* pt.c (tsubst): Remove duplicate check for IDENTIFIER_NODE.

	* call.c (add_template_candidate): Adjust for changes to
	(add_template_candidate_real): Likewise.
	(add_template_conv_candidate): 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.
	* class.c (instantiate_type): Likewise.
	* cp-tree.h (unification_kind_t): New type.
	(fn_type_unification): Adjust prototype.
	(type_unificaiton): Likewise.
	* pt.c (UNIFY_ALLOW_NONE): New macro.
	(unify): Change prototype.
	(maybe_adjust_types_for_deduction): New function.
	(check_cv_quals_for_unify): Likewise.
	(determine_specialization): Adjust.
	(fn_type_unification): Likewise.
	(type_unification): Likewise.
	(type_unification_real): Likewise.  Use
	maybe_adjust_types_for_deduction.  Fix mishandling of
	back-unification of template functions passed as arguments.  Pass
	appropriate combination of UNIFY_ALLOW_* to unify.
	(unify): Remove unused NTPARMS parameter.  Use
	check_cv_quals_for_unify.  Remove bogus code that allowed
	too-generous unification in order to adhere more closely to standard.
	(get_bindings_real): Adjust.
	(get_class_bindings): Likewise.

	* method.c (build_overload_identifier): Only use the innermost
	template arguments when mangling.
	* pt.c (tsubst_template_argument_vector): New function.
	(complete_template_args): Deal with the situation where the
	extra_args contain more than one level of arguments.
	(lookup_template_class): Deal with member template classes, which
	may have more than one level of arguments.
	(tsubst): Don't tsbust into the TREE_TYPE of an IDENTIFIER_NODE.
	Improve handling of member template classes.  Use
	DECL_PRIMARY_TEMPLATE instead of inline expansion.  Use
	tsubst_template_argument_vector where appropriate.
	(regenerate_decl_from_template): Break out from ...
	(instantiate_decl): Here.

	* lex.c (yyprint): Remove TYPENAME_ELLIPSIS.
	* parse.h: Regenerated.
	* parse.c: Really regenerated.

	* cp-tree.h (finish_unary_op_expr): New function.
	(finish_id_expr): Likewise.
	(begin_new_placement): Likewise.
	(finish_new_placement): Likewise.
	(finish_declarator): Likewise.
	(finish_translation_unit): Likewise.
	(finish_parmlist): Likewise.
	(begin_class_definition): Likewise.
	(finish_class_definition): Likewise.
	(finish_default_args): Likewise.
	(finish_inline_definitions): Likewise.
	* parse.y (GCC_ASM_KEYWORD): Remove.
	* parse.c: Regenerated.
	Use new functions in semantics.c in the actions for many rules.
	* gxx.gperf (GCC_ASM_KEYWORD): Just use ASM_KEYWORD.
	* hash.h: Regenerated.
	* semantics.c (finish_expr_stmt): Allow NULL expr.
	(finish_unary_op_expr): New function, containing
	code previously in parse.y.
	(finish_id_expr): Likewise.
	(begin_new_placement): Likewise.
	(finish_new_placement): Likewise.
	(finish_declarator): Likewise.
	(finish_translation_unit): Likewise.
	(finish_parmlist): Likewise.
	(begin_class_definition): Likewise.
	(finish_class_definition): Likewise.
	(finish_default_args): Likewise.
	(finish_inline_definitions): Likewise.

Sun May 10 23:43:13 1998  Mark Mitchell  <>

	* typeck.c (build_c_cast): Don't decay arrays and functions to
	pointer type when converting to a class type.

Sun May 10 22:53:56 1998  Jason Merrill  <>

	* cp-tree.h (DECL_NAMESPACE_SCOPE_P): New macro.
	(DECL_CLASS_SCOPE_P): Likewise.

Sun May 10 22:48:22 1998  H.J. Lu  (

	* class.c (finish_struct_1): Use OVL_CURRENT on TREE_VEC_ELT.
	* decl2.c (constructor_name_full): Likewise.

Sun May 10 22:48:12 1998  Mike Stump  <>

	* tree.c (mapcar): Add OVERLOAD support.

	* init.c (resolve_offset_ref): We must use basetype_path before we
	destroy it with a call to convert_pointer_to.

Sat May  9 14:44:37 1998  Jason Merrill  <>

	* class.c (currently_open_class): New fn.
	* decl.c (lookup_name_real): Use it.
	* search.c (lookup_field): Likewise.

Fri May  8 23:32:42 1998  Martin von Löwis  <>

	* cp-tree.def (OVERLOAD): New node.
	(tree_overload): New struct.
	(IDENTIFIER_TYPE_VALUE): Use identifier_type_value.
	(lang_decl_flags): Remove in_namespace.
	(lang_decl): Remove chain.
	(flag_honor_std): Declare extern.
	(identifier_type_value, pushdecl_namespace_level, push_using_decl,
	namespace_binding, set_namespace_binding,
	lookup_function_nonclass, cat_namespace_levels,
	set_decl_namespace, lookup_arg_dependent, binding_init, ovl_cons,
	scratch_ovl_cons, ovl_member, build_overload): Declare.
	(decl_list_length, get_namespace_id, current_namespace_id,
	overloaded_globals_p): Remove.
	(lookup_using_namespace, qualified_lookup_using_namespace): Change
	return type.
	(push_scratch_obstack): New macro.
	* call.c (add_function_candidate): Special-case type of OVERLOAD node.
	(build_user_conversions_1): Iterate using OVL_NEXT for ctors,
	convs, fns.
	(build_new_function_call): Iterate using OVL_CHAIN.
	Print DECL_NAME in when reporting ambiguities.
	(build_object_call): Iterate using OVL_NEXT for fns, convs.
	(build_new_op): Call lookup_function_nonclass.
	Iterate using OVL_NEXT.
	(build_op_delete_call): Change detection of members.
	Do not wrap TREE_LIST around fields and single global functions.
	(build_over_call): Don't push a class level if the context is a
	(build_new_method_call): Iterate using OVL_NEXT.
	* class.c (add_method): Chain overloaded members using
	build_overload.  Remove copying of method.
	(grow_method): When iterating through the obstack, expect OVERLOAD
	nodes.  Chain overload members.
	(finish_struct_methods): Chain overload members.  Unpack OVERLOAD
	nodes in call to get_baselinks.
	(duplicate_tag_error): Expect OVERLOAD nodes when unchaining.
	(finish_struct_1): Iterate over ctor using OVL_NEXT.  Handle
	fdecls that are OVERLOAD nodes.
	(validate_lhs): New function.
	(instantiate_type): Do not copy OVERLOAD nodes.  Remove dead
	code.  Use DECL_NAME in error messages.  Split code between global
	and member function processing.
	* decl.c (global_type_node): New static variable.
	(in_std): New global.
	(struct binding_level): New field usings.
	(resume_binding_level): Assert that we are not in a class.
	(toplevel_bindings_p): Just check for namespace_p or
	(resume_level): Remove.
	(find_binding): New function.
	(binding_for_name): Call it.
	(namespace_binding, set_namespace_binding): New functions.
	(push_namespace): Associate binding level with new namespace,
	resume_binding_level for existing namespace.  Remove old code.
	Fake std by counting.
	(store_bindings): Use REAL_IDENTIFIER_TYPE_VALUE.
	(maybe_push_to_top_level): Save current namespace.
	(pop_from_top_level): Restore saved namespace.
	(pop_namespace): Call suspend_binding_level.  Remove old code.
	(cat_namespace_levels): New function.
	(set_identifier_type_value_with_scope): For namespace bindings,
	set BINDING_TYPE, and use global_type_node.
	(identifier_type_value): New function.
	(pushtag): If no context, use current_namespace.
	(duplicate_decls): Don't process DECL_CHAIN.
	(pushdecl): Set DECL_CONTEXT to current_namespace, if it is not
	already set.  Never reset it to NULL_TREE.  Lookup global variables
	in their namespace.  Push overloaded templates if they are on
	namespace level.
	(pushdecl_namespace_level): New function.
	(pushdecl_top_level): Implement using pushdecl_namespace_level.
	(pushdecl_using_decl): New function.
	(overloaded_globals_p): Remove.
	(push_overloaded_decl): Create OVERLOAD nodes, and iterate through
	them.  Use namespace_binding and set_namespace_value.
	(redeclaration_error_message): Complain if the declarations come
	from different namespaces.
	(lookup_tag): On namespace level, look in the BINDING_TYPE.
	(lookup_namespace_name): Pass tree_bindings from stack.  Remove
	old code.
	(select_decl): New function.
	(lookup_name_real): Call it for qualified and unqualified lookup.
	Pass tree_bindings from the stack.
	If prefer_type is 1, also accept namespaces.
	(lookup_function_nonclass): New function.
	(init_decl_processing): Set the binding level of the global
	namespace to global_binding_level.
	Build a proper type list for __builtin_apply.
	Initialize std_node to "fake std" if flag_honor_std is set.
	Initialize global_type_node.
	Allocated bad_alloc in namespace std if flag_honor_std.
	(define_function): Set the DECL_CONTEXT to the current_namespace.
	(start_decl): A namespace is not considered as a context here.  If
	the DECL_CONTEXT is a namespace, push the decl.
	(cp_finish_decl): Check for namespaces used as initializers.
	(grokfndecl): Add namespace parameter.  Remove processing of
	(grokvardecl): Add namespace parameter.
	(grokdeclarator): Process SCOPEs that are namespaces.  For
	mangling, temporarily set the DECL_CONTEXT on anonymous structs.
	(start_function): Check for contexts that are namespaces.
	Set context for declarations that have not been pushed.
	(store_parm_decls): Check for ::main only.
	(finish_function): Likewise.
	(start_method): Check for contexts that are namespaces.
	(start_method): Remove DECL_CHAIN processing.
	* decl2.c (flag_honor_std): Declare.
	(lang_decode_option): Set it if -fhonor-std or -fnew-abi is given.
	(decl_namespace_list): New static global.
	(grok_x_components): Ignore namespaces as type contexts.
	(check_classfn): Expect OVERLOAD nodes.
	(grokfield): Remove DECL_CHAIN processing.
	(finish_file): Call cat_namespace_levels.
	(merge_functions): New function.
	(ambiguous_decl): Rewrite.
	(lookup_using_namespace): Produce tree_bindings.
	(qualified_lookup_using_namespace): Likewise.
	(set_decl_namespace, decl_namespace, current_decl_namespace,
	push_decl_namespace, pop_decl_namespace): New functions.
	(arg_lookup): New struct.
	(add_function, arg_assoc_namespace, arg_assoc_class,
	arg_assoc_type, arg_assoc_args, arg_assoc, lookup_arg_dependent):
	New functions.
	(get_namespace_id, current_namespace_id): Remove.
	(do_toplevel_using_decl): Rewrite.
	(do_class_using_decl): Complain about namespace qualifiers.
	(do_using_directive): Sorry if not on namespace level.  Complain
	about unknown namespaces.
	* error.c (dump_aggr_type): Check for namespace contexts.
	* except.c (init_exception_processing): Push terminate into std.
	* friend.c (is_friend): A namespace is not a context, here.
	* init.c (expand_member_init): Remove DECL_CHAIN processing.
	(build_offset_ref): Process OVERLOAD nodes.
	* lang-specs.h (__HONOR_STD): Define if -fnew-abi or -fhonor-std.
	* lex.c (identifier_type): Loop using OVL_CHAIN.
	(see_typename): Set looking_for_typename to 2.
	(real_yylex): Likewise.
	(do_identifier): Expect OVERLOAD nodes instead of TREE_LISTs.
	(do_scoped_id): Expect OVERLOAD nodes.
	Change calling convention for qualified_lookup_using_namespace.
	(build_lang_decl): Don't set in_namespace anymore.
	* method.c (typevec_size): New global.
	(build_overload_nested_name): Return if global_namespace.
	Otherwise, always expect a declaration context.
	(build_qualified_name): Likewise.
	Make sure we don't write beyond typevec_size.
	(build_decl_overload_real): Likewise.
	Allocate one extra slot for the namespace.
	(hack_identifier): Mark code dead.
	* parse.y (program): Pop namespaces until in global namespace.
	(extdef): In a using-declaration, don't discard the identifier if
	there is no declaration.
	(left_curly): Ignore type contexts which are namespaces.
	(typename_sub2): Use IDENTIFIER_TYPE_VALUE to retrieve the type
	used as scope.
	* pt.c (template_class_depth): Expect types to be namespaces.
	(determine_specialization): Simplify by expecting OVERLOAD nodes.
	(push_template_decl): Push into namespace level.
	Reset ctx if it is a namespace.
	Set DECL_CONTEXT to current_namespace if not set already.
	Ignore real contexts that are namespaces.
	(mangle_class_name_for_template): Skip global_namespace.
	Mangle other namespaces as declarations.
	(lookup_template_function): Set type of OVERLOAD nodes to unknown.
	(lookup_template_class): Push into namespace of context.
	If the context is a namespace, set it to global_namespace.
	Use id_context for mangling.
	(for_each_template_parm): Handle OVERLOAD and NAMESPACE_DECL nodes.
	(tsubst_friend_function): Ignore namespace contexts.
	Push into namespace level.
	(tsubst): Handle NAMESPACE_DECL nodes.
	Remove DECL_CHAIN processing.
	(type_unification_real): Recognize OVERLOAD instead of TREE_LIST nodes.
	* ptree.c (print_lang_identifier): Print bindings.
	(lang_print_xnode): Print OVERLOAD nodes.
	* rtti.c (init_rtti_processing): Push type_info into std.
	* search.c (lookup_fnfields_here): Expect OVERLOAD nodes.
	(lookup_fnfields_1, get_virtuals_named_this, get_matching_virtual,
	dfs_debug_mark, dfs_pushdecls, dfs_compress_decls, add_conversions,
	lookup_fnfields_here): Likewise.
	Process all nodes, instead of going through TREE_CHAIN.
	* sig.c (build_signature_pointer_or_reference_type): Set context
	to global_namespace.
	(build_signature_table_constructor): Expect OVERLOAD nodes.
	* spew.c (yylex): Save old setting of looking_for_typename.
	* tree.c (decl_list_length): Remove.
	(binding_init): New function.
	(count_functions): Rewrite.
	(is_overloaded_fn): Expect OVERLOAD nodes.
	(really_overloaded_fn, get_first_fn, lvalue_type): Likewise.
	(ovl_cons, scratch_ovl_cons, build_overload, build_overload_after,
	ovl_member): New functions.
	* typeck.c (require_complete_type): Expect OVERLOAD nodes.
	(type_unknown_p): Likewise.
	(require_instantiated_type): Likewise.
	(build_component_ref): Declare code dead.
	(build_x_function_call): Create and expect OVERLOAD nodes.
	(build_function_call_real): Check for ::main only.
	(build_unary_op): Likewise.  Expect OVERLOAD nodes.
	(convert_for_assignment): Check for TREE_LIST before accessing
	* decl.c (duplicate_decls): Check for namespace bindings instead
	of global bindings.
	(pushdecl, push_overloaded_decl, lookup_tag, lookup_name_real,
	lookup_name_current_level, start_decl, xref_tag,
	finish_enum): Likewise.
	* init.c (build_offset_ref): Likewise.
	* search.c (lookup_field): Likewise.
	(lookup_fnfields): Likewise.
	(dfs_debug_mark): Likewise.
	* decl.c (poplevel): Use SET_IDENTIFIER_TYPE_VALUE.
	(poplevel_class, pop_from_top_level): Likewise.
	* decl2.c (finish_method): Likewise.
	* class.c (build_vtable): Use SET_IDENTIFIER_GLOBAL_VALUE.
	* decl.c (record_builtin_type): Likewise.
	(init_decl_processing, grokfndecl): Likewise.
	* lex.c (get_time_identifier, do_identifier, do_scoped_id): Likewise.
	(make_lang_type): Likewise.
	* parse.y (make_thunk): Likewise.
	* pt.c (tsubst): Likewise.
	* tree.c (debug_binfo): Likewise.
	*,,,,, tinfo.h,, inc/new.h: Add std qualifications.
	* inc/new: Wrap with namespace std if __HONOR_STD.
	* inc/typeinfo: Likewise.

Fri May  8 00:43:50 1998  Jason Merrill  <>

	* call.c (build_user_type_conversion_1): Handle second_conv
	properly for templates.

Thu May  7 17:09:25 1998  Andrew MacLeod  <>

	* method.c (build_decl_overload_real): Set TREE_USED flag to
	zero for build_type_variants nodes as well.

Wed May  6 19:27:09 1998  Jason Merrill  <>

	* pt.c (tsubst): Don't tsubst the type of an IDENTIFIER_NODE.

Wed May  6 16:49:48 1998  Jim Wilson  <>

	* (call.o, class.o, decl.o, decl2.o, errfn.o, error.o,
	except.o, expr.o, friend.o, init.o, lex.o, method.o, pt.o, repo.o,
	rtti.o, search.o, semantics.o, sig.o, tree.o, typeck.o, typeck2.o,
	xref.o): Add toplev.h dependencies.

Wed May  6 16:44:58 1998  Jeffrey A Law  (

	* errfn.c (cp_error, cp_warning): Remove declarations for
	error and warning respectively.

Wed May  6 14:28:18 1998  Kaveh R. Ghazi  <>

	* 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.

Wed May  6 06:36:41 1998  Robert Lipe  <>

	* call.c, class.c, decl.c, decl2.c, errfn.c, error.c, except.c,
	expr.c, friend.c, init.c, lex.c, method.c, pt.c, repo.c, rtti.c,
	search.c, semantics.c, sig.c, tree.c, typeck.c, typeck2.c,
	xref.c: Add include of toplev.h.

Wed May  6 02:33:39 1998  Jason Merrill  <>

	* tree.c (perm_manip): Also regenerate the RTL of an extern.
	(copy_to_permanent): Use end_temporary_allocation.

Tue May  5 23:54:04 1998  Jason Merrill  <>

	* init.c (expand_vec_init): The initialization of each array
	element is a full-expression.

Tue May  5 18:24:13 1998  Andrew MacLeod  <>

	* method.c (build_mangled_name): Add a call to build_type_variant
	to get the right type.

Tue May  5 01:25:03 1998  Jason Merrill  <>


	* cp-tree.def: Remove NAMESPACE_DECL.

Sun May  3 01:32:14 1998  Jason Merrill  <>

	* call.c (build_over_call): Do evaluate arg even if it has empty
	class type.
	* decl.c (start_function): Don't push a member function.

Thu Apr 30 18:59:23 1998  Jim Wilson  <>

	* ( Put -o option before input file.

Thu Apr 30 13:05:33 1998  Andrew MacLeod  <>

	* gxxint.texi: Add info for squangling codes K and B.

Tue Apr 28 13:22:01 1998  Mark Mitchell  <>

	* semantics.c (begin_stmt_expr): Avoid duplicating the effect of
	the expression in templates.
	(finish_stmt_expr): Likewise.

1998-04-28  Brendan Kehoe  <>

	* decl2.c (ambiguous_decl): Fix NAME parm to be a tree, not int.

Mon Apr 27 13:58:10 1998  Mark Mitchell  <>

	* decl.c (maybe_push_to_top_level): Always clear
	current_template_parms and processing_template_decl.
	(pushtag): Remove check of current_class_type and some comments,
	since maybe_push_to_top_level no longer creates confusion.

Sun Apr 26 12:10:18 1998  Mark Mitchell  <>

	* cp-tree.h (CLASSTYPE_IS_TEMPLATE): New macro.
	(push_template_decl_real): New function.
	(redeclare_class_template): Take new template parameters as
	(is_specialization_of): New function.
	(comp_template_args): Declare.
	* decl.c (pushtag): Handle friend template classes.
	(xref_tag): Likewise.  Use new calling convention for
	* decl2.c (grok_x_components): Handle friend templates.
	* friend.c (is_friend): Use is_specialization_of where
	appropriate.  Deal with friend class templates.
	(make_friend_class): Let a class template be friends with itself.
	* pt.c (comp_template_args): Remove declaration.
	(tsubst_friend_class): New function.
	(push_template_decl_real): New function.
	(push_template_decl): Use it.
	(redeclare_class_template): Adjust for new calling convention.
	(comp_template_args): Give it external linkage.
	(instantiate_class_type): Use tsubst_friend_class to deal
	with friend templates.
	* typeck.c (comptypes): Use comp_template_args, rather than
	expanding it inline.
	* parse.y (component_decl): Handle a nested template type
	like other component type declarations.

	* pt.c (check_explicit_specialization): Handle overloaded
	constructors correctly.

	* pt.c (mabybe_get_template_decl_from_type_decl): New function.
	(lookup_template_class): Use it.

Thu Apr 23 21:19:06 1998  Jason Merrill  <>

	* cp-tree.def: Add WRAPPER.  USER_CONV now only has two ops.
	* cp-tree.h: Add WRAPPER support.
	* call.c (add_candidate): Split out from add_*_candidate fns.
	(build_over_call): Take the candidate instead of function and args.
	Enforce access control here.  Emit overload warnings here.
	(add_warning): New fn.
	(joust): Add WARN parm.  If not set, call add_warning instead of
	printing a warning.  Re-enable some warnings.
	(tourney): Pass it.
	(convert_like): Adjust.
	(build_new_op): Adjust.
	(build_new_function_call): Adjust.
	(build_user_type_conversion_1): Adjust.
	(USER_CONV_FN): Adjust.
	* tree.c (build_expr_wrapper, build_expr_ptr_wrapper,
	build_int_wrapper): New fns.

Thu Apr 23 18:27:53 1998  Mark P. Mitchell  <>

	* pt.c (unify): Fix typo in previous change.

Thu Apr 23 09:32:58 1998  Jason Merrill  <>

	* error.c (dump_type_real): Declare canonical_name.

	* typeck.c (comp_target_types): Fix PMFs.

Wed Apr 22 13:24:48 1998  Mark Mitchell  <>

	* class.c (finish_struct): Set TREE_PRIVATE and TREE_PROTECTED for
	the DECL_RESULTs of a member TEMPLATE_DECL, not just the

	* pt.c (tsubst): Decrease the template-level of
	(template_decl_level): New function.
	(unify): Make sure to record unifications for template
	parameters, even when the parameters exactly match the arguments.
	Combine duplicated code for TEMPLATE_TEMPLATE_PARMs and
	TEMPLATE_TYPE_PARMS.  Don't try to unify template parameters that
	aren't from the level we're currently working on.

Tue Apr 21 22:00:04 1998  Mark Mitchell  <>

	* errfn.c (cp_thing): Use xrealloc, not xmalloc, to copy memory.

	* decl2.c (check_member_template): Set DECL_IGNORED for member
	class templates, too.

	* decl2.c (grokfield): Remangle the name of a member TYPE_DECL.

Tue Apr 21 18:59:11 1998  Benjamin Kosnik  <>

	* decl.c (duplicate_decls): Only check DECL_FRIEND_P if function.

Tue Apr 21 14:22:00 1998  Jeffrey A Law  (

	* cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Declare.
	* decl.c (intTI_type_node, unsigned_intTI_type_node): Define.
	(init_decl_processing): Handle TI types.
	* typeck.c (unsigned_type, signed_type): Handle TI types.

Sat Apr 18 15:25:21 1998  Jim Wilson  <>

	* g++spec.c (lang_specific_driver): New argument in_added_libraries.
	New local added_libraries.  Increment count when add library to

Fri Apr 17 21:25:00 1998  Mark Mitchell  <>

	* 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.

Fri Apr 17 14:30:45 1998  Jason Merrill  <>

	* decl2.c (lang_decode_option): -fnew-abi implies -fvtable-thunks.

	* typeck.c (comp_target_types): Tweak pedantic case.
	(comp_target_parms): Tweak pedantic case.  Clean up somewhat.
	Return -1 or 1 instead of 1 or 2.
	(compparms): Remove STRICT handling.
	(convert_for_assignment): Fix handling of pmfs.

Fri Apr 17 14:04:16 1998  Mark Mitchell  <>

	* typeck.c (comp_target_types): Handle references like pointers.
	(comp_target_parms): Note that return code from comp_target_types
	can be negative to indicate failure.

Fri Apr 17 09:10:52 1998  Andreas Schwab  <>

	* ( Don't depend on $(DEMANGLER_PROG),
	which requires a working target compiler to build.

Fri Apr 17 08:57:35 1998  Jeffrey A Law  (

	* tree.c (avoid_overlap): Add prototype.

	* spew.c (num_tokens): Add prototype.
	(nth_noken, add_token, consume_token, debug_yychar): Likewise.

	* search.c (dfs_check_overlap): Add prototype.
	(dfs_no_overlap_yet): Likewise.

	* pt.c (original_template): Add prototype.
	(inline_needs_template_parms): Likewise.
	(push_inline_template_parms_recursive): Likewise.
	(retrieve_specialization, register_specialization): Likewise.
	(print_candidates, reduce_template_parm_level): Likewise.
	(build_template_decl, mark_template_parm): Likewise.
	(tsubst_friend_function, get_bindings_real): Likewise.

	* method.c (start_squangling): Add prototype.
	(end_squangling, check_ktype, issue_ktype): Likewise.
	(build_overloaded_scope_ref, check_btype): Likewise.
	(build_mangled_template_parm_index): Likewise.

	* lex.c (init_cpp_parse): Add prototype.
	(handle_cp_pragma, handle_sysv_pragma): Likewise.
	(reduce_cmp, token_cmp): Likewise.

	* except.c (call_eh_info): Add prototype.
	(push_eh_info, get_eh_info, get_eh_value, get_eh_type): Likewise.
	(get_eh_caught, get_eh_handlers, do_pop_exception): Likewise.

	* decl2.c (is_namespace_ancestor): Add prototype.
	(namespace_ancestor, add_using_namespace): Likewise.
	(ambiguous_decl): Likewise.

	* decl.c (indent): Add prototype.

	* call.c (add_template_candidate_real): Add prototype.

Fri Apr 17 01:57:12 1998  Jason Merrill  <>

	* decl2.c (build_expr_from_tree): Just return a PMF.

Fri Apr 17 00:45:12 1998  Mark Mitchell  <>

	* typeck2.c (process_init_constructor): Don't strip cv-qualifiers
	when doing initializations.

	* pt.c (unify): Use comptypes to compare type args.

Fri Apr 17 00:24:22 1998  Jason Merrill  <>

	* decl.c (duplicate_decls): Fix check for when it's safe to free
	the new decl.

	* pt.c (mangle_class_name_for_template): Don't pass a typedef type
	to type_as_string.

Thu Apr 16 17:47:30 1998  Jeffrey A Law  (

	* pt.c (build_template_parm_index): Add prototype.

	* search.c (my_tree_cons): Don't clear words outside the
	newly allocated node.

Wed Apr 15 15:34:44 1998  Dave Brolley  <>

	* lex.c (init_parse): Now returns char* containing the filename.

Wed Apr 15 13:20:06 1998  John Carr  <>
			  Jeff Law   <>

	* errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
	than a pointer.

Sun Apr 12 22:31:19 1998  Richard Kenner  <>

	* cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.

Fri Apr 10 12:16:49 1998  Benjamin Kosnik  <>

	* decl.c (duplicate_decls): Don't warn for redundant decls if
	friend: let add_friend take care of it.

Thu Apr  9 02:40:48 1998  Jason Merrill  <>

	* sig.c (build_signature_pointer_constructor): Don't set
	TREE_HAS_CONSTRUCTOR for a signature pointer.
	* cvt.c (ocp_convert): Don't force a temporary for internal structs.
	* init.c (resolve_offset_ref): Warn about implicit & on pmfs
	here, too.
	* typeck.c (build_unary_op): Only allow taking the address of a
	real constructor.
	* typeck2.c (digest_init): Simplify.
	(store_init_value): Don't pedwarn about using { } for pmfs.

Thu Apr  9 22:16:57 1998  Per Bothner  <>

	* cp-tree.h (start_decl):  Update prototype.
	* decl.c (start_decl):  Like the C version, new parameters
	for the attributes.  Call cplus_decl_attributes here,
	(pushdecl):  Like C version, do build_type_copy if TYPE_DECL,
	(grokdeclarator):  Pass NULL for new start_decl arguments.
	* pt.c (tsubst_expr):  Likewise.
	* parse.y:  Merge cplus_decl_attribute calls into start_decl calls.
	* typeck.c (common_type): Check TYPE_MAIN_VARIANT.
	* lex.c (build_lang_decl): Add lang_name_java.
	* class.c (push_lang_context): Add lang_name_java.
	* method.c (build_mangled_name): Check for is_java_type.

Thu Apr  9 22:16:57 1998  Benjamin Kosnik  <>

	* decl.c (grokdeclarator): Check TYPE_MAIN_VARIANT.
	* call.c (build_scoped_method_call): Check for TREE_CODE for
	VOID_TYPE instead of type ==  void_type_node.
	(build_method_call): Likewise.
	* decl.c (lookup_name_real): Likewise.
	(grokdeclarator): Likewise.
	(start_decl): Likewise.
	(grokparms): Likewise.
	(start_function): Likewise.
	(finish_function): Likewise.
	(start_method): Likewise.

Thu Apr  9 00:18:44 1998  Dave Brolley  (

	* lex.c (finput): New variable.
	(init_cpp_parse):  Renamed from init_parse.
	(init_parse): Handle !USE_CPPLIB.  Call init_cpp_parse when finished.
	(finish_parse): New function.
	* cp-tree.h (init_lex, init_parse): Remove declarations.

Mon Apr  6 02:25:05 1998  Jason Merrill  <>

	* call.c (build_call): Still evaluate the actual argument.
	* class.c (is_empty_class): Update for -fnew-abi.

	* decl2.c: -fnew-abi implies -fsquangle.

	* method.c (do_build_assign_ref): Don't do anything to copy
	an empty class.
	(do_build_copy_constructor): Likewise.
	* call.c (build_over_call): Likewise.

Sat Apr  4 18:43:58 1998  Jason Merrill  <>

	* tree.c (avoid_overlap): Return a value.

Sat Apr  4 12:52:35 1998  Jeffrey A Law  (

	* method.c (check_btype): Add missing argument to xrealloc.
	(check_ktype): Likewise.

Fri Apr  3 02:22:59 1998  Jason Merrill  <>

	Implement empty base optimization.
	* class.c (finish_struct_1): Add vbase fields earlier.  Set
	CLASSTYPE_SIZE of an empty base to 0.  Types with bases can be empty.
	* search.c (dfs_check_overlap, dfs_no_overlap_yet): New fns.
	(types_overlap_p): New fn.
	* tree.c (avoid_overlap): New fn.
	(build_base_fields): Use it to avoid overlapping empty bases.
	* cp-tree.h, decl2.c, lang-options.h: Add -fnew-abi.

	* decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.

	Re-implement allocation of base class subobjects.
	* tree.c (unshare_base_binfos): New fn.
	(layout_basetypes): Use it.  Now handles offsets of both virtual and
	non-virtual bases, after layout_type.
	(layout_vbasetypes): Remove.
	(build_base_fields): Generate FIELD_DECLs for each non-virtual base.
	(build_vbase_pointer_fields): Split out from old layout_basetypes.
	* class.c (finish_base_struct): Lose offset handling code.
	Move nonvdtor warning here.  Don't mess with t_binfo anymore.
	(finish_struct_1): Don't mess with t_binfo anymore.  Use fns above.
	* cp-tree.h: Adjust.

Thu Apr  2 14:25:13 1998  Jason Merrill  <>

	* cp-tree.h: Lose CLASSTYPE_VBASE_SIZE, some unused stuff.
	* decl.c, decl2.c, pt.c, ptree.c, lex.c: Likewise.
	* class.c (duplicate_tag_error): Likewise.
	* tree.c (layout_vbasetypes): Update from layout_record, remove
	var_size support, use CLASSTYPE_SIZE instead of CLASSTYPE_VBASE_SIZE.
	(layout_basetypes): Likewise.

Wed Apr  1 18:22:25 1998  Jeffrey A Law  (

	* class.c, Make sure system.h is included just after config.h.
	Delete lingering stdio and errno references too.
	* decl.c, errfn.c, parse.y, ptree.c search.c, xref.c: Likewise.

Wed Apr  1 15:38:36 1998  Jason Merrill  <>

	* friend.c (is_friend): Fix access control for local classes.

	* class.c (is_empty_class): New fn.
	* call.c (build_call): Don't pass empty class objects to a function.

Wed Apr  1 14:58:35 1998  Mark Mitchell  <>

	* call.c (build_over_call): Do name resolution for default
	arguments of function templates in the scope of the templates.

Tue Mar 31 13:43:57 1998  Jeffrey A Law  (

	* 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.
	* Dependencies updated as appropriate.
	* Likewise.

Mon Mar 30 12:15:00 1998  Mark Mitchell  <>

	* pt.c (fn_type_unification): Allow incomplete unification without
	an immediate error message.

Mon Mar 30 08:55:42 1998  Jason Merrill  <>

	* tree.c (member_p): New fn.
	* decl2.c (finish_file): Only set DECL_STATIC_FUNCTION_P for
	initializing class members.

	* cp-tree.def (TEMPLATE_PARM_INDEX): Class 'x'.
	* ptree.c (lang_print_xnode): Handle TEMPLATE_PARM_INDEX.

	* call.c (build_method_call): Handle non-scoped destructors, too.
	* pt.c (tsubst_copy): Likewise.

	* pt.c (print_template_context): Split out...
	(push_tinst_level): ...from here.

	* friend.c (is_friend): Don't pass a type to decl_function_context.

	* typeck.c (convert_for_initialization): Always hand off
	conversions to class type.

Sun Mar 29 20:01:59 1998  Jason Merrill  <>

	* friend.c (is_friend): Local classes have the same access as the
	enclosing function.

Sun Mar 29 00:47:32 1998  Jeffrey A Law  (

	* typeck.c (expand_target_expr): Delete dead function.

	* search.c: Put various prototypes inside #ifdef MI_MATRIX.

	* repo.c (save_string): Delete dead function.

	* method.c (thunk_printable_name): Delete dead function.

	* lex.c (yynextch): Delete dead function.

	* expr.c (tree_extract_aggr_init): #if 0 out.

	* except.c (do_unwind): Delete dead function.
	(easy_expand_asm): Likewise.

	* cvt.c (build_conversion_type_1): Delete dead function.

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

	* call.c (source_type): #if 0 out.

	* class.c (alter_access): Remove unused label.  Add braces
	around empty else clause.

	* lex.c (yyprint): Fix argument to printf.

Sat Mar 28 17:43:52 1998  Mark Mitchell  <>

	* pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.

	* pt.c (instantiate_class_template): Make sure template
	arguments are permanent.
	* init.c (resolve_offset_ref): Don't go looking around in
	template types.

	* semantics.c: Add routines to handle expressions, and some
	declaration processing.
	* parse.y: Use them.
	(current_class_depth): Move declaration to cp-tree.h.
	* parse.c: Regenerated.
	* cp-tree.h: Use them.
	(current_class_depth): Declare.
	* pt.c (tsubst_copy): Use begin_stmt_expr and finish_stmt_expr.

Fri Mar 27 20:23:18 1998  Mark Mitchell  <>

	* error.c (dump_decl): Be a bit more explicit with template
	type arguments, when verbose.

Fri Mar 27 18:16:40 1998  Jason Merrill  <>

	* inc/exception: Reorder closing braces.

Fri Mar 27 13:22:18 1998  Mark Mitchell  <>

	* pt.c (redeclare_class_template): New function.
	* cp_tree.h (redeclare_class_template): Declare it.
	* decl.c (xref_tag): Use it.

Thu Mar 26 11:16:30 1998  Jason Merrill  <>

	* call.c (build_over_call): Check IS_AGGR_TYPE, not
	* typeck.c (convert_arguments): Likewise.

	* decl.c (grokdeclarator): Remove const and volatile from type after
	setting constp and volatilep.

	* class.c (finish_struct_1): Don't warn about bool bitfield larger
	than one bit.

Thu Mar 26 10:25:52 1998  Mark Mitchell  <>

	* pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.

Thu Mar 26 10:24:05 1998  Mark Mitchell  <>

	* call.c (build_object_call): Complain about ambiguous operator(),
	rather that crashing.
	(build_new_op): Likewise.
	(build_op_delete_call): Likewise.

Thu Mar 26 10:23:24 1998  Mark Mitchell  <>

	* cvt.c (perform_qualification_conversions): Use comp_target_types
	instead of comp_ptr_ttypes.

Wed Mar 25 16:10:50 1998  Mark Mitchell  <>

	* cp-tree.h (enforce_access): Declare.
	* call.c (enforce_access): Make it extern, not static.
	* class.c (alter_access): Use enforce_access; modify code for ISO
	compliance, rather than ARM rules.

Wed Mar 25 12:10:45 1998  Kriang Lerdsuwanakij  <>

	* cp-tree.h: Fix typo.

Wed Mar 25 02:01:02 1998  Jason Merrill  <>

	* expr.c (cplus_expand_expr): Only do PCC_STATIC_STRUCT_RETURN thing
	if (aggregate_value_p (type)).

	* decl2.c (constructor_name_full): Handle TYPENAME_TYPE.

Tue Mar 24 16:12:01 1998  Mark Mitchell  <>

	* tree.c (mapcar): When dealing with a DECL, use it's constant
	value, if any.
	* pt.c (lookup_template_class): Don't mangle the names of template
	classes whose arguments are unknown.

	* pt.c (tsubst_expr): Handle GOTO_STMT correctly.

Tue Mar 24 12:21:55 1998  Benjamin Kosnik  <>

	* decl.c (init_decl_processing): Set TYPE_PRECISON for bools to 1.

Tue Mar 24 12:21:48 1998  Jim Wilson  <>

	* decl.c (init_decl_processing): Initialize TYPE_MAX_VALUE for
	boolean_type_node to 1.

Tue Mar 24 10:23:47 1998  Mark Mitchell  <>

	* 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.

	* (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_qualified_name): Note that some template mangled names end
	with digits, and set numeric_output_need_bar appropriately.  Use
	* 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 expressions.

Mon Mar 23 12:24:37 1998  Jason Merrill  <>

	* pt.c (complete_template_args): Initialize skip properly.

	* decl.c (make_typename_type): Revert.
	(make_implicit_typename): Remove.
	(lookup_name_real): Don't call it.  Call lookup_field if we see a
	TYPE_DECL from a template base.
	* search.c (lookup_field): Do implicit typename stuff.

Sun Mar 22 00:50:42 1998  Nick Clifton  <>
			  Geoff Noer    <>

	* Various fixes for building cygwin32 native toolchains.
	* Likewise.

Fri Mar 20 18:07:39 1998  Kriang Lerdsuwanakij  <>

	* pt.c (tsubst, TEMPLATE_TEMPLATE_PARM): Simplify.

Fri Mar 20 10:42:07 1998  Jason Merrill  <>

	* decl.c (make_implicit_typename): Rewrite removed code.
	(make_typename_type): Call it if the type we look up comes from
	a base that uses template parms.

	* pt.c (complete_template_args): Rewrite.
	(tsubst, FUNCTION_DECL): Use it.

Fri Mar 20 08:12:43 1998  H.J. Lu  (

	* semantics.c (finish_asm_stmt): Fix combine strings.  Call
	c_expand_asm_operands () if output_operands, input_operands or
	clobbers is not NULL_TREE.

Fri Mar 20 00:10:19 1998  Kriang Lerdsuwanakij  <>

	* pt.c (complete_template_args): New function.
	(get_bindings): Deal with specializations of function templates
	with return type containing parameters from outer class
	(tsubst, TEMPLATE_TEMPLATE_PARM): When reducing parameter level,
	substitute arguments and compose a new type.

Thu Mar 19 19:01:48 1998  Mark Mitchell  <>

	* pt.c (tsubst): Clear DECL_PENDING_INLINE_INFO for new

Thu Mar 19 11:51:58 1998  Jason Merrill  <>

	* decl.c (make_implicit_typename): Lose useless code.

	* call.c (standard_conversion): Handle A* -> const A* properly.

	* pt.c (get_bindings_real): Rename from get_bindings.  Add
	check_rettype parm.
	(get_bindings): Pass 1.
	(get_bindings_overload): Pass 0.

Wed Mar 19 09:08:12 1998  Mark Mitchell  <>

	* pt.c (check_explicit_specialization): When reverting a static
	member function, also remove the `this' parameter from

Thu Mar 19 02:27:48 1998  Jason Merrill  <>

	* pt.c (tsubst_copy, CONST_DECL): Don't bother tsubsting
	a function context.

	* decl.c (store_bindings): Use free_binding_vecs.
	(pop_from_top_level): Likewise.

Wed Mar 18 12:41:43 1998  Jason Merrill  <>

	* decl.c (make_implicit_typename): Only change the type of a

Wed Mar 18 10:09:51 1998  Mark Mitchell  <>

	* semantics.c: New file, containing routines to perform the
	semantic phase of parsing.
	* parse.y: Use it.
	* pt.c (tsubst_expr): Likewise.
	* cp-tree.h: Declare the various functions in semantics.c.
	Provide macros to access _STMT tree nodes.
	* cp-tree.def: Add ASM_STMT tree node.
	*, Add dependencies on and for

Wed Mar 18 00:24:10 1998  Jason Merrill  <>

	* pt.c (push_template_decl): Only check primary templates.

	* pt.c (check_explicit_specialization): Complain about default args
	in explicit specialization.

	* parse.y (nomods_initdcl0): Also call cp_finish_decl for a

Tue Mar 17 14:44:54 1998  Mark Mitchell  <>

	* typeck2.c (build_x_arrow): Don't crash when an aggregate type
	has no overloaded operator ->.

	* call.c (build_field_call): Don't crash when presented with a
	field that is actually a nested type.

	* decl.c (pushtag): Deal with friend class injection in local

	* call.c (build_object_call): Don't crash if OBJ is a

Tue Mar 17 11:40:26 1998  Jason Merrill  <>

	* pt.c (push_template_decl): Complain about template with C linkage,
	anonymous template class.

Mon Mar 16 12:10:39 1998  Jason Merrill  <>

	* class.c (pushclass): Only use the mi_matrix stuff #ifdef MI_MATRIX.
	* search.c: Likewise.

	* lex.c (do_pending_defargs): Only call
	maybe_{begin,end}_member_template_processing for FUNCTION_DECLs.

	* parse.y (initdcl0_innards): Move maybeasm back into initdcl0 et al.

Mon Mar 16 10:47:22 1998  Mark Mitchell  <>

	* parse.y: Deal with CONSTRUCTORS in new_initializers.

Mon Mar 16 10:54:21 1998  Mark Mitchell  <>

	* pt.c (tsubst_copy): Deal with BIND_EXPR in a way that more
	closely mimics the behavior in parse.y.
	(tsubst_expr): Return the resulting BLOCK when making a tsubst'ing
	into a compound statement.

Sun Mar 15 02:07:26 1998  Jason Merrill  <>

	* cp-tree.h (TEMPLATE_PARMS_FOR_INLINE): New macro.
	* pt.c (inline_needs_template_parms): New fn.
	(original_template): New fn.
	(push_inline_template_parms_recursive): New fn.
	(maybe_begin_member_template_processing): Use them.
	(maybe_end_member_template_processing): Likewise.
	(is_member_or_friend_template): Rename to is_member_template.
	Member functions of local classes are never member templates.

Sun Mar 15 01:14:22 1998  Kriang Lerdsuwanakij  <>

	* lex.c (do_identifier): Handle TEMPLATE_DECL that was
	added in the class scope to catch redefinition error.

	* pt.c (reduce_template_parm_level): Also copy

Sun Mar 15 10:54:08 1998  Mark Mitchell  <>

	* pt.c (tsubst): Clear TYPE_REFERENCE_TO when creating a
	reduced-level template type parameter.

Sun Mar 15 12:26:02 1998  Manfred Hollstein  <>

	* cp-tree.h (struct lang_decl_flags): Add needs_final_overrider.
	* class.c (override_one_vtable): Set DECL_NEEDS_FINAL_OVERRIDER_P.
	* decl.c (duplicate_decls): Propagate it.
	* typeck2.c (abstract_virtuals_error): Use two loops to emit
	abstract virtual functions and virtual functions which need a
	final overrider separately.

Thu Mar 12 09:39:40 1998  Manfred Hollstein  <>

	* lang-specs.h: Properly put brackets around array elements in

	* typeck.c (build_binary_op_nodefault): Correctly place parens around
	&& and || in expression.

Thu Mar 12 09:26:04 1998  Manfred Hollstein  <>

	* call.c (default_parm_conversions): Remove prototype definition.
	(build_method_call): Remove unused variable result.

	* cvt.c (ocp_convert): Remove unused variable conversion.

	* decl2.c (ambiguous_decl): Add explicit parameter definition for name.

	* except.c (do_unwind): #if 0 definition of unused variables fcall
	and next_pc.

	* expr.c (extract_scalar_init): #if 0 prototype and function

	* init.c (expand_aggr_init_1): Remove unused variable init_type.
	(build_new_1): Remove unused variable t.

	* pt.c (instantiate_class_template): Remove unused variable newtag;
	cast called function return value to void.
	(do_decl_instantiation): Remove unused variables name and fn.

	* tree.c (get_type_decl): Add default return to shut up compiler from
	complaining control reaches end of non-void function.

	* typeck.c (build_x_conditional_expr): Remove unused variable rval.

Thu Mar 12 09:12:15 1998  Manfred Hollstein  <>

	* call.c (default_parm_conversions): Remove prototype definition.
	(build_method_call): Remove unused variable result.
	(build_over_call): Add default case in enumeration switch.

Thu Mar 12 08:39:13 1998  Manfred Hollstein  <>

	* decl2.c (lang_decode_option): Change j's type to size_t.

	* tree.c (layout_vbasetypes): record_align and desired_align are of
	type unsigned int; const_size and nonvirtual_const_size likewise.

Wed Mar 11 07:25:20 1998  Mark Mitchell  <>

	* parse.y (new_initializer): Make sure all initializers are

Tue Mar 10 07:32:36 1998  Mark Mitchell  <>

	* decl2.c (import_export_decl): Mark tinfo functions for
	cv-qualified versions of class types as DECL_NOT_REALLY_EXTERN.

Fri Mar  6 23:27:35 1998  Jeffrey A Law  (

	* method.c: Fix typo.

Fri Mar  6 10:06:59 1998  Kaveh R. Ghazi  <>

	* method.c: Include "system.h" to get stdlib.h, stdio.h,
	ctype.h, string.h, etc.
	(issue_nrepeats): Add default case in enumeration switch.
	(check_btype): Likewise.
	(process_overload_item): Likewise.

	* (method.o): Depend on system.h.

Wed Mar  4 22:26:53 1998  Andreas Schwab  <>

	* lex.c (do_scoped_id): Fix parenthesizing.

Wed Mar  4 12:11:53 1998  Michael Tiemann  <>

	* rtti.c (get_tinfo_fn_dynamic): If this function is called an
	FLAG_RTTI is unset, initialize type info machinery and continue
	with FLAG_RTTI enabled.
	(get_typeid): Likewise.

Wed Mar  4 11:47:55 1998  Jason Merrill  <>

	* typeck.c (unary_complex_lvalue): &D::i has type B::* if i comes
	from B.

Wed Mar  4 11:28:08 1998  Mark Mitchell  <>

	* pt.c (finish_member_template_decl): Deal more gracefully with
	invalid declarations.

Tue Mar  3 01:38:17 1998  Jason Merrill  <>

	* cvt.c, decl.c, decl2.c, init.c, rtti.c, typeck.c, typeck2.c,
	cp-tree.h: Clean up more old overloading code, old RTTI code, and
	some formatting quirks.

	* call.c, class.c, cp-tree.h, cvt.c, decl.c, init.c, lex.c,
	method.c, pt.c, ptree.c, typeck.c: Remove support for
	-fno-ansi-overloading and overloading METHOD_CALL_EXPR.
	* class.h: Remove.
	* Adjust.

	* pt.c (unify): Don't allow reduced cv-quals when strict.

	* call.c, class.c, pt.c, cp-tree.h: Remove nsubsts parm from
	*type_unification* and unify.

Mon Mar  2 12:11:06 1998  Jason Merrill  <>

	* parse.y (explicit_template_type): Remove TEMPLATE keyword.
	(nested_name_specifier): And add it before this use.
	(typename_sub0): And this use.  Also add use without the keyword.
	(typename_sub1): Likewise.
	* pt.c (instantiate_class_template): Don't actually instantiate
	anything if our type uses template parms.

Mon Mar  2 11:04:59 1998  Jim Wilson  <>

	* decl.c (start_function): Don't call temporary_allocation for a
	nested function.

Sun Mar  1 21:06:37 1998  Jason Merrill  <>

	* pt.c (instantiate_class_template): Don't mess with friends if
	our type uses template parms.

Sat Feb 28 12:06:44 1998  Jason Merrill  <>

	* parse.y (nested_name_specifier): Use explicit_template_type.
	(typename_sub): Allow a template_type, an explicit_template_type,
	or an implicit template type at the end.
	* lex.c (yyprint): Handle a PTYPENAME being a TEMPLATE_DECL.
	* decl.c (make_typename_type): Handle template-id where the name
	* call.c (build_scoped_method_call): Handle member template
	destructor call.
	* pt.c (tsubst_copy, METHOD_CALL_EXPR): Don't assume a member
	destructor is represented by the type.

	* cp-tree.h (TYPENAME_TYPE_FULLNAME): New macro.
	* parse.y (nested_name_specifier): Add 'template' case.
	(explicit_template_type): New rule.
	(typename_sub): Use it.
	* decl.c (make_typename_type): Handle getting a template-id for NAME.
	* pt.c (tsubst): Likewise.

Fri Feb 27 11:17:50 1998  Jason Merrill  <>

	* pt.c (add_to_template_args): Fix thinko.
	(instantiate_class_template): Call it later.

	* pt.c (get_class_bindings): Add outer_args parm.
	(most_specialized_class): Likewise.
	(instantiate_class_template): Pass it.
	(more_specialized_class): Likewise.
	(lookup_template_class): Get context from template if none
	was specified.
	(finish_member_template_decl): Don't do anything with a
	partial specialization.
	* decl2.c (check_member_template): Use IS_AGGR_TYPE instead of
	* class.c (finish_struct): Member class templates have already been
	checked for name clashes.
	* decl.c (pushdecl_with_scope): Handle pushing at class level.

Fri Feb 27 02:25:16 1998  Jason Merrill  <>

	* pt.c (tsubst, TEMPLATE_DECL): Support member class templates.
	(tsubst, *_PARM): Support multiple levels of template classes.
	(instantiate_class_template): Look up the pattern from the
	original template.
	(lookup_template_class): Handle getting a template for d1.
	(push_template_decl): Correct setting of 'primary'.
	(reduce_template_parm_level): Add 'levels' parm.
	(finish_member_template_decl): Support member class templates.
	(template_class_depth): Handle multiple levels.
	* parse.y (component_decl_1, fn.def2): Remove member template case.
	(component_decl): Add member template cases.
	* decl2.c (check_member_template): We now handle member template
	* decl.c (pushtag): Handle member templates.
	* method.c (do_inline_function_hair): Don't touch
	* init.c (build_offset_ref): If name isn't an identifier, just
	return it.
	* spew.c (yylex): Handle PTYPENAME like TYPENAME.

	* typeck.c (get_delta_difference): Do adjust for conversions to
	and from virtual base.

Wed Feb 25 09:51:29 1998  Jason Merrill  <>

	* typeck.c (get_delta_difference): Give hard error for conversion
	from virtual base.

	* cp-tree.h: Tweak formatting.

Wed Feb 25 00:35:33 1998  Jason Merrill  <>

	* decl.c (push_namespace): Handle redeclaration error.

	* cp-tree.h (IDENTIFIER_NAMESPACE_VALUE): New macro.
	* *.c: Use them.

	* pt.c (push_template_decl): Use innermost_args.

	* decl.c (get_unique_name): Tweak from earlier in the name.

Tue Feb 24 22:15:04 1998  Martin von Löwis  <>

	* cp-tree.def: Add CPLUS_BINDING node.
	* cp-tree.h (tree_binding): New struct.
	(current_namespace, global_namespace): Declare extern.
	(struct lang_decl_flags): New field in_namespace.
	* 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
	(do_scoped_id): Find global names in global or current
	namespace, or using qualified namespace lookup, depending on
	* 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.

Tue Feb 24 01:40:24 1998  Jason Merrill  <>

	* pt.c (instantiate_class_template): Don't instantiate if pedantic
	and the args use template parms.

	* pt.c (push_tinst_level): If the instantiation uses template parms,
	fail silently.
	* decl.c (xref_basetypes): Do call complete_type for basetypes
	that involve template parameters.

Tue Feb 24 00:36:43 1998  Jason Merrill  <>

	* typeck2.c (process_init_constructor): Fix labeled init check.

Mon Feb 23 05:08:55 1998  Jason Merrill  <>

	* pt.c, call.c, decl.c, method.c, cp-tree.h: Remove unused NARGS
	argument to tsubst and friends.

	* pt.c (tsubst, FUNCTION_DECL): Tidy.

	* 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.

Mon Feb 23 02:52:29 1998  Mark Mitchell  <>

	* (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.
	* 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
	(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
	* 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...
	(build_template_parm_index): New function.
	(reduce_template_parm_level): New function.
	(process_template_parm): Modify to use build_template_parm_index.
	(push_template_decl): Deal with friend templates.
	(uses_template_parms): Use TEMPLATE_PARM_INDEX instead of
	(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.
	appropriate new macros.  Use reduce_template_parm_level to
	generate lower-level template parameters.  Handle tsubst'ing into
	to tsubst the DECL_CONTEXT and DECL_CLASS_CONTEXT of newly created
	templates.  Similarly for the template parameters for a new
	(tsubst_copy): Tidy up slightly.  Use TEMPLATE_PARM_INDEX instead
	of TEMPLATE_CONST_PARM.  Handle TYPE_DECLs by tsubsting into them.
	(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 propagation to
	clarify the code.

Sun Feb 22 19:53:29 1998  Jeffrey A Law  (

	* error.c: Include sys/types.h.

Thu Feb 19 14:49:09 1998  Jeffrey A Law  (

	* method.c (build_mangled_name): Start CPP directives in column zero.

Thu Feb 19 10:36:48 1998  Jason Merrill  <>

	* typeck2.c (process_init_constructor): Sorry about non-trivial
	labeled initializers.
	* parse.y (initlist): Re-enable labeled initializers.

Thu Feb 19 10:15:55 1998  Kriang Lerdsuwanakij  <>

	* pt.c (coerce_template_parms): Add a new parameter, is_tmpl_parm,
	all callers changed.  Rely on the new parameter instead of arg
	being a TREE_LIST when determine whether we are working inside
	template template parameter.  Clean up is_type test.

Thu Feb 19 10:04:12 1998  Jason Merrill  <>

	* cvt.c (cp_convert_to_pointer): Preserve TREE_CONSTANT.
	* typeck2.c (initializer_constant_valid_p): Allow conversions
	between pointers and references.

1998-02-19  Brendan Kehoe  <>

	* typeck.c (build_unary_op): Only warn about incr/decr a pointer
	if pedantic || warn_pointer_arith.

Thu Feb 19 09:37:21 1998  Kriang Lerdsuwanakij  <>

	* pt.c (unify): Handle TEMPLATE_DECL.

1998-02-18  Brendan Kehoe  <>

	* cp-tree.h (strip_attrs): Remove decl.

1998-02-18  Doug Evans  <>

	* decl.c (duplicate_decls): Call merge_machine_decl_attributes.
	Update olddecl's attributes too.
	(strip_attrs): Remove function.
	* typeck.c (common_type): Call merge_machine_type_attributes.

Tue Feb 17 14:07:52 1998  Mark Mitchell  <>

	* parse.y (initdcl0_innards): New grammar symbol.
	(nomods_initdecls, nomods_initdcl0): Change type from itype to
	none, since the resulting value is never used.
	(parse_decl): New function.
	(datadef): Remove redundant actions.
	(initdcl0, notype_initdcl0, nomods_initdcl0): Use initdcl0_innards.
	* parse.c: Regenerated.

Tue Feb 17 11:54:16 1998  Jason Merrill  <>

	* parse.y (simple_stmt): Use getdecls() to check for decl.

Sat Feb 14 11:50:51 1998  Manfred Hollstein  <>

	(c++.install-common): Install c++filt properly as native or as cross
	(c++.uninstall): Add c++filt.

Fri Feb 13 14:55:37 1998  Jason Merrill  <>

	* call.c (standard_conversion): Fix multi-level ptr conversions.

Fri Feb 13 14:06:22 1998  Mike Stump  <>

	* init.c (build_new): Propagate error_mark_node up.

Fri Feb 13 13:24:32 1998  Jason Merrill  <>

	* parse.y (simple_stmt): If the condition isn't a declaration,
	start the controlled block after the test.

Fri Feb 13 02:26:10 1998  Andreas Schwab  <>

	* call.c (build_over_call): Convert builtin abs, labs and fabs to
	* decl.c (init_decl_processing): Re-enable abs, labs and fabs as

Fri Feb 13 01:36:42 1998  Jason Merrill  <>

	* call.c (standard_conversion): A BASE_CONV replaces an RVALUE_CONV.

Fri Feb 13 00:21:59 1998  Jason Merrill  <>

	* cp-tree.h: Add access_protected_virtual_node.
	* class.c (init_class_processing): Initialize it.
	* decl.c (xref_basetypes): Use it.
	* parse.y (base_class_access_list): Likewise.

	* (DEMANGLER_PROG): Add $(exeext).
	(c++.install-common): Install c++filt.

Thu Feb 12 12:46:51 1998  Benjamin Kosnik  <>

	* decl.c (shadow_tag): Give error for typedef-ing built-in types.

Wed Feb 11 23:28:05 1998  Mark Mitchell  <>

	* call.c (reference_binding): Use comptypes when comparing
	TYPE_MAIN_VARIANTS to handle non-canonical array/index types.

Wed Feb 11 16:42:04 1998  Mark Mitchell  <>

	* tree.c (is_overloaded_fn): Use really_overloaded_fn.
	(really_overloaded_fn): Move check here from is_overloaded_fn.
	(get_first_fn): Use really_overloaded_fn and is_overloaded_fn.

Wed Feb 11 15:54:18 1998  Mark Mitchell  <>

	* typeck.c (build_ptrmemfunc): Type-check pointer-to-member

Mon Feb  9 22:23:31 1998  Mark Mitchell  <>

	* cp-tree.h (push_template_decl): Return the decl passed in, or an
	equivalent duplicate.
	* decl.c (pushtag): Use the return value from push_template_decl.
	(duplicate_decls): When duplicating a template declaration, merge
	(make_implicit_typename): Don't try to dive into typename types to
	find a context for making a new implicit typename.
	(start_decl): Use the return value from push_template_decl.
	(grokdeclarator): Complain about declarations list `const operator
	int'.  Since we don't correctly handle in-class initializations of
	non-static data members, complain about this (now illegal)
	practice.  Issue an error for initializations of non-const statics
	since that is illegal as well, and since we don't handle that case
	correctly either.
	(start_function): Use the return value from push_template_decl.
	(start_method): Likewise.
	* decl2.c (grokfield): Likewise.  Since the change to
	grokdeclarator ensures that all initialized fields are in fact
	static, remove a redundant test for TREE_PUBLIC.
	* parse.y (initlist): Disable labeled initializers since they do
	not work as per the documentation, and since they do not use the
	same syntax as the C front end.
	* pt.c (push_template_decl): Return the decl passed in, or an
	equivalent duplicate.
	(lookup_template_class): When searching in a nested context,
	use the right arguments.
	(uses_template_parms): Handle the DECL_INITIAL for a CONST_DECL.
	* typeck.c (build_component_ref): Assign the correct type to the
	result of build_vfn_ref.

Tue Feb 10 23:56:46 1998  Jason Merrill  <>

	* pt.c (convert_nontype_argument): Fix typo.
	(check_explicit_specialization): Allow old-style specialization
	of class template members.

Tue Feb 10 20:36:52 1998  Jason Merrill  <>
			  Manfred Hollstein  <>

	* decl.c (grokdeclarator): Use DECL_USE_TEMPLATE instead
	when deciding to override DECL_ASSEMBLER_NAME.

Tue Feb 10 15:30:55 1998  Andrew MacLeod  <>

	* decl2.c (lang_f_options): Add -fsquangle to option processing list.
	* cp-tree.h (flag_do_squangling): Add declaration.
	* lang-options.h: Add -fsquangle and -fno-squangle.
	* method.c: Add macros and static variables for squangling.
	(build_overload_name): Rename to build_mangled_name, add logic for B
	compression, and split into process_modifiers and
	(process_modifiers): New function, to handle constant, reference,
	and pointer types.
	(process_overload_item): New function, handles issue of type codes.
	(build_overload_name): New function, start squangling and call
	(ALLOCATE_TYPEVEC, DEALLOCATE_TYPEVEC): Remove macro and expand inline.
	(start_squangling): New function to initialize squangling structs.
	(end_squangling): New function to destroy squangling structs.
	(nrepeats): Rename variable to Nrepeats.
	(issue_nrepeats): New function for issuing 'n' type repeats.
	(check_ktype): New function to check for type K name compression.
	(build_overload_nested_name): Add a check for K name compression.
	(build_qualified_name): Add a check for K name compression and don't
	use DECL_ASSEMBLER_NAME when squangling is on.
	(check_btype): New function, checks for B type compression.
	(build_static_name, build_decl_overload_real): Initiate squangling.
	(build_typename_overload, build_overload_with_type): Initiate

Sun Feb  8 23:47:38 1998  scott snyder  <>

	* method.c (make_thunk): Avoid name buffer overflow.

Sat Feb  7 16:48:54 1998  Jason Merrill  <>

	* pt.c (instantiate_decl): Call cp_finish_decl for vars even if we
	don't define them yet.

	* parse.y (nomods_initdcl0): Add constructor_declarator case.

Fri Feb  6 21:32:25 1998  Richard Kenner  <>

	* (diff_excludes): Use basename only.

Thu Feb  5 19:10:40 1998  Jason Merrill  <>

	* Add tinfo for signed char.

Thu Feb  5 14:38:23 1998  Mike Stump  <>

	* search.c (compute_access): Handle protected constructors in derived
	classes as accessible.

Wed Feb  4 01:26:49 1998  Jason Merrill  <>

	* expr.c (cplus_expand_expr, PCC_STATIC_STRUCT_RETURN code):
	Call convert_from_reference sooner.

Tue Feb  3 23:50:52 1998  Mark Mitchell  <>

	* cvt.c (ocp_convert): Obtain the constant values from constant
	decls even if the destination type is the same as the type of the

	* decl2.c (finish_file): Make sure that static inlines with
	definitions are not marked DECL_EXTERNAL before returning.

Tue Feb  3 22:43:42 1998  Jason Merrill  <>

	* decl.c: Lose arg_looking_for_template.
	(lookup_name_real): Likewise.
	* parse.y: Lose processing_template_arg, template_arg1.
	(primary): Likewise.
	* spew.c (yylex): Set lastiddecl for PTYPENAMEs, too.

Tue Feb  3 22:04:01 1998  Kriang Lerdsuwanakij  <>

	* 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

Tue Jan  6 01:42:44 1998  Mumit Khan  <>

	* lex.c (file_name_nondirectory): Also check for '/'.

Mon Feb  2 11:24:22 1998  Mark Mitchell  <>

	* parse.y (primary): Deal with statement-expressions in
	* pt.c (tsubst_copy): Handle BIND_EXPR.
	* tree.c (mapcar): Likewise.

	* call.c (add_template_candidate_real): Pass extra parameter to
	* cp-tree.h (fn_type_unification): Add parameter.
	* pt.c (fn_type_unification): Add additional parameter to deal with
	static member functions.
	(get_bindings): Deal with static member functions.

	* cp-tree.h (DECL_NONSTATIC_MEMBER_FUNCTION_P): New macro.
	(revert_static_member_fn): Declare.
	* decl.c (revert_static_member_fn): Remove declaration.  Change
	linkage from internal to external.
	(cp_finish_decl): Deal with virtual functions in classes local to
	template functions.
	* decl2.c (finish_file): Don't forget to emit increment/decrement
	expressions in initializers for file-scope variables.
	* parse.y (typename_sub2): If the typename doesn't names a
	template, rather than a type, issue an error message.
	* pt.c (check_explicit_specialization): Handle specializations of
	static member functions.
	(coerce_template_parms): Handle offset references to lists of
	member functions.
	* search.c (note_debug_info_needed): Don't crash when handed a
	type which is being defined.
	* typeck.c (complete_type): Don't crash when handed NULL_TREE;
	that can happen with some illegal code.

Mon Feb  2 00:57:38 1998  Kaveh R. Ghazi  <>

	* call.c (user_harshness): Initialize `code' to 0.
	(build_method_call): Initialize `candidates', `cp' and `len' to 0.
	(null_ptr_cst_p): Add parentheses around && within ||.
	(standard_conversion): Likewise.
	(z_candidate): Likewise.
	(build_user_type_conversion_1): Initialize `args' to NULL_TREE.
	(build_object_call): Likewise for `mem_args'.
	(build_new_op): Likewise for `mem_arglist'.  Add `return' from
	default case in enumeration switch.

	* class.c (build_vtable_entry): Add explicit braces to avoid
	ambiguous `else'.
	(build_class_init_list): Likewise.
	(finish_struct_1): Initialize `width' to 0.
	(instantiate_type): Initialize `name' to NULL_TREE.  Add
	explicit braces to avoid ambiguous `else'.

	* cvt.c (convert_to_aggr): Add explicit braces to avoid ambiguous

	* decl.c (grok_reference_init): Eliminate unused parameter, all
	callers changed.
	(record_builtin_type): Initialize `tdecl' to NULL_TREE.
	(init_decl_processing): Initialize `vb_off_identifier' to NULL_TREE.
	(cp_finish_decl): Initialize `ttype' to NULL_TREE.
	(grokdeclarator): Add parentheses around && within ||.  Add
	explicit braces to avoid ambiguous `else'.
	(grokparms): Initialize `type' to NULL_TREE.
	(xref_tag): Remove unused label `just_return'.
	(finish_enum): Initialize `minnode' and `maxnode' to NULL_TREE.
	(finish_function): Initialize `cond' and `thenclause' to NULL_TREE.
	(hack_incomplete_structures): Add parentheses around assignment
	used as truth value.

	* decl2.c (coerce_delete_type): Hide definition of `e3'.

	* error.c: Include <stdlib.h>.
	(dump_expr): Change the type of `i' to size_t.  Remove unused
	label `error'.

	* except.c (init_exception_processing): Remove unused variable `d'.
	(expand_throw): Likewise for `label'.

	* friend.c (add_friends): Add explicit braces to avoid ambiguous

	* init.c (sort_member_init): Initialize `last_field' to NULL_TREE.
	(sort_base_init): Likewise for `binfo'.
	(expand_member_init): Likewise for `rval'.
	(build_member_call): Add parentheses around assignment used as
	truth value.
	(build_offset_ref): Add explicit braces to avoid ambiguous `else'.
	(build_new): Initialize `nelts' to NULL_TREE.  Initialize
	`old_immediate_size_expand' to 0.
	(build_new_1): Initialize `nelts' and `alloc_node' to NULL_TREE.
	(build_vec_delete_1): Remove unused variable `block'.
	(expand_vec_init): Initialize `itype' to NULL_TREE.

	* lex.c: Include <strings.h> if we don't have <string.h>.  Protect
	declaration of `index' and `rindex' with autoconf macros.
	(reinit_parse_for_expr): Remove unused variables
	`look_for_semicolon' and `look_for_lbrac'.
	(cons_up_default_function): Initialize `args' to NULL_TREE.
	(readescape): Initialize `firstdig' to 0.
	(real_yylex): Add parentheses around assignment used as truth value.

	* method.c: Include <strings.h> if we don't have <string.h>.
	Protect declaration of `index' with autoconf macro.

	* parse.y (primary): Add explicit braces to avoid ambiguous `else'.
	Initialize `type' to NULL_TREE.
	(structsp): Remove unused variable `id'.

	* pt.c (coerce_template_parms): Add explicit braces to avoid
	ambiguous `else'.
	(lookup_template_class): Initialize `template' to NULL_TREE.
	(instantiate_class_template): Remove unused variable `name' and `e'.
	(tsubst): Likewise for `i'.  Initialize `last' to NULL_TREE.
	(do_poplevel): Initialize `saved_warn_unused' to 0.
	(type_unification): Remove unused varable `parm'.
	(unify): Likewise for `j'.

	* repo.c (init_repo): Add parentheses around assignment used as
	truth value.
	(finish_repo): Remove unused varable `p'.

	* search.c (get_binfo): Initialize `type' to NULL_TREE.
	(get_base_distance): Likewise.
	(lookup_field): Initialize `rval_binfo_h', `type', `basetype_path'
	and `new_v' to NULL_TREE.
	(lookup_fnfields): Likewise for `rval_binfo_h'.
	(breadth_first_search): Add parentheses around assignment used as
	truth value.
	(get_template_base): Initialize `type' to NULL_TREE.

	* sig.c (append_signature_fields): Initialize `last_mfptr' to
	(build_signature_table_constructor): Likewise for
	`last_rhs_field', `pfn' and `vt_off'.
	(build_sigtable): Likewise for `init'.

	* tree.c (break_out_calls): Initialize `t2' to NULL_TREE.
	(propagate_binfo_offsets): Likewise for `delta'.
	(hash_tree_cons): Initialize hashcode to 0.
	(can_free): Likewise for `size'.
	(cp_tree_equal): Add explicit braces to avoid ambiguous `else'.

	* typeck.c (convert_sequence): Hide prototype.
	(common_type): Add explicit braces to avoid ambiguous `else'.
	(comp_target_types): Likewise.
	(build_x_function_call): Initialize `ctypeptr' to NULL_TREE.
	(build_function_call_real): Add explicit braces to avoid ambiguous
	(convert_arguments): Initialize `called_thing' to 0.
	(convert_for_initialization): Initialize `savew' and `savee' to 0.

	* typeck2.c (incomplete_type_error): Initialize `errmsg' to 0.
	(digest_init): Initialize `old_tail_contents' to NULL_TREE.
	(build_x_arrow): Likewise for `last_rval'.

	* xref.c (GNU_xref_decl): Initialize `cls' to 0.

Sun Feb  1 12:45:34 1998  J"orn Rennecke  <>

	* decl.c (init_decl_processing): Use set_sizetype.
	* decl2.c (sizetype): Don't declare.
	* typeck.c (c_sizeof): Convert result of *_DIV_EXPR to sizetype.
	(c_sizeof_nowarn, build_binary_op_nodefault): Likewise.
	(build_component_addr, unary_complex_lvalue): Likewise.
	* rtti.c (expand_class_desc): Likewise.
	* class.c (get_vfield_offset): Likewise.

Thu Jan 29 10:39:30 1998  Mark Mitchell  <>

	* pt.c (convert_nontype_argument): Move check for is_overloaded_fn
	early to avoid bogus error.  Handle overloaded function
	names provided as template arguments correctly.
	(coerce_template_parms): Don't mishandle overloaded functions when
	dealing with template template parameters.
	(lookup_template_class): Issue an error message, rather than
	crashing, when the TYPE_DECL provided is not a template type.

Wed Jan 28 23:14:44 1998  Jason Merrill  <>

	* class.c (instantiate_type): Don't just return a known type if
	it's wrong.

Wed Jan 28 11:04:07 1998  Mark Mitchell  <>

	* 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.

	* cp-tree.h (grok_enum_decls): Remove type parameter.
	* decl.c (grok_enum_decls): Likewise.
	* decl2.c (grok_x_components): Call grok_enum_decls
	unconditionally, since it will do nothing if there is no
	current_local_enum.  Use the new calling sequence.
	* pt.c (tsubst_enum): Use the new calling sequence for

	* decl.c (start_function): Make member functions of local classes
	in extern inline functions have comdat linkage here...
	(grokdeclarator): Rather than here.

Wed Jan 28 10:55:47 1998  Jason Merrill  <>

	* pt.c (convert_nontype_argument): Use decl_constant_value.

Tue Jan 27 16:42:21 1998  Mark Mitchell  <>

	* 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.
	* 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.
	* 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
	(start_decl): Don't check flag_guiding_decls before pushing
	(cp_finish_decl): Remove previous (bogus) change.
	(grok_declarator): Use decl_function_context rather than
	* 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
	(push_template_decl): Avoid looking at CLASSTYPE fields in
	(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 explicit template arguments as a
	(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
	* typeck.c (build_component_ref): Check for invalid arguments.

Tue Jan 27 01:44:02 1998  Jason Merrill  <>

	* expr.c (cplus_expand_expr, AGGR_INIT_EXPR): Don't check that
	return_target and call_target are equivalent.

	* pt.c (type_unification_real): Just accept function parms that
	don't use any template parms.

Sun Jan 25 03:30:00 1998  Jason Merrill  <>

	* decl.c (cp_finish_decl): When bailing on a comdat variable, also

	* parse.y (typename_sub*): Fix std::.

Sat Jan 24 12:13:54 1998  Jason Merrill  <>

	* error.c (dump_decl): Fix type default template args.
	(dump_type): Hand TEMPLATE_DECL off to dump_decl.

Fri Jan 23 18:34:37 1998  Mumit Khan  <>

	* lex.c (DIR_SEPARATOR): Define to be '/' if not already defined.
	(file_name_nondirectory): Use.

Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  <>

	* pt.c (coerce_template_parms): Don't access elements of ARGLIST
	that are not really present.  Substitute default arguments in
	template template arguments.  Correctly convert TEMPLATE_DECL to
	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.
	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):
	* method.c (build_template_template_parm_names): New function.
	(build_template_parm_names): Handle TEMPLATE_DECL.
	(build_overload_nested_name, build_overload_name):
	* 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
	(current_template_args): Handle TEMPLATE_DECL.
	(tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
	* search.c (dfs_walk, dfs_record_inheritance):
	* tree.c (copy_template_template_parm): New function.
	* typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.

Mon Jan 19 22:40:03 1998  Mark Mitchell  <>

	* 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

	* 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 necessary.
	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
	(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
	(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
	(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
	(instantiate_template): Use retrieve_specialization.
	(do_decl_instantiation): Likewise.
	(instantiate_decl): Likewise.
	(type_unification): Improve handling of explicit template
	* tree.c (mapcar): Return error_mark_node, rather than aborting,
	* typeck.c (build_unary_op): Call determine_specialization, rather
	than determine_explicit_specialization.

Mon Jan 19 13:18:51 1998  Jason Merrill  <>

	* cvt.c (build_up_reference): A TARGET_EXPR has side effects.

Fri Jan 16 11:40:50 1998  Bruno Haible  <>

	* error.c (dump_decl): For enum tags, output the tag, not its value.

1998-01-13  Brendan Kehoe  <>

	* decl.c (init_decl_processing): Only call init_rtti_processing
	FLAG_RTTI is set.

Mon Jan 12 01:35:18 1998  Jason Merrill  <>

	* init.c (build_new_1): Split out from build_new.
	(build_new): Just return a NEW_EXPR.
	* expr.c (cplus_expand_expr): Handle NEW_EXPR.

	* decl2.c (get_temp_regvar): Tweak.

	* cp-tree.h (TREE_CALLS_NEW): Comment out.
	* class.c (resolves_to_fixed_type_p): Remove use.
	* method.c (build_opfncall): Likewise.
	* call.c (build_new_op): Likewise.

Wed Jan  7 23:47:13 1998  Jason Merrill  <>

	* (__eh_alloc, __eh_free): New fns.
	(__cp_push_exception, __cp_pop_exception): Use them.
	(__uncatch_exception): Call terminate here if no exception.
	* except.c (build_terminate_handler): New fn.
	(expand_start_catch_block): Use it.
	(expand_exception_blocks): Likewise.
	(alloc_eh_object): New fn.
	(expand_throw): Use it.  Protect exception init with terminate.
	* typeck.c (build_modify_expr): Remove code that ignores trivial

Copyright (C) 1998 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.