Mon Dec 22 11:36:27 1997  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* call.c (add_builtin_candidate): Add default case in enumeration
	switch.
	(build_new_op): Likewise.
	(convert_like): Likewise.
	* cvt.c (build_expr_type_conversion): Likewise.
	* tree.c (real_lvalue_p): Likewise.
	(lvalue_p): Likewise.
	(cp_tree_equal): Likewise.
	* typeck.c (comptypes): Likewise.
	(build_component_ref): Likewise.
	(build_function_call_real): Likewise.
	(build_binary_op_nodefault): Likewise.
	(build_unary_op): Likewise.
	(build_modify_expr): Likewise.
	* typeck2.c (initializer_constant_valid_p): Likewise.

Sun Dec 21 15:59:00 1997  Nick Clifton  <nickc@cygnus.com>

	* decl2.c (lang_decode_option): Add support for -Wunknown-pragmas.

Thu Dec 18 14:51:50 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (coerce_template_parms): Make sure to digest_init if
	possible.

	* decl.c (duplicate_decls): Make the newdecl virtual if the
	olddecl was, just as is done with other attributes of olddecl.

Thu Dec 18 14:43:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (unary_complex_lvalue): Ignore op0 when taking the
	address of an OFFSET_REF.

	* cp-tree.def: Add AGGR_INIT_EXPR.
	* error.c, tree.c, typeck.c: Replace uses of NEW_EXPR with
	AGGR_INIT_EXPR where appropriate.
	* expr.c (cplus_expand_expr): Likewise.  Simplify.

	* decl2.c (finish_file): Remove call to register_exception_table.

Wed Dec 17 17:08:52 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* pt.c (instantiate_class_template): Don't do injection when
	processing_template_decl is true, as pollutes current_binding_level
	for base classes.

Wed Dec 17 21:17:39 1997  Peter Schmid  <schmid@ltoi.iap.physik.tu-darmstadt.de>

	* pt.c (maybe_fold_nontype_arg): Add prototype.

Tue Dec 16 10:31:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (mapcar): Handle TRY_CATCH_EXPR et al.
	* error.c (dump_expr): Likewise.

Mon Dec 15 12:22:04 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_function_call_real): Remove "inline called before
	definition" pedwarn.

	* pt.c (coerce_template_parms): Use maybe_fold_nontype_arg.

Sun Dec 14 22:34:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert_to_pointer): Fix base conversion of pm's.

	* pt.c (type_unification_real): Change __null to type void* with
	a warning.

Sun Dec 14 20:38:35 1997  Mark Mitchell  <mmitchell@usa.net>

	* call.c (implicit_conversion): Don't call
	build_user_type_conversion_1 with a NULL expr, since it will
	crash.

	* pt.c (unify): Don't try to unify array bounds if either array is
	unbounded.

Fri Dec 12 16:09:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* errfn.c (cp_pedwarn, cp_pedwarn_at, cp_error_at, cp_warning_at):
	Replace extern decls with casts.

	* decl.c (expand_start_early_try_stmts): Don't mess with a sequence.
	Update last_parm_cleanup_insn.
	(store_after_parms): Remove.
	* cp-tree.h: Adjust.

Thu Dec 11 22:18:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (comdat_linkage): Also set DECL_COMDAT.
	(finish_file): Check DECL_COMDAT instead of weak|one_only.
	(import_export_vtable): Use make_decl_one_only instead of
	comdat_linkage for win32 tweak.
	(import_export_decl): Likewise.
	* pt.c (mark_decl_instantiated): Likewise.

	* decl2.c (finish_file): Lose handling of templates in pending_statics.

Thu Dec 11 21:12:09 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Lose call to expand_builtin_throw.
	* except.c (expand_builtin_throw): Remove.
	* cp-tree.h: Remove ptr_ptr_type_node.
	* decl.c: Likewise.

Thu Dec 11 20:43:33 1997  Teemu Torma  <tot@trema.com>

	* decl.c (ptr_ptr_type_node): Define.
	(init_decl_processing): Initialize it.
	* cp-tree.h: Declare it.
	* exception.cc (__cp_exception_info): Use __get_eh_info.
	(__cp_push_exception): Likewise.
	(__cp_pop_exception): Likewise.

	From Scott Snyder <snyder@d0sgif.fnal.gov>:
	* except.c (expand_builtin_throw): Use get_saved_pc_ref instead of
	saved_pc.
	(init_exception_processing): Removed saved_pc initialization.

Wed Dec 10 11:04:45 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): Defer all templates but inline functions.

Mon Dec  8 23:17:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (expand_vec_init): Don't fold a list of parameters.

	* decl.c (copy_args_p): Handle copy elision for types with virtual
	bases.
	* call.c (build_over_call): Likewise.

Sun Dec  7 22:38:12 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (lookup_template_function): Copy the template arguments,
	not just the list containing them, to the permanent obstack.

Sun Dec  7 15:53:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_start_catch_block): suspend_momentary for the
	terminate handler.

	* error.c (dump_decl): Handle LOOKUP_EXPR.

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

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

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

Sun Dec  7 01:46:33 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* typeck.c (build_binary_op_nodefault, pointer_diff): Symmetric
	handling of pointer difference expressions.

	* typeck.c (comp_target_types): Comparison of function/method types
	is independent of nptrs.

Sun Dec  7 01:40:27 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (tsubst): Avoid creating pointer to reference and
	reference to reference types.

Sat Dec  6 01:29:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (do_id): New nonterminal.
	(template_id): Use it.

Fri Dec  5 01:17:34 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (template_id): do_identifier for PFUNCNAMEs, too.
	* spew.c (yylex): Don't do_identifier here.
	* decl2.c (build_expr_from_tree): Revert last change.

	* decl2.c (build_expr_from_tree): Expand the name for a method call.
	* parse.y (object_template_id): Don't try to take the DECL_NAME.

Wed Dec  3 20:02:39 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Use a TARGET_EXPR instead of SAVE_EXPR for
	alloc_expr.
	* call.c (build_op_delete_call): Adjust.

	* except.c (expand_end_catch_block): Lose rethrow region.
	(expand_start_catch_block): Likewise.
	(expand_end_catch_block): Don't expand_leftover_cleanups.

Wed Dec  3 13:24:04 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* pt.c (tsubst): Remove tree_cons call (places redundant info into
	DECL_TEMPLATE_INSTANTIATION).

Wed Dec  3 11:44:52 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (is_overloaded_fn): Handle getting a fn template.
	(really_overloaded_fn): Likewise.
	* error.c (dump_decl): Handle TEMPLATE_ID_EXPRs better.
	* pt.c (check_explicit_specialization): Tweak.
	(determine_explicit_specialization): Tweak.

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

Wed Dec  3 08:47:27 1997  Paul Eggert  <eggert@twinsun.com>

	* pt.c (check_explicit_specialization): Fix misspelling in
	diagnostic: `preceeded'.
	* typeck.c (get_delta_difference): Fix misspelling in diagnostic:
	`conversiona'.

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

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

	* method.c (build_overload_value): Handle SCOPE_REF.

Tue Dec  2 19:18:50 1997  Mike Stump  <mrs@wrs.com>

	* class.c (prepare_fresh_vtable): Enable even more complex MI
	vtable names.

Tue Dec  2 01:37:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* exception.cc (__check_eh_spec): Optimize a bit.

	* exception.cc (__cp_pop_exception): Lose handler arg.
	* except.c (do_pop_exception): Likewise.
	(push_eh_cleanup): Let the cleanup mechanism supply the handler.
	(expand_end_catch_block): Likewise.

Fri Nov 28 01:58:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (check_explicit_specialization): Complain about using a
	template-id for a non-specialization.

Fri Nov 28 12:35:19 1997  Scott Christley  <scottc@net-community.com>

	* repo.c: Prototype rindex only if needed.
	* xref.c: Likewise.

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

	* error.c (dump_decl): Handle TEMPLATE_ID_EXPR.

Thu Nov 27 00:59:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_const_cast): Handle references here instead of
	handing off to convert_to_reference.

	* except.c: Lose Unexpected, SetTerminate, SetUnexpected,
	TerminateFunctionCall.
	(init_exception_processing): Likewise.  Terminate et al are now
	the fns, not ADDR_EXPRs.
	(various): Lose redundant assemble_external calls.
	(do_unwind): s/BuiltinReturnAddress/builtin_return_address_fndecl/.

	* cp-tree.h (struct lang_decl_flags): Add comdat.
	(DECL_COMDAT): New macro.
	* decl.c (duplicate_decls): Propagate it.
	(cp_finish_decl): Handle it.
	* decl2.c (import_export_decl): Just set DECL_COMDAT on VAR_DECLs.

	* class.c: Remove static pending_hard_virtuals.
	(add_virtual_function): Take pointers to pending_virtuals
	and pending_hard_virtuals.
	(finish_struct_1): Pass them.  Declare pending_hard_virtuals.

Wed Nov 26 20:28:49 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (import_export_vtable): If we support one_only but not
	weak symbols, mark instantiated template vtables one_only.
	(import_export_decl): Likewise for tinfo functions.
	(finish_vtable_vardecl): Also write out vtables from explicitly
	instantiated template classes.
	* pt.c (mark_class_instantiated): Revert last change.

	* except.c (expand_throw): Call mark_used on the destructor.

Wed Nov 26 15:13:48 1997  Jeffrey A Law  (law@cygnus.com)

	* lex.c (lang_init): Enable flag_exceptions by default if no
	command line switch was specified.

1997-11-26  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (unify): Handle `void' template parameters in
	specializations.

Wed Nov 26 01:11:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (build_dynamic_cast): Handle template case here.
	(build_dynamic_cast_1): Not here.

	* typeck2.c (digest_init): Make copies where appropriate.

	* decl2.c (delete_sanity): resolve_offset_ref.

	* except.c: Call terminate without caching so many bits.

	* except.c (expand_start_catch_block): Fix catching a reference
	to pointer.

Tue Nov 25 11:28:21 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Copy size to the saveable obstack.

	* init.c (build_new): Stick a CLEANUP_POINT_EXPR inside the
	TRY_CATCH_EXPR for now.

Mon Nov 24 12:15:55 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (mark_addressable): Don't assume a FUNCTION_DECL
	has DECL_LANG_SPECIFIC.

	* exception.cc (struct cp_eh_info): Add handlers field.
	(__cp_push_exception): Initialize it.
	(__cp_pop_exception): Decrement it.  Don't pop unless it's 0.
	(__throw_bad_exception): Remove.
	* except.c (call_eh_info): Add handlers field.
	(get_eh_handlers): New fn.
	(push_eh_cleanup): Increment handlers.

Fri Nov 21 12:22:07 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_start_eh_spec): Use the try/catch code.
	(expand_end_eh_spec): Likewise.  Call __check_eh_spec instead of
	doing everything inline.
	(init_exception_processing): throw_type_match now takes
	const void pointers.
	* exception.cc (__check_eh_spec): New fn.
	* inc/exception: Neither terminate nor unexpected return.
	* decl.c: Make const_ptr_type_node public.
	* tinfo2.cc (__throw_type_match_rtti): Take the typeinfos constly.

	* except.c (expand_start_catch_block): We only need the rethrow
	region for non-sjlj exceptions.
	(expand_end_catch_block): Likewise.  Use outer_context_label_stack.

Thu Nov 20 14:40:17 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Make-lang.in (CXX_LIB2FUNCS): Add new op new and op delete objs.
	(various.o): Likewise.
	* inc/new: Add placement deletes.  Add throw specs for default new.
	* new.cc (set_new_handler): Move here from libgcc2.
	* new1.cc (new (nothrow)): Catch a bad_alloc thrown from the handler.
	(new): Move from libgcc2.  Throw bad_alloc.
	* new2.cc: Move the rest of the op news and op deletes from libgcc2.
	* decl.c (init_decl_processing): Update exception specs on new and
	delete.

	* method.c (build_decl_overload_real): Don't mess with global
	placement delete.

	* init.c (build_new): Check for null throw spec, not nothrow_t.

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

	* call.c (build_op_delete_call): Fix check for member fns again.

	* decl2.c (import_export_decl): Interface hackery affects
	virtual synthesized methods.

Wed Nov 19 18:24:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (start_decl): Don't just complain about a mismatched
	scope, fix it.

	* decl.c (make_implicit_typename): Handle case where t is not
	actually from context.
	* tree.c (get_type_decl): Lose identifier case.
	* spew.c (yylex): Lose useless call to identifier_typedecl_value.
	* parse.y (nonnested_type): Just use lookup_name.
	(complex_type_name): Just use IDENTIFIER_GLOBAL_VALUE.

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

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

Wed Nov 19 10:39:27 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (make_implicit_typename): New fn.
	(lookup_name_real): Use it.  Use current_class_type as the context.

Mon Nov 17 23:42:03 1997  Bruno Haible  <haible@ilog.fr>

	* pt.c (do_poplevel): Don't prohibit jumps into this contour.

Mon Nov 17 02:01:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* friend.c (do_friend): Warn about non-template friends in templates.

	* call.c (build_op_delete_call): Fix handling of inherited delete.

	* search.c (dfs_record_inheritance): Ignore template type parms.

Sat Nov 15 00:30:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_op): Fix copy error.
	(build_op_new_call): New fn.
	(build_op_delete_call): New fn.
	* cp-tree.h: Declare them.
	* init.c (build_new): Use them.  Support placement delete.
	(build_x_delete): Use build_op_delete_call.
	(build_delete): Likewise.
	* decl2.c (delete_sanity): Likewise.
	(coerce_delete_type): Don't complain about placement delete.

Thu Nov 13 01:52:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_function_call): Remove unused 'obj' parm.
	* cp-tree.h, typeck.c: Adjust.

	* init.c (build_new): Make the cleanup last longer.
	(expand_vec_init): Call do_pending_stack_adjust.

Wed Nov 12 11:04:33 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (do_type_instantiation): Fix typo.
	(mark_class_instantiated): If we support one_only but not weak
	symbols, don't mark this as known.

	* init.c (build_new): Handle vec delete in EH cleanup.

Wed Nov 12 08:11:55 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* call.c (build_method_call): Call complete_type before checking
	for destructor.

Sun Nov  9 01:29:55 1997  Jim Wilson  (wilson@cygnus.com)

	* decl.c (add_block_current_level): Delete.
	* init.c (build_vec_delete_1): Delete build_block and
	add_block_current_level calls.

Wed Nov 12 00:48:16 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Handle freeing allocated memory when the
	constructor throws.

	* call.c (build_new_method_call): Fix flags arg.

	* pt.c (do_type_instantiation): Don't try to instantiate
	member templates.
	(mark_decl_instantiated): If we support one_only but not
	weak symbols, mark this one_only.
	* decl2.c (import_export_vtable): Don't defer handling of vtables
	if MULTIPLE_SYMBOL_SPACES.

Tue Nov 11 12:02:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_end_catch_block): Lose call to __sjpopnthrow.

Tue Nov 11 02:53:44 1997  Jason Merrill  <jason@lasher.cygnus.com>

	* except.c (do_pop_exception): Return a value.

Mon Nov 10 20:25:31 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_method_call): Handle getting a
	TEMPLATE_ID_EXPR around a TEMPLATE_DECL.  Don't look for a field
	if we got template parms.
	* typeck.c (build_x_function_call): Remember the TEMPLATE_ID_EXPR,
	not just the args.
	* decl2.c (build_expr_from_tree): Tweak last change.
	* pt.c (tsubst_copy): Use get_first_fn instead of TREE_VALUE.
	(maybe_fold_nontype_arg): Split out from tsubst_copy.
	* tree.c (get_first_fn): Just return a TEMPLATE_ID_EXPR.

Mon Nov 10 20:08:38 1997  Kriang Lerdsuwanakij  <lerdsuwa@scf-fs.usc.edu>

	* pt.c (tsubst_copy): Handle explicit template arguments in
	function calls.
	* typeck.c (build_x_function_call): Likewise.
	* decl2.c (build_expr_from_tree): Lookup function name if it
	hasn't been done.

	* pt.c (tsubst): Instantiate template functions properly when
	template parameter does not appear in function arguments and return
	type.
	(comp_template_args): Handle member templates required by tsubst.

Mon Nov 10 20:08:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): Tweak conditions for pedwarn in
	previous change.

Mon Nov 10 20:08:29 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* pt.c (coerce_template_parms): Tweak error message.

	* decl.c (grokdeclarator): If -Wreturn-type, warn everytime a
	return type defaults to `int', even if there are storage-class
	specifiers.

Mon Nov 10 03:04:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Complete nested exception support.
	* except.c (do_pop_exception): Split out...
	(push_eh_cleanup): From here.  Handle the EH region by hand.
	(expand_start_catch_block): Add a new level for the catch parm.
	Move the rethrow region outside the two cleanup regions.
	Protect the initializer for the catch parm with terminate.
	(expand_end_catch_block): Likewise.  End the region for the eh_cleanup.
	* exception.cc (__cp_pop_exception): Now takes two parms.  Handle
	popping off the middle of the stack.
	* tree.c (lvalue_p, real_lvalue_p): Handle TRY_CATCH_EXPR,
	WITH_CLEANUP_EXPR, and UNSAVE_EXPR.
	(build_cplus_new): Only wrap CALL_EXPRs.
	* init.c (expand_default_init): Handle a TRY_CATCH_EXPR around
	the constructor call.

Sun Nov  9 18:00:26 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Make-lang.in (c++.distdir): Make inc subdirectory.

Fri Nov  7 11:57:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Put back some code.

Thu Nov  6 11:28:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Remove redundant code.
	* method.c (emit_thunk): Don't let the backend defer generic thunks.

Wed Nov  5 23:52:50 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (call_eh_info): Split out...
	(push_eh_info): From here.
	(expand_builtin_throw): Use it.
	(expand_start_catch_block): Move region start back.

Tue Nov  4 13:45:10 1997  Doug Evans  <devans@canuck.cygnus.com>

	* lex.c (MULTIBYTE_CHARS): #undef if cross compiling.
	(real_yylex): Record wide strings using target endianness, not host.

1997-11-03  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* repo.c (rindex): Add decl unconditionally.
	(get_base_filename, open_repo_file): Don't cast rindex.
	* xref.c (rindex): Add decl unconditionally.
	(index): Remove unused decl.
	(open_xref_file): Don't cast rindex.

Sun Nov  2 15:04:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (build_vbase_path): Propagate the result type properly.

1997-11-01  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c (expand_builtin_throw) [!DWARF2_UNWIND_INFO]: Replace
	remaining use of saved_throw_type with a call to get_eh_type.

1997-10-31  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (FILE_NAME_NONDIRECTORY): Delete macro.
	(file_name_nondirectory): New function, doing the same as the macro.
	(set_typedecl_interface_info): Use it instead of the macro.
	(check_newline): Likewise.
	(handle_cp_pragma): Likewise.

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

	* except.c (push_eh_info): Pass the number of fields - 1 down, not
	the exact number of fields.

Fri Oct 31 01:47:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Support for nested exceptions.
	* tinfo2.cc (__is_pointer): New fn.
	* exception.cc (struct cp_eh_info): Define.
	(__cp_exception_info, __uncatch_exception): New fns.
	(__cp_push_exception, __cp_pop_exception): New fns.
	* except.c: Lose saved_throw_{type,value,cleanup,in_catch}.
	Lose empty_fndecl.
	(init_exception_processing): Likewise.  __eh_pc is now external.
	(push_eh_info): New fn.
	(get_eh_{info,value,type,caught}): New fns.
	(push_eh_cleanup): Just call __cp_pop_exception.
	(expand_start_catch_block): Use push_eh_info.  Start the eh region
	sooner.
	(expand_end_eh_spec): Use push_eh_info.
	(expand_throw): Call __cp_push_exception to set up the exception info.
	Just pass the destructor or 0 as the cleanup.  Call __uncatch_exception
	when we rethrow.
	(expand_builtin_throw): Don't refer to empty_fndecl.

Thu Oct 23 02:01:30 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): SET_DECL_IMPLICIT_INSTANTIATION on new decl.

1997-10-22  Brendan Kehoe  <brendan@cygnus.com>

	* method.c (build_template_parm_names, build_decl_overload_real):
	Add static to definitions.
	* pt.c (add_to_template_args, note_template_header,
	processing_explicit_specialization, type_unification_real): Likewise.
	({determine,check}_explicit_specialization): Use a single string for
	error messages.

Mon Oct 20 12:06:34 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_exception_blocks): Call do_pending_stack_adjust.
	(expand_end_catch_block): Likewise.
	(expand_end_eh_spec): Likewise.

Mon Oct 20 11:44:20 1997  Mark Mitchell  <mmitchell@usa.net>

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

Mon Oct 20 10:52:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (init_decl_processing): Give null_node unknown* type.
	* typeck.c (comp_target_types): Handle UNKNOWN_TYPE.
	(common_type): Likewise.
	* error.c (args_as_string): Recognize null_node.

Sun Oct 19 09:13:01 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* typeck.c (rationalize_conditional_expr): Handle {MIN,MAX}_EXPR.
	(unary_complex_lvalue): Call it for {MIN,MAX}_EXPR.

	* decl.c (init_decl_processing): Call using_eh_for_cleanups.

	* Make-lang.in (g++): Include prefix.o.

Thu Oct 16 15:31:09 1997  Judy Goldberg  <judygold@sanwafp.com>

	* pt.c (determine_explicit_specialization): Initialize "dummy"
	to keep Purify quiet.

Thu Oct 16 00:14:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (build_overload_value): Handle TEMPLATE_CONST_PARMs here.
	(build_overload_int): Not here.

Wed Oct 15 00:35:28 1997  Mike Stump  <mrs@wrs.com>

	* class.c (build_type_pathname): Remove.
	(prepare_fresh_vtable): Fix problem with complex MI vtable names.

1997-10-14  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (unary_expr): Give a pedwarn if someone tries to use the
	&&label GNU extension.

Tue Oct 14 12:01:00 1997  Mark Mitchell  <mmitchell@usa.net>

	* decl.c (pushtag): Unset DECL_ASSEMBLER_NAME before setting it,
	so as to avoid incorrect manglings.
	* method.c (build_decl_overload_real): Don't mangle return types
	for constructors.

Tue Oct 14 11:46:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h (scratchalloc, build_scratch_list, make_scratch_vec,
	scratch_tree_cons): Define as macros for now.
	* call.c, class.c, cvt.c, decl.c, decl2.c, except.c, expr.c, init.c,
	lex.c, method.c, parse.y, pt.c, rtti.c, search.c, tree.c, typeck.c,
	typeck2.c: Use them and the expression_obstack variants.

Mon Oct 13 17:41:26 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* decl.c (store_return_init): Allow classes with explicit ctors to
	be used with the named return values extension.

Fri Oct 10 12:21:11 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): Fix previous change.

Thu Oct  9 12:08:21 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst): Fix thinko.
	(instantiate_decl): Really use the original template.

	* call.c (build_new_method_call): Use simple constructor_name for
	error messages.

Wed Oct  8 22:44:42 1997  Jeffrey A Law  <law@cygnus.com>

	* method.c (build_underscore_int): Don't use ANSI specific
	features.

Wed Oct  8 00:18:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_prevtable_vardecl): Check DECL_REALLY_EXTERN
	for our key method; it might have been inlined by -O3.

Tue Oct  7 23:00:12 1997  Mark Mitchell  <mmitchell@usa.net>

	* decl.c (make_typename_type): Do not try to call lookup_field for
	non-aggregate types.

Tue Oct  7 22:52:10 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_reinterpret_cast): Tweak.

Tue Oct  7 22:45:31 1997  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* typeck.c (build_reinterpret_cast): Converting a void pointer
	to function pointer with a reinterpret_cast produces a warning
	if -pedantic is issued.

Tue Oct  7 22:43:43 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* typeck.c (c_expand_return): Don't warn about returning a
	reference-type variable as a reference.

Tue Oct  7 21:11:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (build_static_name): Fix typo.

1997-10-07  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (duplicate_decls): Make sure DECL_LANG_SPECIFIC is set on
	OLDDECL before we try to do DECL_USE_TEMPLATE.

Tue Oct  7 00:48:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (duplicate_decls): Don't warn about template instances.

	* typeck.c (mark_addressable): Lose ancient code that unsets
	DECL_EXTERNAL.

	* pt.c (do_decl_instantiation): Lose support for instantiating
	non-templates.

	* call.c (build_new_function_call): Fix handling of null explicit
	template args.
	(build_new_method_call): Likewise.

Mon Oct  6 23:44:34 1997  Mark Mitchell  <mmitchell@usa.net>

	* method.c (build_underscore_int): Fix typo.

1997-10-06  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* tree.c (print_lang_statistics): #if 0 call to
	print_inline_obstack_statistics until its definition is checked in.

Mon Oct  6 09:27:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Move dump_tree_statistics to end.

	* pt.c (instantiate_decl): Look for the original template.
	(tsubst): Set DECL_IMPLICIT_INSTANTIATION on partial instantiations
	of member templates.

Wed Oct  1 08:41:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (g++FAQ.*): New rules.
	(CONFLICTS): Update.
	* g++FAQ.texi: Moved from libg++.

	* parse.y (PFUNCNAME): Only specify the type once.

1997-10-01  Brendan Kehoe  <brendan@lasher.cygnus.com>

	* lex.c (real_yylex): Clean up the code to fully behave the way
	the c-lex.c parser does for complex and real numbers.

Tue Sep 30 08:51:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (build_decl_overload_real): Reformat.

Tue Sep 30 00:18:26 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (synthesize_method): If at_eof, determine our linkage.

1997-09-29  Paul Eggert  <eggert@twinsun.com>

	* lex.c (real_yylex): Treat `$' just like `_', except issue a
	diagnostic if !dollars_in_ident or if pedantic.

	* lang-specs.h (@c++): -ansi no longer implies -$.

	* decl2.c (lang_decode_option):
	-traditional and -ansi now do not mess with
	dollars_in_ident.

Mon Sep 29 19:57:51 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* Makefile.in (parse.o, decl.o): Also depend on
	$(srcdir)/../except.h $(srcdir)/../output.h.
	(decl2.o): Also depend on $(srcdir)/../expr.h ../insn-codes.h
	$(srcdir)/../except.h $(srcdir)/../output.h.
	(typeck.o, init.o): Also depend on $(srcdir)/../expr.h
	../insn-codes.h.

	* call.c, cp-tree.h, decl.c, tree.c: Finish prototyping.

	* expr.c (cplus_expand_expr): Make it static.

	* decl2.c, init.c, typeck.c: Include "expr.h".
	(expand_expr): Use proper values when calling the function.

Mon Sep 29 11:05:54 1997  Alexandre Oliva  <oliva@dcc.unicamp.br>

	* lang-options.h: New -Wold-style-cast flag.
	* cp-tree.h (warn_old_style_cast): New variable.
	* decl2.c (warn_old_style_cast): Likewise.
	(lang_decode_option): Support -Wold-style-cast.
	(reparse_absdcl_as_casts): Produce old-style-cast warning.

Mon Sep 29 09:20:53 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* decl.c (cp_finish_decl): Allow expand_aggr_init to set
	TREE_USED, reset value based on already_used.

	* init.c (expand_member_init): Revert change.

Mon Sep 29 08:57:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h, decl.c, decl2.c, pt.c:
	Lose DECL_C_STATIC and DECL_PUBLIC.  Don't pretend statics are public.

	* decl2.c (lang_decode_option): Add missing ;.

Sat Sep 27 16:22:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

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

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

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

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

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

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

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

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

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

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

	* init.c (build_member_call): Handle TEMPLATE_ID_EXPR.

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

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

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

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

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

	* spew.c (yylex): Handle PFUNCNAME.

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

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

1997-09-25  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* decl.c (init_decl_processing): Declare __builtin_constant_p as
	accepting any kind of type, not only int.

Fri Sep 26 00:22:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (get_matching_virtual): Notice virtual bases when sorrying
	about covariant returns.

	* parse.y (member_init): Also imply typename here.  Remove ancient
	extension for initializing base members.

Thu Sep 25 11:11:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	Handle multi-level typenames and implicit typename in base list.
	* parse.y (typename_sub{,[0-2]}): New rules.
	(structsp, rule TYPENAME_KEYWORD): Use typename_sub.
	(nonnested_type): New rule.
	(complete_type_name): Use it.
	(base_class.1): Use typename_sub and nonnested_type.
	(nested_name_specifier): Don't elide std:: here.
	* decl.c (make_typename_type): Handle getting a type for NAME.
	(lookup_name_real): Turn std:: into :: here.

	Rvalue conversions were removed in London.
	* call.c (is_subseq): Don't consider lvalue transformations.
	(build_conv): LVALUE_CONV and RVALUE_CONV get IDENTITY_RANK.
	(joust): Re-enable ?: kludge.

1997-09-22  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (start_function): Up warning of no return type to be a
	pedwarn.

Mon Sep 22 14:15:34 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* init.c (expand_member_init): Don't set TREE_USED.
	* decl.c (cp_finish_decl): Mark decls used if type has TREE_USED
	set,don't clear TREE_USED wholesale.

Sat Sep 20 15:31:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): Do require_complete_type before
	build_cplus_new.

Thu Sep 18 16:47:52 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (lookup_field): Call complete_type in all cases.

	* decl.c (finish_function): Just warn about flowing off the end.

Wed Sep 17 10:31:25 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokparms): Don't bash a permanent list node if we're
	in a function.

1997-09-17  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Makefile.in (CONFLICTS): Fix s/r conflict count to 18.

Tue Sep 16 14:06:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_op): Give better error for syntactically
	correct, but semantically invalid, use of undeclared template.

	* call.c (compare_qual): Handle pmfs.

	* decl.c (store_parm_decls): last_parm_cleanup_insn is the insn
	after the exception spec.

Mon Sep 15 11:52:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (null_ptr_cst_p): Integer type, not integral type.

	* call.c (joust): Disable warnings until they can be moved to the
	right place.

Fri Sep 12 16:11:13 1997  Per Bothner  <bothner@cygnus.com>

	* Makefile.in, config-lang.in:  Convert to autoconf.

Thu Sep 11 17:14:55 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (lookup_name_real): Add implicit 'typename' to types from
	base classes.

	* pt.c (most_specialized_class): Fix typo.
	(tsubst): Move constant folding to TREE_VEC case.

Thu Sep 11 10:08:45 1997  Mark Mitchell  <mmitchell@usa.net>

	* pt.c (do_poplevel): Don't warn about unused local variables
	while processing_template_decl since we don't always know whether
	or not they will need constructing/destructing.

	* pt.c (uses_template_parms): Check the values of an enumeration
	type to make sure they don't depend on template parms.

	* decl.c (make_typename_type): Don't lookup the field if the
	context uses template parms, even if we're not
	processing_template_decl at the moment.

	* pt.c (coerce_template_parms): Avoid looking at the
	TYPE_LANG_DECL portion of a typename type, since there won't be
	one.
	(tsubst): Do constant folding as necessary to make sure that
	arguments passed to lookup_template_class really are constants.

Wed Sep 10 16:39:26 1997  Jim Wilson  <wilson@cygnus.com>

	* Make-lang.in (LN, LN_S): New macros, use where appropriate.

Wed Sep 10 11:21:55 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (expand_builtin_throw): #ifndef DWARF2_UNWIND_INFO.
	* decl2.c (finish_file): Only register exception tables if we
	need to.

	* decl.c (init_decl_processing): Add __builtin_[fs]p.

Tue Sep  9 19:49:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (unify): Just return 0 for a TYPENAME_TYPE.

Tue Sep  9 17:57:25 1997  Mark Mitchell  <mmitchell@usa.net>

	* error.c (dump_decl): Avoid crashing when presented with a
	uninitialized constant, as can occur with a template parameter.
	(dump_expr): Make sure that there are enough levels of
	current_template_parms before we start diving through them.

1997-09-09  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (build_indirect_ref): Heed FLAG_VOLATILE similar to
	c-typeck.c.

Tue Sep  9 09:36:39 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* except.c (expand_throw): Call build_delete for all
	exception types, not just objects with destructors.

Mon Sep  8 02:33:20 1997  Jody Goldberg  <jodyg@idt.net>

	* decl.c (current_local_enum): Remove static.
	* pt.c (tsubst_enum): Save and restore value of current_local_enum
	in case template is expanded in enum decl.
	(instantiate_class_template): Use new tsubst_enum signature.
	(tsubst_expr): Likewise.

Mon Sep  8 01:21:43 1997  Mark Mitchell  <mmitchell@usa.net>

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

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

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

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

Sat Sep  6 10:20:27 1997  Mark Mitchell  <mmitchell@usa.net>

	* decl.c (replace_defag): Undo previous change.
	* lex.c (do_pending_defargs): Deal with member templates.

	* pt.c (is_member_template): Avoid crashing when passed a
	non-function argument.

Fri Sep  5 17:27:38 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (grow_method): Remove check for redeclaration.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wed Sep  3 11:09:25 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (c_expand_return): Always convert_for_initialization
	before checking for returning a pointer to local.

	* pt.c (type_unification): If strict and the function parm doesn't
	use template parms, just compare types.

Wed Sep  3 10:35:49 1997  Klaus Espenlaub  <kespenla@student.informatik.uni-ulm.de>

	* method.c (build_overloaded_value): Replace direct call
	to the floating point emulator with REAL_VALUE_TO_DECIMAL macro.

Wed Sep  3 00:02:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (convert_arguments): Don't arbitrarily choose the first
	of a set of overloaded functions.

Tue Sep  2 12:09:13 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (real_yylex): Don't elide __FUNCTION__.

	* method.c (build_overload_value): Add in_template parm.
	(build_overload_int): Likewise.
	(build_overload_identifier): Pass it.

	* decl.c (duplicate_decls): Don't bash a previous template
	definition with a redeclaration.

	* pt.c (unify): float doesn't match double.

	* pt.c (do_type_instantiation): Handle getting a _TYPE or a
	TYPE_DECL.  Handle getting non-template types.
	* parse.y (explicit_instantiation): Use typespec instead of
	aggr template_type.

Tue Sep  2 10:27:08 1997  Richard Henderson  <rth@cygnus.com>

	* typeck.c (build_ptrmemfunc1): Clean up ptr->int cast warnings.

Mon Sep  1 13:19:04 1997  Eugene Mamchits  <eugin@ips.ras.ru>

	* call.c (add_builtin_candidate): Add missing TREE_TYPE.
	(compare_ics): Likewise.

Mon Sep  1 13:19:04 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (joust): Warn about choosing one conversion op over
	another because of 'this' argument when the other return type is
	better.
	(source_type): New fn.

	* call.c (build_new_op): Strip leading REF_BIND from first operand
	to builtin operator.

	* decl2.c (mark_vtable_entries): Mark abort_fndecl as used when we
	use its RTL.

Thu Aug 28 09:45:23 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (null_ptr_cst_p): Remove support for (void*)0.

Wed Aug 27 02:03:34 1997  Jeffrey A Law  <law@cygnus.com>

	* typeck.c (expand_target_expr): Make definition match declaration.

	* class.c (get_basefndecls): Make definition match declaration.

Mon Aug 25 14:30:02 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* input.c (sub_getch): Eventually give up and release the input file.

	* decl.c (cp_finish_decl): If #p i/i, put inline statics in the
	right place.

	* call.c (joust): Tweak message.

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

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

Sat Aug 23 17:47:22 1997  Jeffrey A Law  <law@cygnus.com>

	* call.c (strictly_better): Make arguments unsigned ints.

Thu Aug 21 18:48:44 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (real_yylex): Refer to __complex instead of complex.

Thu Aug 21 22:25:46 1997  J"orn Rennecke  <amylaar@cygnus.co.uk>

	* lex.c (real_yylex): Don't use getc directly.

Wed Aug 20 17:25:08 1997  Jason Merrill  <jason@yorick.cygnus.com>

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

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

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

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

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

Tue Aug 19 02:26:07 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (lookup_nested_type_by_name): Handle typedef wierdness.

	* typeck2.c (my_friendly_abort): Report bugs to egcs-bugs@cygnus.com.

	* pt.c (instantiate_class_template): Call repo_template_used
	before finish_prevtable_vardecl.

	* call.c (is_subseq): New fn.
	(compare_ics): Use it.

	* repo.c (finish_repo): Don't crash on no args.

	* parse.y (named_complex_class_head_sans_basetype): Handle
	explicit global scope.
	* decl2.c (handle_class_head): New fn.

	* pt.c (unify): Add CONST_DECL case.

Thu Aug 14 10:05:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* rtti.c (permanent_obstack): Fix decl to not be a pointer.

	* cp-tree.h (report_type_mismatch): Add prototype.
	* call.c (build_overload_call_real): Remove erroneous fourth
	argument to report_type_mismatch.
	(build_user_type_conversion_1): Remove erroneous second arg to
	tourney.
	(build_new_function_call): Likewise.
	(build_object_call): Likewise.
	(build_new_op): Likewise.
	(build_new_method_call): Likewise.

Wed Aug 13 19:19:25 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* error.c (dump_decl): Don't bother processing a function with no
	DECL_LANG_SPECIFIC.

	* method.c (emit_thunk): Call init_function_start in the macro case.

Wed Aug 13 10:46:19 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* decl2.c (DEFAULT_VTABLE_THUNKS): Define to be 0 if not
	defined and used to set flag_vtable_thunks.

Tue Aug 12 20:13:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y: Don't clear the inlines from their obstack until they've
	all been processed.

	* decl.c (duplicate_decls): Don't complain about exception
	specification mismatch if flag_exceptions is off.

Mon Aug 11 15:01:56 1997  Marc Lehmann  <pcg@goof.com>

	* Make-lang.in (c++.distclean): Remove g++.c on make distclean.

Sun Aug 10 12:06:09 1997  Paul Eggert  <eggert@twinsun.com>

	* cp-tree.h: Replace STDIO_PROTO with PROTO in include files.
	* cvt.c, error.c, except.c, expr.c, friend.c, init.c, rtti.c:
	Include <stdio.h> before include files that formerly used STDIO_PROTO.

	* decl.c, g++spec.c, lex.c, method.c, repo.c:
	Include "config.h" first, as per autoconf manual.

Fri Aug  8 11:47:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (duplicate_decls): Tweak wording.
	* lex.c (do_pending_defargs): Don't die if we see a default arg
	that isn't a DEFAULT_ARG.
	* error.c (dump_expr): Handle DEFAULT_ARG.

	* decl2.c (lang_decode_option): Handle -fhandle-exceptions.
	* lang-options.h: Add -fhandle-exceptions.

	* class.c (build_vtable): Vtables are artificial.
	(prepare_fresh_vtable): Likewise.

Wed Aug  6 11:02:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (ocp_convert): After converting to the target type, set
	LOOKUP_NO_CONVERSION.

	* call.c (joust): Warn about potentially confusing promotion rules
	with -Wsign-promo.
	* cp-tree.h, lang-options.h, decl2.c: Support -Wsign-promo.

Tue Aug  5 15:15:07 1997  Michael Meissner  <meissner@cygnus.com>

	* exception.cc: Declare __terminate_func with noreturn attribute.

Fri Aug  1 03:18:15 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y: Break out eat_saved_input, handle errors.
	(function_try_block): Use compstmt instead of compstmt_or_error.

Thu Jul 31 17:14:04 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (build_cplus_new): Don't set TREE_ADDRESSABLE.

Fri Jul  4 01:45:16 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Make-lang.in (cplib2.txt, cplib2.ready): Instead of checking for
	existence of cc1plus check whether $(LANGUAGES) contains C++.

Wed Jul 30 13:04:21 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* method.c (do_build_copy_constructor): When copying an anonymous
	union member loop around to handle nested anonymous unions.  Use
	the offset of the member relative to the outer structure, not the
	union.

Tue Jul 29 21:17:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (resolve_args): New fn.
	(build_new_function_call): Use it.
	(build_object_call): Likewise.
	(build_new_method_call): Likewise.

Mon Jul 28 16:02:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): tsubst all default parms from templates.

Wed Jul 23 13:36:25 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (struct cp_function): Add static_labelno.
	(push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.

Tue Jul 22 14:43:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_component_ref_1): Convert from reference.

Tue Jul 22 11:06:23 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (current_declspecs, prefix_attributes): Initialize to
	NULL_TREE.

	* parse.y (initdcl0): Make sure CURRENT_DECLSPECS is non-nil
	before we try to force it to be a TREE_LIST.
	(decl): Make sure $1.t is non-nil.

Sun Jul 20 11:53:07 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (uses_template_parms): Handle template first-parse codes.

	* decl.c (cp_finish_decl): Only warn about user-defined statics.

Fri Jul 18 17:56:08 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (unify): Handle BOOLEAN_TYPE.

	* cp-tree.h: Lose PARM_DEFAULT_FROM_TEMPLATE.
	* pt.c (tsubst): Don't set it.
	* call.c (build_over_call): Use uses_template_parms.

Thu Jul 17 18:06:30 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (build_overload_nested_name): Use static_labelno
	instead of var_labelno.
	(build_qualified_name): New fn.
	(build_overload_name): Split out from here.
	(build_static_name): Use build_qualified_name.
	* decl.c (cp_finish_decl): Statics in extern inline functions
	have comdat linkage.
	(start_function): Initialize static_labelno.

Thu Jul 17 11:20:17 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* class.c (finish_struct_methods): Add check of warn_ctor_dtor_privacy
	before "all member functions in class [] are private".

Wed Jul 16 23:47:08 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (do_scoped_id): convert_from_reference.
	* init.c (build_offset_ref): Likewise.

Wed Jul 16 12:34:29 1997  Benjamin Kosnik  <bkoz@lisa.cygnus.com>

	* error.c (dump_expr): Check TREE_OPERAND before dump_expr_list.

Mon Jul 14 03:23:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Promote index
	before saving it.

Sun Jul 13 00:11:52 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (layout_basetypes): Move non-virtual destructor warning.
	* decl.c (xref_basetypes): Remove non-virtual destructor warning.

Sat Jul 12 12:47:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): Call add_defarg_fn for the function
	type, too.
	* lex.c (add_defarg_fn): Adjust.
	(do_pending_defargs): Adjust.  Don't skip the first parm.

Fri Jul 11 01:39:50 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (build_enumerator): Global enumerators are also readonly.

	* rtti.c (build_dynamic_cast_1): Renamed from build_dynamic_cast.
	(build_dynamic_cast): Call it and convert_from_reference.

	* lex.c (add_defarg_fn): New fn.
	(snarf_defarg): Don't add to defarg_types.
	(do_pending_defargs): Lose defarg_types.  All fns we process now
	have defargs.
	* decl.c (grokfndecl): Call add_defarg_fn.

	* Makefile.in (CONFLICTS): Expect 18 s/r conflicts.
	* cp-tree.def: Add DEFAULT_ARG.
	* spew.c (yylex): Call snarf_defarg as appropriate.
	* parse.y: New tokens DEFARG and DEFARG_MARKER.
	(defarg_again, pending_defargs, defarg, defarg1): New rules.
	(structsp): Use pending_defargs.
	(parms, full_parm): Use defarg.
	* lex.c (init_lex): Initialize inline_text_firstobj.
	(do_pending_inlines): Never pass the obstack to feed_input.
	(process_next_inline): Call end_input instead of restore_pending_input.
	(clear_inline_text_obstack, reinit_parse_for_expr, do_pending_defargs,
	finish_defarg, feed_defarg, snarf_defarg, maybe_snarf_defarg): New fns.
	* input.c (end_input): New fn.
	(sub_getch): At the end of some fed input, just keep returning EOF
	until someone calls end_input.
	Remove 'obstack' field from struct input_source.
	* decl.c (grokparms): Handle DEFAULT_ARG.
	(replace_defarg): New fn.
	* cp-tree.h (DEFARG_LENGTH, DEFARG_POINTER): New macros.

Wed Jul  9 13:44:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (implicit_conversion): If nothing else works, try binding
	an rvalue to a reference.

Wed Jul  9 13:04:38 1997  Geoffrey Noer  <noer@cygnus.com>

	* decl.c (init_decl_processing): Fix Jun 30 patch -- move
	ifndef for Cygwin32 to include SIGSEGV.

Thu Jul  3 01:44:05 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_1): Only complain about pointers without
	copy stuff if there are any constructors.

	* rtti.c (build_dynamic_cast): Call complete_type on the types.

	* decl.c (grokfndecl): If the function we chose doesn't actually
	match, die.

	* decl2.c (grokclassfn): Don't specify 'const int' for the
	artificial destructor parm.

	* pt.c (type_unification): If we are called recursively, nothing
	decays.

Mon Jun 30 17:53:21 1997  Geoffrey Noer  <noer@cygnus.com>

	* decl.c (init_decl_processing): Stop trying to catch signals
	other than SIGABRT since the Cygwin32 library doesn't support
	them correctly yet.  This fixes a situation in which g++ causes
	a hang on SIGSEGVs and other such signals in our Win32-hosted
	tools.

Mon Jun 30 14:50:01 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (mapcar, case CALL_EXPR): Handle all the parse node data.

Fri Jun 27 15:18:49 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck2.c (store_init_value): Always return the value if our
	type needs constructing.

	* method.c (hack_identifier): Convert class statics from
	reference, too.

Thu Jun 26 11:44:46 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* Make-lang.in (cplib2.ready): Add $(LANGUAGES) dependency.

Thu Jun 19 16:49:28 1997  Mike Stump  <mrs@cygnus.com>

	* typeck.c (c_expand_return): Make sure we clean up temporaries at
	the end of return x;

Thu Jun 19 12:28:43 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (check_for_missing_semicolon): Also check for CV_QUALIFIER.

Tue Jun 17 18:35:57 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Add support
	-fno-sjlj-exceptions -fPIC exception handling on the SPARC.

Mon Jun 16 01:24:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* repo.c (extract_string): Null-terminate.

	* cp-tree.h (TI_SPEC_INFO): New macro.
	(CLASSTYPE_TI_SPEC_INFO): New macro.
	* pt.c (push_template_decl): Correctly determine # of template parms
	for partial specs.

	* call.c (compare_ics): Really fix 'this' conversions.

	* pt.c (do_decl_instantiation): Don't crash on explicit inst of
	non-template fn.

	* pt.c (push_template_decl): Complain about mismatch in # of
	template parms between a class template and a member template.

Sun Jun 15 02:38:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (synthesize_method): You can't call
	function_cannot_inline_p after finish_function.
	* decl.c (finish_function): Turn on flag_inline_functions and turn
	off DECL_INLINE before handing a synthesized method to the
	backend.

Thu Jun 12 17:35:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (synthesize_method): Remove July 30 change to never set
	DECL_INLINE if at_eof.

Thu Jun 12 15:25:08 1997  Mike Stump  <mrs@cygnus.com>

	* xref.c (GNU_xref_member): Ensure that the node has a
	decl_lang_specific part before checking DECL_FRIEND_P.

Thu Jun 12 12:36:05 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Diagnose non-class types used
	as bases.

Wed Jun 11 17:33:40 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_conditional_expr): Use convert_for_initialization
	instead of convert_and_check.

Wed Jun 11 12:31:33 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (typespec): Don't pedwarn for typeof.

Tue Jun 10 00:22:09 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* repo.c (finish_repo): Only check changes if we would write a
	repo file.

	* call.c (compare_ics): Fix handling of 'this' conversions.

	* pt.c (do_decl_instantiation): Support static data too.  Rename
	from do_function_instantiation.
	* cp-tree.h: Adjust.
	* parse.y: Adjust.

	* repo.c (extract_string): New fn.
	(get_base_filename): Use it.
	(init_repo): Compare old args with current args.

Mon Jun  9 14:25:30 1997  Mike Stump  <mrs@cygnus.com>

	* Makefile.in, Make-lang.in: Protect C-ls with a comment
	character, idea from Paul Eggert <eggert@twinsun.com>.

Mon Jun  9 01:52:03 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (c_expand_return): Be more persistent in looking for
	returned temps.

	* cvt.c (build_up_reference): Use NOP_EXPR for switching from
	pointer to reference.

	* class.c (build_vbase_path): Don't do anything if PATH has no steps.

Sun Jun  8 03:07:05 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_member_call, build_offset_ref):
	Use do_scoped_id instead of do_identifier.

	* cvt.c (convert): Remove bogosity.

Sat Jun  7 20:50:17 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cvt.c (build_up_reference): Do checks of ARGTYPE and
	TARGET_TYPE before trying to use get_binfo.

Fri Jun  6 17:36:39 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_up_reference): Call get_binfo to get access control.

	* decl2.c (import_export_decl): If we don't support weaks, leave
	statics undefined.

Fri Jun  6 15:55:49 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Add support for machines that
	cannot access globals after throw's epilogue when
	-fno-sjlj-exceptions is used.

Thu Jun  5 16:28:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y: 'std::' becomes '::'.
	* lex.c (real_yylex): Remove 'namespace' warning.
	* init.c (build_member_call): Ignore 'std::'.
	(build_offset_ref): Likewise.
	* decl2.c (do_using_directive): Ignore 'using namespace std;'.
	(do_toplevel_using_decl): Ignore 'using std::whatever'.
	* decl.c (push_namespace): Just sorry.
	(pop_namespace): Nop.
	(init_decl_processing): Declare std namespace.

Tue Jun  3 18:08:23 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (push_class_decls): A name which ambiguously refers to
	several instantiations of the same template just refers to the
	template.

Tue Jun  3 12:30:40 1997  Benjamin Kosnik  <bkoz@cirdan.cygnus.com>

	* decl.c (build_enumerator): Fix problem with unsigned long
	enumerated values being smashed to ints, causing overflow
	when computing next enumerated value (for enum values around
	MAX_VAL).

Mon Jun  2 17:40:56 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_component_ref): Only call mark_used on a decl.

Thu May 29 15:54:17 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (build_c_cast): Make the check for a ptr to function
	more specific before possible default_conversion call.

Thu May 29 13:02:06 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_exception_blocks): Simplify and fix and make
	sure we don't end a region in a sequence, as expand_end_bindings
	doesn't like it.

Wed May 28 17:08:03 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Mark terminate as not
	returning so that the optimizer can optimize better.

Tue May 27 19:49:19 1997  Mike Stump  <mrs@cygnus.com>

	* cvt.c (convert): Don't do any extra work, if we can avoid it
	easily.

Tue May 27 18:21:47 1997  Mike Stump  <mrs@cygnus.com>

	* *.[chy]: Change cp_convert to ocp_convert, change convert to
	cp_convert.  convert is now reserved for the backend, and doesn't
	have the semantics a frontend person should ever want.

Fri May 23 10:58:31 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lang-specs.h: Define __EXCEPTIONS if exceptions are enabled.
	Lose -traditional support.

Thu May 22 15:41:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (get_tinfo_var): Use TYPE_PRECISION (sizetype).

	* parse.y (self_reference): Do it for templates, too.
	* class.c (pushclass): Don't overload_template_name; the alias
	generated by build_self_reference serves the same purpose.

	* tree.c (list_hash): Make static, take more args.
	(list_hash_lookup): Likewise.
	(list_hash_add): Make static.
	(list_hash_canon): Lose.
	(hash_tree_cons): Only build a new node if one isn't already in the
	hashtable.
	(hash_tree_chain): Use hash_tree_cons.
	* cp-tree.h: Adjust.
	* decl.c (grokfndecl): Just check IDENTIFIER_GLOBAL_VALUE instead
	of calling lookup_name.

Wed May 21 18:24:19 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): TYPE_VALUES for an enum
	doesn't refer to the CONST_DECLs.

Tue May 20 21:09:32 1997  Bob Manson  <manson@charmed.cygnus.com>

	* rtti.c (get_tinfo_var): Either INT_TYPE_SIZE or 32, whichever
	is bigger.
	(expand_class_desc): Convert the last argument to a sizetype.

Tue May 20 13:55:57 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* gxx.gperf (__complex, __complex__, __imag, __imag__, __real,
	__real__): Add reswords.
	* hash.h: Regenerate.
	* lex.h (rid): Add RID_COMPLEX.
	(RID_LAST_MODIFIER): Set to RID_COMPLEX.
	* lex.c (init_lex): Add building of RID_COMPLEX.
	(real_yylex): General cleanup in line with what c-lex.c also has,
	sans the cruft for traditional; add handling of SPEC_IMAG, complex
	types, and imaginary numeric constants.
	* parse.y (REALPART, IMAGPART): Add tokens.
	(unary_expr): Add REALPART and IMAGPART rules.
	* cp-tree.h (complex_{integer,float,double,long}_type_node): Declare.
	* decl.c (complex_{integer,float,double,long}_type_node): Define
	types.
	(init_decl_processing): Set up the types.
	(grokdeclarator): Add handling of RID_COMPLEX.  Set and use
	DEFAULTED_INT instead of EXPLICIT_INT when we default to int type.
	* call.c (build_new_op): Add REALPART_EXPR and IMAGPART_EXPR cases.
	* cvt.c (cp_convert): Handle COMPLEX_TYPE.
	* error.c (dump_type_prefix, dump_type, dump_type_suffix): Add
	COMPLEX_TYPE case.
	* method.c (build_overload_name): Add handling of the different
	COMPLEX_TYPEs, prefixing them with `J'.
	* pt.c (process_template_parm): Don't let them use a COMPLEX_TYPE
	as a template parm.
	(uses_template_parms, tsubst, unify): Add COMPLEX_TYPE case.
	* tree.c (lvalue_p): Add REALPART_EXPR and IMAGPART_EXPR cases.
	(mapcar): Handle COMPLEX_CST.
	* typeck.c (build_binary_op_nodefault): Handle COMPLEX_TYPE.
	(common_type): Add code for complex types.
	(build_unary_op): Add REALPART_EXPR and IMAGPART_EXPR cases.
	(convert_for_assignment): Likewise.
	(mark_addressable): Add REALPART_EXPR and IMAGPART_EXPR cases.

Mon May 19 12:26:27 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst): Don't pass the MINUS_EXPR for an array domain to
	tsubst_expr, as it might try to do overload resolution.

Sat May 17 10:48:31 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Oops.

Fri May 16 14:23:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.def: Add TAG_DEFN.
	* pt.c (tsubst_enum): New fn.
	(instantiate_class_template): Use it.
	(tsubst_expr): Support TAG_DEFN.
	(tsubst): Support local enums.
	(tsubst_copy): Likewise.
	* decl.c (finish_enum): Likewise.
	(start_enum): If this is a local enum, switch to permanent_obstack.

Wed May 14 19:08:28 1997  Mike Stump  <mrs@cygnus.com>

	* decl.c (store_parm_decls): Set last_parm_cleanup_insn here.
	(finish_function): Put the base init code for constructors just
	after the parm cleanup insns.
	(struct cp_function): Add last_parm_cleanup_insn.
	(push_cp_function_context): Likewise.
	(pop_cp_function_context): Likewise.

Tue May 13 15:51:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst_copy): Handle BIT_NOT_EXPR.

Wed May  7 11:17:59 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* method.c (emit_thunk) [ASM_OUTPUT_MI_THUNK]: Build up the RTL
	for THUNK_FNDECL before we switch to temporary allocation.

Mon May  5 14:46:53 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_op): Handle null arg2 for ?:.

Thu May  1 18:26:37 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_exception_blocks): Ensure that we flow through
	the end of the exception region for the exception specification.
	Move exception region for the exception specification in, so that
	it doesn't protect the parm cleanup.  Remove some obsolete code.
	* decl.c (store_parm_decls): Likewise.
	(finish_function): Likewise.

Tue Apr 29 15:38:54 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Fix nothrow handling.

Tue Apr 29 14:29:50 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (emit_base_init): Don't warn about the initialization
	list for an artificial member.

Fri Apr 25 17:47:59 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* expr.c (do_case): Handle !START case for the error msg.

Fri Apr 25 11:55:23 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c, lang-options.h: New option -Weffc++.
	* class.c, decl.c, init.c, typeck.c: Move Effective C++ warnings
	to -Weffc++.

	* decl2.c (finish_prevtable_vardecl): Change NO_LINKAGE_HEURISTICS
	to MULTIPLE_SYMBOL_SPACES.

Wed Apr 23 18:06:50 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (emit_thunk, generic case): Set current_function_is_thunk.

	* method.c (emit_thunk, macro case): Set up DECL_RESULT.

	* typeck.c (c_expand_return): Don't complain about returning void
	to void in an artificial function.
	* method.c (make_thunk): Change settings of READONLY/VOLATILE,
	don't set DECL_RESULT, set DECL_ARTIFICIAL.
	(emit_thunk, generic code): Also set up DECL_LANG_SPECIFIC.

Wed Apr 23 14:43:06 1997  Mike Stump  <mrs@cygnus.com>

	* init.c (init_decl_processing): Add support for setjmp/longjmp based
	exception handling.
	* except.c (init_exception_processing): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_exception_blocks): Likewise.
	(expand_throw): Likewise.
	* exception.cc (__default_terminate): Likewise.

	* init.c (perform_member_init): Use new method of expr level
	cleanups, instead of cleanups_this_call and friends.
	(emit_base_init): Likewise.
	(expand_aggr_vbase_init_1): Likewise.
	(expand_vec_init): Likewise.
	* decl.c (cp_finish_decl): Likewise.
	(expand_static_init): Likewise.
	(store_parm_decls): Likewise.
	(cplus_expand_expr_stmt): Likewise.
	* decl2.c (finish_file): Likewise.

	* Make-lang.in (exception.o): Ok to compile with -O now.

	* decl.c (maybe_build_cleanup_1): We no longer have to unsave, as
	we know it will be done later by the backend.

	* decl2.c (lang_f_options): Remove support for short temps.
	* lang-options.h: Likewise.

Wed Apr 23 04:12:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (varargs_function_p): New fn.
	* method.c (emit_thunk): Replace broken generic code with code to
	generate a heavyweight thunk function.

Tue Apr 22 02:45:18 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (process_template_parm): pedwarn about floating-point parms.

	* decl.c (grokdeclarator): inline no longer implies static.

	* spew.c (yylex): Always return the TYPE_DECL if we got a scope.

Mon Apr 21 15:42:27 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (check_for_override): The signature of an overriding
	function is not changed.

	* call.c (build_over_call): Move setting of conv into the loop.
	Note: this change, along with the related changes of the 18th thru
	the 20th of April, fix an infinite loop problem in conversions.

Sun Apr 20 16:24:29 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_user_type_conversion_1): Really ignore rvalue
	conversions when looking for a REFERENCE_TYPE.

	* cvt.c (build_up_reference): Eviscerate, use build_unary_op.
	* cp-tree.h (TREE_REFERENCE_EXPR): #if 0.
	* typeck.c (decay_conversion): Don't set TREE_REFERENCE_EXPR.
	(build_unary_op): Likewise.
	* call.c (build_over_call): See through a CONVERT_EXPR around the
	ADDR_EXPR for on a temporary.
	* typeck.c (c_expand_return): See through a CONVERT_EXPR around
	the ADDR_EXPR for a local variable.

Fri Apr 18 12:11:33 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_user_type_conversion_1): If we're trying to
	convert to a REFERENCE_TYPE, only consider lvalue conversions.
	(build_new_function_call): Print candidates.
	(implicit_conversion): Try a temp binding if the lvalue conv is BAD.
	(reference_binding): Binding a temporary of a reference-related type
	is BAD.

Thu Apr 17 14:37:22 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* inc/typeinfo (type_info::before): Add cv-qualifier-seq.
	* tinfo2.cc (type_info::before): Likewise.

Mon Apr 14 12:38:17 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (implicit_conversion): Oops.

Fri Apr 11 02:18:30 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (implicit_conversion): Try to find a reference conversion
	before binding a const reference to a temporary.

Wed Apr  2 12:51:36 1997  Mike Stump  <mrs@cygnus.com>

	* exception.cc (__default_unexpected): Call terminate by default,
	so that if the user overrides terminate, the correct function will
	be called.

Wed Mar 19 14:14:45 1997  Mike Stump  <mrs@cygnus.com>

	* parse.y (left_curly): Avoid trying to use any fields of
	error_mark_node, as there aren't any.

Thu Mar 13 16:33:22 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (do_identifier): Avoid breaking on overloaded methods
	as default arguments.

Wed Mar 12 13:55:10 1997  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>

	* call.c (add_template_candidate): Initialize the variable "dummy".

Mon Mar 10 15:13:14 1997  Brendan Kehoe  <brendan@canuck.cygnus.com>

	* decl.c (start_decl): Make sure TYPE isn't an error_mark_node
	before we try to use TYPE_SIZE and TREE_CONSTANT on it.

Fri Mar  7 13:19:36 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (comp_ptr_ttypes, more_specialized): Add decl.
	(debug_binfo): Delete decl, not needed.

	* tree.c (fnaddr_from_vtable_entry, function_arg_chain,
	promotes_to_aggr_type): Delete fns.
	* cp-tree.h (FNADDR_FROM_VTABLE_ENTRY,
	SET_FNADDR_FROM_VTABLE_ENTRY, FUNCTION_ARG_CHAIN,
	PROMOTES_TO_AGGR_TYPE): Delete alternates to #if 1.

	* decl.c (pending_invalid_xref{,_file,_line}): Delete unused vars.

	* friend.c (is_friend_type): Delete fn.
	* cp-tree.h (is_friend_type): Delete decl.

	* decl.c (original_result_rtx, double_ftype_double,
	double_ftype_double_double, int_ftype_int, long_ftype_long,
	float_ftype_float, ldouble_ftype_ldouble, last_dtor_insn): Make static.
	* typeck.c (original_result_rtx, warn_synth): Delete extern decls.

	* decl.c (push_overloaded_decl{,_top_level}): Make static, adding
	fwd decls.
	* cp-tree.h (push_overloaded_decl{,_top_level}): Delete decls.

	* decl.c (pushdecl_nonclass_level): #if 0, unused.
	* cp-tree.h (pushdecl_nonclass_level): #if 0 decl.

	* lex.c (reinit_lang_specific): #if 0, unused.
	* cp-tree.h (reinit_lang_specific): #if 0 decl.

	* decl.c (revert_static_member_fn): Make static, adding fwd decl.
	* cp-tree.h (revert_static_member_fn): Delete decl.

	* class.c (root_lang_context_p): Delete fn.
	* cp-tree.h (root_lang_context_p): Delete decl.

	* decl.c (set_current_level_tags_transparency): #if 0, unused.
	* cp-tree.h (set_current_level_tags_transparency): #if 0 decl.

	* lex.c (set_vardecl_interface_info): Make static.
	* cp-tree.h (set_vardecl_interface_info): Delete decl.

	* call.c (find_scoped_type): Make static.
	* cp-tree.h (find_scoped_type): Delete decl.

	* search.c (convert_pointer_to_vbase): Make static.
	* cp-tree.h (convert_pointer_to_vbase): Delete decl.

	* decl.c (const_ptr_type_node): Likewise.
	* cp-tree.h (const_ptr_type_node): Delete decl.

	* typeck.c (common_base_type): Make static.
	* cp-tree.h (common_base_types): Delete erroneous decl.

	* pt.c (classtype_mangled_name): Make static.
	* cp-tree.h (classtype_mangled_name): Delete decl.

	* lex.c (check_newline): Make static.
	* cp-tree.h (check_newline): Delete decl.

	* typeck.c (build_x_array_ref): Delete fn, same idea as
	grok_array_decl.
	* cp-tree.h (build_x_array_ref): Delete decl.

	* lex.c (copy_decl_lang_specific): Delete fn, same idea as
	copy_lang_decl.
	* cp-tree.h (copy_decl_lang_specific): #if 0 decl.

	* class.c (build_vtable_entry): Make static.
	* cp-tree.h (build_vtable_entry): Delete decl.

	* class.c (build_vbase_pointer): Make static.
	* cp-tree.h (build_vbase_pointer): Delete decl.

	* sig.c (build_sptr_ref): Add forward decl and make static.
	* cp-tree.h (build_sptr_ref): Delete decl.

	* call.c (build_new_method_call): Add forward decl and make static.
	* cp-tree.h (build_new_method_call): Delete decl.

	* call.c (build_object_call): Make static.
	* class.c (check_for_override, complete_type_p, mark_overriders):
	Likewise.
	* decl.c (cp_function_chain): Likewise.
	* lex.c (set_typedecl_interface_info, reinit_parse_for_block):
	Likewise.
	* pt.c (comp_template_args, get_class_bindings, push_tinst_level):
	Likewise.
	* tree.c (build_cplus_array_type_1): Likewise.
	* typeck.c (comp_ptr_ttypes_{const,real,reinterpret}): Likewise.
	(comp_target_parms): Likewise.

	* init.c (build_builtin_call): Make static.
	* cp-tree.h (build_builtin_call): Delete decl.

	* typeck.c (binary_op_error): Delete decl.
	* cp-tree.h (binary_op_error): Likewise.

Thu Mar  6 16:13:52 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (build_method_call): Compare against error_mark_node
	directly, rather than the ERROR_MARK tree code.
	* cvt.c (cp_convert): Likewise.
	* decl.c (print_binding_level): Likewise.
	(duplicate_decls): Likewise.
	(grokdeclarator): Likewise.
	(grokdeclarator): Likewise.
	* init.c (expand_aggr_init_1): Likewise.
	(decl_constant_value): Likewise.
	* method.c (build_opfncall): Likewise.
	(hack_identifier): Likewise.
	* typeck.c (build_modify_expr): Likewise.

	* typeck.c (build_c_cast): Don't decl TYPE as register tree.

Sun Mar  2 02:54:36 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* pt.c (unify): Strip NOP_EXPR wrappers before unifying integer values.

	* pt.c (coerce_template_parms): Add new error message.

	* method.c (build_overload_value): Implement name mangling for
	floating-point template arguments.

	* method.c (build_overload_int, icat, dicat): Fix mangling of template
	arguments whose absolute value doesn't fit in a signed word.

Mon Mar  3 12:14:54 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* friend.c: New file; put all of the friend stuff in here.
	* init.c: Instead of here.
	* Makefile.in (CXX_OBJS): Add friend.o.
	(friend.o): Add dependencies.
	* Make-lang.in (CXX_SRCS): Add $(srcdir)/cp/friend.c.

Sun Mar  2 11:04:43 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_scoped_method_call): Complain if the scope isn't a
	base.

Wed Feb 26 11:31:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (left_curly): Don't crash on erroneous type.

	* init.c (build_delete): Fix type of ref.

Tue Feb 25 12:41:48 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (get_vbase_1): Renamed from get_vbase.
	(get_vbase): Wrapper, now non-static.
	(convert_pointer_to_vbase): Now static.

	* call.c (build_scoped_method_call): Accept a binfo for BASETYPE.
	* init.c (build_delete): Pass one.
	(build_partial_cleanup_for): Use build_scoped_method_call.
	* decl.c (finish_function): Pass a binfo.

Mon Feb 24 15:00:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): Only synthesize non-trivial copy ctors.

	* typeck.c (build_c_cast): Lose other reference to flag.

	* call.c (build_field_call): Don't look for [cd]tor_identifier.
	* decl2.c (delete_sanity): Remove meaningless use of
	LOOKUP_HAS_IN_CHARGE.
	* decl.c (finish_function): Use build_scoped_method_call instead
	of build_delete for running vbase dtors.
	* init.c (build_delete): Call overload resolution code instead of
	duplicating it badly.

Thu Feb 20 15:12:15 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): Call mark_used before trying to elide
	the call.

	* decl.c (implicitly_declare): Don't set DECL_ARTIFICIAL.

Wed Feb 19 11:18:53 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (build_modify_expr): Always pedwarn for a cast to
	non-reference used as an lvalue.

Wed Feb 19 10:35:37 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert_to_pointer): Convert from 0 to a pmf properly.

Tue Feb 18 15:40:57 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (handler): Fix template typo.

Sun Feb 16 02:12:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* error.c (lang_decl_name): New fn.
	* tree.c (lang_printable_name): Use it.

Fri Feb 14 16:57:05 1997  Mike Stump  <mrs@cygnus.com>

	* g++spec.c: Include config.h so that we can catch bzero #defines
	from the config file.

Tue Feb 11 13:50:48 1997  Mike Stump  <mrs@cygnus.com>

	* new1.cc: Include a declaration for malloc, to avoid warning, and
	avoid lossing on systems that require one (ones that define malloc
	in xm.h).

Mon Feb 10 22:51:13 1997  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

	* decl2.c (max_tinst_depth): New variable.
	(lang_decode_option): Parse "-ftemplate-depth-NN" command line
	option.
	* pt.c (max_tinst_depth): Variable moved.
	* lang-options.h: Declare "-ftemplate-depth-NN" command line option
	as legal.

Fri Feb  7 15:43:34 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (xref_basetypes): Allow a base class that depends on
	template parms to be incomplete.

	* decl2.c (build_expr_from_tree): Support typeid(type).
	* rtti.c (get_typeid): Support templates.
	(expand_si_desc, expand_class_desc): Fix string length.
	(expand_ptr_desc, expand_attr_desc, expand_generic_desc): Likewise.

Tue Feb  4 11:28:24 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (unify, case TEMPLATE_CONST_PARM): Use cp_tree_equal.

	* pt.c (tsubst): Put it back for -fno-ansi-overloading.

Mon Feb  3 18:41:12 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst, case FUNCTION_DECL): Lose obsolete code that
	smashes together template and non-template decls of the same
	signature.

Thu Jan 30 19:18:00 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst): Don't recurse for the type of a TYPENAME_TYPE.

Wed Jan 29 11:40:35 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (duplicate_decls): Next route, pedwarn about different
	exceptions if -pedantic *or* olddecl !DECL_IN_SYSTEM_HEADER.

Tue Jan 28 20:43:29 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (HAS_DEFAULT_IMPLEMENTATION): Delete macro.
	(struct lang_type): Delete has_default_implementation member.
	Increase dummy to 21.
	* decl.c (start_method): Delete usage.

	* cp-tree.h (build_call, null_ptr_cst_p, in_function_p,
	store_after_parms, start_decl_1, auto_function): Add decls.
	(get_arglist_len_in_bytes, declare_implicit_exception,
	have_exceptions_p, make_type_decl, typedecl_for_tag,
	store_in_parms, pop_implicit_try_blocks, push_exception_cleanup,
	build_component_type_expr, cplus_exception_name,
	{make,clear}_anon_parm_name, dont_see_typename): Removed decls.
	* call.c (build_this): Make static.
	(is_complete): Likewise.
	(implicit_conversion): Likewise.
	(reference_binding): Likewise.
	(standard_conversion): Likewise.
	(strip_top_quals): Likewise.
	(non_reference): Likewise.
	(build_conv): Likewise.
	(user_harshness): Likewise.
	(rank_for_ideal): Likewise.
	* decl.c (start_decl_1): Delete forward decl.
	(push_decl_level): Make static.
	(resume_binding_level): Make static.
	(namespace_bindings_p): Make static.
	(declare_namespace_level): Make static.
	(lookup_name_real): Make static.
	(duplicate_decls): Make static.  Take register off NEWDECL and
	OLDDECL parm decls.
	* decl2.c (get_sentry): Make static.
	(temp_name_p): Delete fn.
	* except.c (auto_function): Delete decl.
	* lex.c (handle_{cp,sysv}_pragma): Make static.
	(handle_sysv_pragma) [HANDLE_SYSV_PRAGMA]: Add forward decl.
	* method.c (do_build_{copy_constructor,assign_ref}): Make static.
	* pt.c (tsubst_expr_values): Make static.
	* rtti.c (combine_strings): Delete decl.

Tue Jan 28 16:40:40 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (push_template_decl): Handle getting a typedef.

	* call.c (build_new_function_call): Complain about void arg.

Tue Jan 28 15:25:09 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (duplicate_decls): Give pedwarn of different exceptions
	if -pedantic, instead of olddecl !DECL_IN_SYSTEM_HEADER.

Mon Jan 27 19:21:29 1997  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Don't expand the cleanup tree here,
	since we are not going to write the rtl out.  Fixes problem with
	-g -O on SPARC.

Mon Jan 27 16:24:35 1997  Sean McNeil  <sean@mcneil.com>

	* Make-lang.in: Add $(exeext) as necessary.

Mon Jan 27 13:20:39 1997  Mike Stump  <mrs@cygnus.com>

	* parse.y (handler_seq): Must have at least one catch clause.

Sat Jan 25 12:00:05 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (add_builtin_candidate): Restore ?: hack.

	* decl.c (grok_op_properties): More warnings.

Sat Jan 25 08:50:03 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (duplicate_decls): On second thought, do it as a pedwarn
	still but only if !DECL_IN_SYSTEM_HEADER (olddecl).

	* decl.c (duplicate_decls): Scale back to a warning, and only do
	'em if -pedantic.

Fri Jan 24 17:52:54 1997  Mike Stump  <mrs@cygnus.com>

	* decl.c (duplicate_decls): pedwarn mismatched exception
	specifications.

Thu Jan 23 18:18:54 1997  Mike Stump  <mrs@cygnus.com>

	* call.c (build_new_method_call): Don't display the invisible
	argument for controlling virtual bases.

Thu Jan 23 16:48:10 1997  Mike Stump  <mrs@cygnus.com>

	* new: Add nothrow new and delete, bad_alloc and throw specifications
	for delete.
	* decl.c (init_decl_processing): Add throw specification for delete.
	* new.cc (nothrow): Define.
	* lex.c (real_yylex): Removing warning that throw and friends are
	keywords.
	* new1.cc (operator new (size_t sz, const nothrow_t&)): Define.
	* new2.cc (operator new[] (size_t sz, const nothrow_t&): Define.
	* Make-lang.in: Add new{1,2}.{cc,o}.

Thu Jan 23 16:39:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (cons_up_default_function): Fix return type of synth op=.

	* init.c (emit_base_init): Add warnings for uninitialized members
	and bases.

	* decl.c (xref_basetypes): Add warning for non-polymorphic type
	with destructor used as base type.

	* decl.c (grok_op_properties): Add warning for op= returning void.
	* typeck.c (c_expand_return): Add warning for op= returning anything
	other than *this.

	* class.c (finish_struct_1): Add warning for class with pointers
	but not copy ctor or copy op=.

	* cp-tree.h (TI_PENDING_TEMPLATE_FLAG): New macro.
	* pt.c (add_pending_template): Use it instead of LANG_FLAG_0.
	(instantiate_template): If -fexternal-templates, add this
	instantiation to pending_templates.

	* decl2.c (copy_assignment_arg_p): Disable old hack to support
	Booch components.

Tue Jan 21 18:32:04 1997  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert): pedwarn enum to pointer conversions.

Mon Jan 20 17:59:51 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (standard_conversion): Handle getting references.  Tack
	on RVALUE_CONV here.  Do it for non-class types, too.
	(reference_binding): Pass references to standard_conversion.
	(implicit_conversion): Likewise.
	(add_builtin_candidate): Disable one ?: kludge.
	(convert_like): Handle RVALUE_CONVs for non-class types.
	(joust): Disable the other ?: kludge.

Mon Jan 20 14:53:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (init_decl_processing): Add code to build up common
	function types beforehand, to avoid creation then removal of
	things already in the hash table.

Mon Jan 20 14:43:49 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (finish_function): Also zero out DECL_INCOMING_RTL for
	the arguments.

	* error.c (dump_expr, TEMPLATE_CONST_PARM): Don't require
	current_template_parms.

Fri Jan 17 10:25:42 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (lookup_field): Don't return a function, check want_type.

Thu Jan 16 18:14:35 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Make sure PLACEMENT has a type.

Thu Jan 16 17:40:28 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Support new (nothrow).

Wed Jan 15 12:38:14 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): Also do push_to_top_level before setting
	up DECL_INITIAL.

	* cp-tree.h (PARM_DEFAULT_FROM_TEMPLATE): New macro.
	* pt.c (tsubst): Defer instantiation of default args.
	* call.c (build_over_call): Until here.

Wed Jan 15 10:08:10 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* search.c (lookup_field): Make sure we have an
	IDENTIFIER_CLASS_VALUE before we try to return it.

Thu Jan  9 07:19:01 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (build_method_call): Delete unused var PARM.
	(build_overload_call_real): Likewise.
	(build_object_call): Delete unused var P.
	(build_new_op): Likewise.
	* decl.c (builtin_type_tdescs_{arr, len, max}): #if 0 out static
	var definitions, which are never used.
	(shadow_tag): Delete unused var FN.
	* expr.c (cplus_expand_expr): Delete unused var ORIGINAL_TARGET.
	* init.c (build_new): Delete unused var ALLOC_TEMP.
	* method.c (hack_identifier): Delete unused var CONTEXT.
	(do_build_copy_constructor): Delete unused var NAME.
	(synthesize_method): Delete unused var BASE.
	* pt.c (lookup_template_class): Delete unused var CODE_TYPE_NODE.
	* rtti.c (build_headof): Delete unused var VPTR.
	(get_typeid): Delete unused var T.
	* typeck.c (build_conditional_expr): Delete unused vars ORIG_OP1
	and ORIG_OP2.
	(build_ptrmemfunc): Delete unused vars U and NINDEX.
	* typeck2.c (build_functional_cast): Delete unused var BINFO.

Wed Jan  8 13:09:54 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (lookup_field): Use IDENTIFIER_CLASS_VALUE to look up
	things in a type being defined.
	* decl.c (finish_enum): Reverse the values so that they are in
	the correct order.

	* pt.c (instantiate_class_template): Don't initialize
	BINFO_BASETYPES until the vector is filled out.
	(unify): Don't abort on conflicting bindings, just fail.
	(instantiate_decl): Do push_tinst_level before any tsubsting.

	* method.c (build_overload_value): Handle getting a
	TEMPLATE_CONST_PARM for a pointer.

Tue Jan  7 14:00:58 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (expand_member_init): Don't give 'not a base' error for
	templates.

	* pt.c (instantiate_decl): Call import_export_decl later.

	* pt.c (instantiate_class_template): Return a value.

	* parse.y (extension): New rule for __extension__.
	(extdef, unary_expr, decl, component_decl): Use it.

Tue Jan  7 09:20:28 1997  Mike Stump  <mrs@cygnus.com>

	* class.c (base_binfo): Remove unused base_has_virtual member.
	(finish_base_struct): Likewise.
	(finish_struct_1): Likewise.



Copyright (C) 1997 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.
