Sun Nov 26 14:47:42 1995  Richard Kenner  <kenner@mole.gnu.ai.mit.edu>

	* Version 2.7.2 released.

Mon Nov 20 14:05:00 1995  Mike Stump  <mrs@cygnus.com>

	* g++.c (pfatal_with_name): Add missing third argument to concat.

Thu Oct 26 13:59:54 1995  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_aggr_init): Handle cv qualifiers on the object's
	type.

Sat Nov 11 08:25:55 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Version 2.7.1 released.

Thu Nov  2 17:02:47 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (convert_harshness): Handle references to arrays.

Fri Oct 27 14:20:21 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (comp_target_types): Check multi-level pointer
	conversions in both directions.

Tue Oct 17 21:39:05 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (explicit_instantiation): Fix 'extern template' with no
	return type.

Mon Oct 16 14:35:20 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (explicit_instantiation): Support automatic instantiation
	of constructors.
	(named_class_head_*): Support out-of-class definition of nested
	types.

Wed Oct 11 12:20:56 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (envelope_add_decl): New routine.  Fix so that
	methods are hidden in the same way that other members are.
	(dfs_pushdecls): Cleanup and move functionality out of line,
	into envelope_add_decl.

Tue Oct 10 15:46:01 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (mark_addressable): Only call assemble_external if we
	have started the output file.

Tue Oct 10 11:27:18 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (start_function): Fix earlier cv-quals change.

Mon Oct  9 23:53:05 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (complex_direct_notype_declarator): Only push the class if
	we are not already in the class.

Mon Oct  9 11:22:03 1995  Doug Evans  <dje@canuck.cygnus.com>

	* decl.c (duplicate_decls): Call merge_machine_decl_attributes.
	Update olddecl's attributes too.
	(grokdeclarator): #if 0 out call to build_decl_attribute_variant.
	* typeck.c (common_type): Call merge_machine_type_attributes.

Fri Oct  6 14:44:27 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (mark_addressable): Add missing call to
	assemble_external.

Wed Oct  4 15:06:39 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (store_parm_decls): Make sure the unwinder start comes
	before the exception specification start.
	* except.c (expand_exception_blocks): Make sure the unwinder end
	comes after the terminate protected catch clause region and after
	the end of the exception specification region.

Wed Oct  4 12:47:02 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (real_yylex): Fix identifier case for linemode.
	(handle_sysv_pragma): Don't abort when we see a pragma we don't
	recognize.

Tue Oct  3 14:09:46 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (store_parm_decls): Add a call to start_eh_unwinder.
	* except.c (init_exception_processing): __throw doesn't take any
	arguments.
	(expand_builtin_throw): Likewise.  Always use Pmode, instead of SImode
	for all pointers.  Use expand_builtin_return_addr to unwind the
	first level off the stack.
	(do_unwind): Always use Pmode, instead of SImode for all pointers.
	(expand_exception_blocks): Add a call to end_eh_unwinder.
	(start_eh_unwinder, end_eh_unwinder): New routines to build machine
	independent stack unwinders for function/method calls.

Mon Oct  2 17:20:42 1995  Mike Stump  <mrs@cygnus.com>

	* tree.c (unsave_expr_now): Make sure we process the argument list
	of any called functions.  Fixes incorrect code generation for
	cleanups.

Mon Oct  2 13:04:16 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Save function if it
	needs it.  Cures core dump on things like (this->*(f()))().

Sat Sep 23 22:51:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Conform to gcc cv-quals convention (no
	expression has a cv-qualified type) in RESULT_DECLs.
	* method.c (make_thunk): Likewise.

Fri Sep 22 10:21:13 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (pushtag): Add in the namespace name for the tag.

Thu Sep 21 13:11:13 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (maybe_base_class_list, base_class_list, base_class,
	base_class_access_list): Make sure we see the typenames for base
	classes.
	* lex.c (see_typename): Instead of failing to see a typename when
	there is no next token, perfer a typename, and get the next token.

Wed Sep 20 12:35:27 1995  Michael Meissner  <meissner@cygnus.com>

	* decl.c (init_decl_processing): Add __builtin_expect.

Tue Sep 19 16:48:11 1995  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert_to_pointer): Don't allow leftover conversions to
	or from pointer to member functions, they must all be handled before
	this point.

Fri Sep 15 17:14:47 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (resolve_offset_ref): Fix wording of non-static member
	being referenced as a static.

Fri Sep 15 12:39:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_indirect_ref): Only bash pointer if we actually
	call build_expr_type_conversion.

Thu Sep 14 18:24:56 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_expr_type_conversion): Handle conversion from
	reference.
	* typeck.c (build_indirect_ref): Avoid infinite recursion.

Thu Sep 14 17:23:28 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (expand_start_early_try_stmts): New routine to start a try
	block at the start of the function, for function-try-blocks.
	* cp-tree.h (expand_start_early_try_stmts): Declare it.
	* parse.y (function_try_block): Use it, instead of doing it here, as
	we don't want to include rtl.h here, as that conflicts with RETURN
	in the parser.

Wed Sep 13 18:32:24 1995  Mike Stump  <mrs@cygnus.com>

	* lex.c (reinit_parse_for_block): Support saving inline
	function-try-blocks, uses peekyylex.
	* parse.y (eat_saved_input): New rule, permit the parser to see that
	END_OF_SAVED_INPUT is ok, as it can see this when parsing the
	handlers of a function-try-block.
	(fndef): Use it.
	(component_decl): Make sure TRY and RETURN can come after fn.def2.
	* spew.c (peekyylex): New routine to peek at what will come next.

Wed Sep 13 16:52:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (comptypes): Tighten up comparisons of template type
	parms.

	* decl.c (duplicate_decls): Turn off whining about virtual functions
	redeclared inline for now.

Wed Sep 13 11:13:40 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (store_in_parms): New routine to put things before we
	put base inits.
	* cp-tree.h (store_in_parms): Declare it.
	* decl.c (store_parm_decls): Use it to makr sure the starting of the
	eh spec comes before base inits.
	(finish_function): Use sequences instead of the obsolete
	reorder_insns.
	* parse.y (fndef): Enhance readability and maintainability.  Update
	to include function_try_block syntax.
	(function_try_block): Add.

Tue Sep 12 17:43:07 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (convert_harshness): Use comptypes, not ==, to check if
	TYPE and PARMTYPE are equivalent on a function type.

Tue Sep 12 17:31:33 1995  Douglas Rupp  <drupp@cs.washington.edu>

	* Make-lang.in (cc1plus): Removed unnecessary $(exeext).

Mon Sep 11 23:24:07 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Never allocate storage for thrown pointer
	to objects.

Mon Sep 11 19:36:45 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Pointers to objects come
	back from catch matching already dereferenced, don't dereference
	again.

Mon Sep 11 15:46:28 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Only decay the throw expression, don't do
	any default conversions.  This is so that one can throw and catch
	characters, and not have them match integers.

Mon Sep 11 13:46:45 1995  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_aggr_type): Deal with anonymous unions that don't
	have a TYPE_NAME.

Fri Sep  8 20:40:27 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (handle_sysv_pragma): Deal with getting a comma from yylex.

Fri Sep  8 15:51:41 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_end_eh_spec): Handle empty EH specifications.

Fri Sep  8 15:27:22 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (expand_start_eh_spec): Declare new routine.
	(expand_end_eh_spec): Likewise.
	* decl.c (store_parm_decls): Call expand_start_eh_spec to process
	exception specifications.
	* except.c (expand_leftover_cleanups): Remove unused parameter.
	(expand_end_catch_block): Likewise.
	(expand_exception_blocks): Likewise.
	(expand_start_eh_spec): New routine to mark the start of an
	exception specification region.
	(expand_end_eh_spec): New routine to mark the end of an exception
	specification region.
	(expand_exception_blocks): Call expand_end_eh_spec to process
	exception specifications.

Fri Sep  8 14:40:48 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* lex.c (do_identifier):  Use global binding in preference of
	dead for local variable.

Wed Sep  6 19:32:59 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (build_exception_variant): Remove used first argument.
	* decl.c (duplicate_decls): Likewise.
	(grokfndecl): Likewise.
	(revert_static_member_fn): Likewise.
	* decl2.c (grok_method_quals): Likewise.
	* tree.c (build_exception_variant): Likewise.
	* typeck.c (common_type): Likewise.
	* decl2.c (grokclassfn): After changing the type, call
	build_exception_variant, if necessary.

Tue Sep  5 15:56:27 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Run cleanups for the throw expression.

Wed Aug 30 15:24:38 1995  Stephen L. Favor  <sfavor@tigger.intecom.com>

	* except.c (expand_builtin_throw): Moved gen_label_rtx calls beyond
	the store_parm_decls call which does initialization in the emit_*
	code concerning label numbering.

Thu Aug 31 09:01:07 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_internal_throw): Let the frontend be responsible
	for managing all frontend EH parameters, the backend routine only
	needs to deal with backend values.  type and value are no longer
	passed to __throw.
	(init_exception_processing): Likewise.
	(expand_start_all_catch): Likewise.
	(expand_end_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_builtin_throw): Likewise.
	(expand_throw): Likewise.

Tue Aug 29 15:04:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h (DECL_REAL_CONTEXT): Give the real declaration context
	for a decl.
	* decl.c (cp_finish_decl): Use it.

Tue Aug 29 10:30:27 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_internal_throw): Oops, almost forgot type and
	value are now trees.

Mon Aug 28 17:57:45 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Fix the attribute handling to make sure they get noted before we
	create the function's RTL, in case they can affect that.
	* decl.c (grokfndecl): New arg ATTRLIST.  Run
	cplus_decl_attributes before creating the decl's rtl.
	(grokdeclarator): New arg ATTRLIST, passed down into grokfndecl.
	(shadow_tag, groktypename, start_decl, start_method): Pass a
	NULL_TREE to grokdeclarator's new last arg.
	* decl2.c (grokfield): New arg ATTRLIST, passed into grokdeclarator.
	(grokbitfield, grokoptypename): Pass a NULL_TREE to
	grokdeclarator's new last arg.
	* except.c (expand_start_catch_block): Likewise.
	* pt.c (process_template_parm, end_template_decl,
	do_function_instantiation): Likewise.
	* cp-tree.h (grokfield): Add arg.
	(grokdeclarator): Move the prototype from here...
	* decl.h: ...to here.
	* lex.c (cons_up_default_function): Pass NULL_TREE to grokfield
	ATTRLIST argument.
	* parse.y: Create a list for the grokfield arg where appropriate,
	and pass it down instead of calling cplus_decl_attributes.

Mon Aug 28 15:07:24 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Always allow turning on exception handling.  Allow cross
	compilations to use EH.

Thu Aug 24 17:39:24 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (saved_pc, saved_throw_type, saved_throw_value): Use
	trees, instead of rtxs, and don't depend on using special machine
	dependent registers.
	(expand_internal_throw): Likewise.
	(init_exception_processing): Likewise.
	(expand_start_all_catch): Likewise.
	(expand_end_all_catch): Likewise.
	(expand_start_catch_block): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_builtin_throw): Likewise.
	(expand_throw): Likewise.

Wed Aug 23 17:25:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (build_expr_type_conversion): Handle conversions to
	reference types.

Wed Aug 23 15:33:59 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (do_unwind): Work around backend bug with -fpic.

Tue Aug 22 17:20:07 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl2.c (flag_new_for_scope):  Add a new mode that follows ANSI
	for-scoping, but supports (and warns about) old programs.
	Make the new mode (with value 1) the default.
	(lang_f_options):  The on-value for flag_new_for_scope is now 2.
	* cp-tree.h (DECL_DEAD_FOR_LOCAL, DECL_ERROR_REPORTED): New macros
	(DECL_SHADOWED_FOR_VAR):  Likewise.
	* decl.c (struct binding_level):  New fields dead_vars_from_for
	and is_for_scope.
	(note_level_for_for):  New function.
	(poplevel):  Special processing if is_for_scope.
	(pushdecl):  Warn if for-scope variable shadows local.
	* lex.c (do_identifier):  Handle old (non-ANSI) for scoping,
	and warn if conflicts.
	* parse.y (FOR):  Call note_level_for_for.

Mon Aug 21 10:28:31 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (import_export_inline): Class interface hackery does not
	apply to synthesized methods.

Sun Aug 20 16:29:00 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (virtual_context): Find the right context more often.
	Solves a `recoverable compiler error, fixups for virtual function'
	problem.

Sun Aug 20 13:53:24 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_all_catch): Ensure that we always transfer
	control to the right EH handler, by rethrowing the end label on the
	region, instead of hoping we are nested and falling through.
	(expand_leftover_cleanups): Likewise.
	(end_protect): Since we now rethrow the end label, put a
	nop after it, so that outer regions are recognized.
	* init.c (build_vec_delete_1): New routine to handle most of vector
	deleting, all code moved here from build_vec_delete.
	(build_array_eh_cleanup): Use build_vec_delete_1 to do all the real
	work.
	(expand_vec_init): If the array needs partial destructing, setup an
	EH region to handle it.
	(build_vec_delete): Move lots of code to build_vec_delete_1, use
	build_vec_delete_1 to do the grunt work.

Sat Aug 19 14:25:33 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Handle decl attributes properly for function definitions without
	previous attribute-loaded declarations.
	* decl.c (start_function): New arg ATTRS.  Add a call to
	cplus_decl_attributes with it before we create the RTL.
	* cp-tree.h (start_function): Update prototype.
	* parse.y (fn.def1): Pass ATTRS into start_function instead of
	trying to call cplus_decl_attributes too late.  Pass a NULL_TREE
	for other use.
	* decl2.c (finish_file): Pass NULL_TREE as fourth arg to
	start_function.
	* method.c (synthesize_method): Likewise.
	* except.c (expand_builtin_throw): Likewise for start on __throw.

Sat Aug 19 13:36:08 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (set_rtti_entry): Turn on -fvtable-thunk -frtti support.
	This changes -fvtable-thunks vtable layout, so a recompile will be
	necessary, if you use -fvtable-thunks.
	(get_vtable_entry): Use n, instead of i to be consistent with the
	rest of the compiler.
	(get_vtable_entry_n): Likewise.
	(add_virtual_function): Add a slot for the tdesc, if -fvtable-thunks
	are being used.
	(finish_struct_1): Likewise.
	(skip_rtti_stuff): New routine to collapse similar code from many
	different parts of the compiler.  I think I got them all.
	(modify_one_vtable): Use it.
	(fixup_vtable_deltas1): Likewise.
	(override_one_vtable): Likewise.
	* decl2.c (mark_vtable_entries): Likewise.
	* tree.c (debug_binfo): Likewise.
	* search.c (expand_upcast_fixups): Likewise.
	(get_abstract_virtuals_1): Likewise.  Use virtuals, instead of tmp to
	consistent with the rest of the compiler.
	(get_abstract_virtuals): Likewise.
	* cp-tree.h (skip_rtti_stuff): New routine, declare it.
	* gc.c (build_headof): Support -fvtable-thunk and -frtti together.
	(build_typeid): Likewise.
	(build_classof): Remove old style way of doing rtti.  Remove support
	for `classof' and `headof'.
	* gxx.gperf: Likewise.
	* hash.h: Likewise.
	* parse.y: Likewise.

Fri Aug 18 17:31:58 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_function): Clear ctor_label and dtor_label.

	* class.c (finish_struct_1): Fix handling of access decls.

Tue Aug 15 19:21:54 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Only do minimal processing here, so it
	can be used for class template definitions, as well.
	(finish_struct_1): New function with the rest of the code.

Tue Aug 15 09:46:16 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (prepare_fresh_vtable): On second though, always build the
	offset (see Aug 10 change), unless -fvtable-thunks is given.  It
	does this by calling the new routine set_rtti_entry.
	(finish_struct): Likewise.
	(set_rtti_entry): New routine to update the rtti information at the
	start of the vtable.

Mon Aug 14 12:21:22 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* error.c (dump_decl, case IDENTIFIER_NODE): Only work on a dtor
	if it's declared in the C++ language spec.
	(dump_function_decl): Likewise.
	(dump_function_name): Likewise.
	(ident_fndecl): Make sure we got something back from lookup_name.
	* decl.c (start_function): Likewise.

Fri Aug 11 16:52:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't call build_new when calling a
	constructor without an instance.

Thu Aug 10 20:00:17 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (prepare_fresh_vtable): Always build the offset to the
	complete object, as it doesn't cost much.  This allows dynamic_cast
	to void * to work when -frtti isn't given.
	(finish_struct): Likewise.

Thu Aug 10 16:31:28 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (build_eh_type): Split out some functionality to new
	routine named build_eh_type_type.
	(build_eh_type_type): New routine.
	(expand_start_catch_block): Use build_eh_type_type, as we never want
	the dynamic type of the catch parameter, just the static type.
	Fixes core dumps when -frtti is used and one catchs pointers to
	classes.

Thu Aug 10 14:55:29 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Since we now use normal calling
	conventions for __throw, we have to remove the first layer off the
	stack, so that the next context we search for handlers is the outer
	context instead of the context that had the call to __throw, if we
	don't immediately find the desired context.

Tue Aug  8 17:44:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (cp_expand_decl_cleanup): Returns int, not tree.
	* cp-tree.h: Update.

	* parse.y (template_type_parm): Add support for `typename'.

Tue Aug  8 12:06:31 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_internal_throw): New internal routine to throw a
	value.
	(expand_end_all_catch, expand_leftover_cleanups): All throwers
	changed to use `expand_internal_throw' instead of jumping to throw
	label.
	(expand_end_catch_block, expand_throw): Likewise.
	(throw_label): Removed.
	(expand_builtin_throw): Changed so that EH parameters are passed by
	normal function call conventions.  Completes Aug 4th work.

Fri Aug  4 17:17:08 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (expand_builtin_throw): Declare it.
	* decl2.c (finish_file): Call expand_builtin_throw.
	* except.c (make_first_label): Remove.
	(init_exception_processing): Don't use a LABEL_REF for throw_label,
	instead use a SYMBOL_REF, this is so that we don't use LABEL_REFs in
	other functions that don't really appear in those functions.  This
	solves a problem where cc1plus consumed exponential amounts of
	memory when -Wall was used.
	(expand_end_all_catch, expand_leftover_cleanups,
	expand_end_catch_block, expand_throw): Change all uses of
	throw_label to match new style.
	(do_unwind): Rename parameter to inner_throw_label, as it is now
	different from throw_label.  Also, assume that our caller will wrap
	the passed label with a LABEL_REF, if needed.
	(expand_builtin_throw): Make external, change so that the generated
	throw is now a real function.
	(expand_exception_blocks): Never generate throw code inside another
	function.

Fri Aug  4 12:20:02 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Move checking of mutable const objects
	and mutable static objects down, as we might decide during parsing
	to unset staticp or constp (for example, when const is part of the
	object being pointed to).

Thu Aug  3 17:13:43 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (output_exception_table_entry): Enhance portability to
	weird machines.
	(emit_exception_table): Likewise.

Thu Aug  3 16:41:38 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_ptrmemfunc): Handle casting of pointer to
	non-virtual member functions.

Wed Aug  2 11:58:25 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_typeid): Strip cv qualifiers so that const T&, T&, T
	and const T all match.

Wed Aug  2 11:25:33 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (build_eh_type): Strip cv qualifiers so that const T&,
	T&, T and const T all match.

Tue Aug  1 14:20:16 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Fix up comments, cleanup code and eliminate exceptNode,
	exceptStack, exceptstack, push_except_stmts, pop_except_stmts,
	new_except_stack, push_last_insn, pop_last_insn, insn_save_node and
	InsnSave.  Also, numerous speed improvements, and correctness
	improvements.  Double faulting in all situations should now be
	handled correctly.
	(expand_start_all_catch): Instead of having many terminate protected
	regions, just have one.
	(expand_start_catch_block): No longer have to protect
	false_label_rtx, as it isn't used for EH region marking.
	(expand_end_catch_block): Expand out EH cleanups here by using
	expand_leftover_cleanups.
	(expand_end_all_catch): Use sequences instead of playing with insn
	links directly.
	(expand_exception_blocks): Likewise.  Also protect all catch clauses
	with one terminate region.

Mon Jul 31 13:24:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (report_type_mismatch): Don't talk about an object
	parameter for non-methods.

Sun Jul 30 13:13:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Catch private and protected members of
	anonymous unions here.
	* decl2.c (finish_anon_union): And here.
	* parse.y: Instead of here.

	* errfn.c (ARGSLIST): Support passing four args.
	* error.c (cv_as_string): New function.
	(cp_printers): Add it.
	* call.c (build_method_call): Report 'const' at end of pseudo-decl.

	* method.c (report_type_mismatch): Deal with a bad_arg of 0.

	* init.c (expand_aggr_init): Handle volatile objects, too.

Sat Jul 29 13:42:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (struct binding_level): Keep list of incomplete decls.
	(print_binding_level): Use list_length to count them.
	(pushdecl): Build up the list.
	(hack_incomplete_structures): Walk it and prune completed decls.

Fri Jul 28 15:26:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (comp_target_types): Don't check const and volatile for
	function types.
	(comp_ptr_ttypes_real): Likewise.

Thu Jul 27 15:40:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (comp_target_types): Fix.

Thu Jul 27 15:10:48 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (unsave_expr_now, build_unsave_expr,
	cp_expand_decl_cleanup): Declare new routines.
	* decl.c (cp_finish_decl, store_parm_decls,
	hack_incomplete_structures): Change all cals from
	expand_decl_cleanup to cp_expand_decl_cleanup.
	* gc.c (protect_value_from_gc): Likewise.
	* expr.c (cplus_expand_expr): Handle UNSAVE_EXPRs.
	* tree.c (unsave_expr): New routine to build an UNSAVE_EXPR.
	(unsave_expr_now): Backend routine used by tree expander.
	(cp_expand_decl_cleanup): Wrap second argument in an UNSAVE_EXPR to
	work around a limitation in the backend.  The backend uses the
	cleanups multiple times, on disjoint control flows, so we cannot
	pass unsaved SAVE_EXPRs to the backend.
	* tree.def (UNSAVE_EXPR): New tree code.
	* typeck.c (c_expand_return): Move goto/return code up inside
	conditional, as we don't always want to do this, we only want to do
	this when we don't otherwise finish with this control flow.

Thu Jul 27 10:38:43 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (typespec): Only complain about typeof if we're not
	getting it from a system header.

Thu Jul 27 10:26:23 1995  Doug Evans  <dje@canuck.cygnus.com>

	Clean up prefix attribute handling.
	* parse.y (reserved_declspecs): Link prefix attributes with declspecs.
	(declmods): Likewise.
	(all rules that reference typed_declspecs and declmods): Call
	split_specs_attrs or strip_attrs to separate declspecs and attrs.
	(lang_extdef): Delete resetting of prefix_attributes.
	(template_def, notype_declarator rule): Use NULL_TREE for
	prefix_attributes.
	(condition): Use NULL_TREE for prefix_attributes.
	(setattrs): Deleted.
	(nomods_initdcl0): Set prefix_attributes to NULL_TREE.
	(component_decl): Delete resetting of prefix_attributes.
	(component_decl_1, notype_components rule): Use NULL_TREE for
	prefix_attributes.
	(simple_stmt): Delete resetting of prefix_attributes.

Mon Jul 24 13:37:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): Deal with reference conversions before
	others.  Actually do array->pointer decay.  Call comp_target_types
	with pointer types rather than their targets.

	* typeck.c (comp_target_types): Avoid assigning D const * to B *.

Mon Jul 24 08:54:46 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* pt.c (to_be_restored): Move decl to global scope.

Sat Jul 22 12:22:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_decl): Put back clearing of DECL_IN_AGGR_P.

Fri Jul 21 17:09:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokdeclarator): Downgrade error about 'extern int A::i'
	to pedwarn.

	* pt.c (instantiate_template): Also avoid instantiation if the
	function has already been declared to be a specialization.

	* decl2.c (check_classfn): Ignore cname argument, and return the
	matching function.

	* decl.c (start_decl): Handle declarations of member functions
	outside of the class (i.e. specialization declarations).

Thu Jul 20 10:34:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Don't mess with the type of bitfields.

	* various.c: s/TYPE_POINTER_TO/build_pointer_type/.

Thu Jul 20 01:43:10 1995  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_aggr_init): Assume LOOKUP_ONLYCONVERTING if init
	is not a parameter list (TREE_LIST).
	(expand_default_init): If LOOKUP_ONLYCONVERTING is set, then set
	LOOKUP_NO_CONVERSION so that we don't allow two-level conversions,
	but don't set it otherwise.

Wed Jul 19 20:32:01 1995  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_default_init): Don't allow two-level conversions
	during construction.

Wed Jul 19 18:06:37 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_headof): The type of dyncasting to a pointer to cv
	void, should be pointer to cv void.

Wed Jul 19 17:25:43 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_dynamic_cast): Allow casting in const.

Wed Jul 19 16:34:27 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_const_cast): If we are passed error_mark_node,
	return it.

Wed Jul 19 15:24:48 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* class.c (push_nested_class): Make sure TYPE is non-nil.

	* cvt.c (type_promotes_to): Watch for error_mark_node on the
	incoming TYPE.

Wed Jul 19 13:23:12 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* cp-tree.h (SIGTABLE_VT_OFF_NAME): Renamed from SIGTABLE_OFFSET_NAME.
	(SIGTABLE_VB_OFF_NAME): New macro.
	(vt_off_identifier): Renamed from offset_identifier.
	(vb_off_identifier): Added extern declaration.

	* decl.c (vt_off_identifier): Renamed from offset identifier.
	(vb_off_identifier): New variable to hold the identifier for the
	sigtable field vb_off.
	(init_decl_processing): Initialize vb_off_identifier.
	Renamed vt_off_identifier from offset_identifier.
	* sig.c (build_signature_method_call): Renamed offset_identifier and
	local variable offset to vt_off_identifier and vt_off, respectively.
	* sig.c (build_signature_table_constructor): Renamed offset to vt_off.

	* decl.c (init_decl_processing): Add vb_off field to
	sigtable_entry_type.  Reorder fields so that pfn gets properly
	aligned at a 64 bit boundary on the Alpha.
	* sig.c (build_signature_table_constructor): Build the constructor
	according to the new layout.  Set the vb_off field to -1 for now.

	* decl.c (init_decl_processing): Align sigtable_entry_type on word
	boundaries instead of double word boundaries to save space.

Tue Jul 18 16:58:37 1995  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert): Always call build_cplus_new for a ctor.

Tue Jul 18 14:24:53 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (opt.component_decl_list): Only forbid private/protected
	in anonymous unions.  We need to make this know when the type is
	defined for an object, to not give the error.

Mon Jul 17 14:22:44 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (opt.component_decl_list): Don't allow access control
	as private or protected for union members.

Sun Jul 16 14:01:00 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* lex.c (check_newline): For 'p' case, move goto skipline line to
	before end brace for 'pragma'.

Fri Jul  7 13:55:58 1995  Mike Stump  <mrs@cygnus.com>

	* g++.1: Tiny updates.

Fri Jul  7 13:05:20 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (cp_finish_decl): Only destruct local static variables if
	they are constructed, and only construct the first time control
	passes completely through its declaration (if not initialized with a
	constant-expression).
	(expand_static_init): Likewise.

Wed Jul  5 14:05:04 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (comptypes, case OFFSET_REF): If either offset basetype
	is a TEMPLATE_TYPE_PARM, give a match.

Fri Jun 30 15:42:57 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (build_overload_value): Handle encoding of null pointer
	constants (or any pointer with a constant numeric value) for
	templates.

Fri Jun 30 13:45:51 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (convert_harshness): Add QUAL_CODE when we're faced with
	const vs non-const for void conversions.

Fri Jun 30 10:19:52 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_all_catch): Fix problem with finding an
	outer nested try block when there is no code to separate it from an
	inner try block.

Fri Jun 30 02:22:26 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (dfs_pushdecls): Consume 2 or 3 orders of magnitude less
	memory please when virtual bases are used.

Thu Jun 29 19:03:47 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Avoid testing things that cannot be
	null to see if they are null.
	* cvt.c (convert_pointer_to_vbase): Remove code that doesn't work.
	* decl.c (finish_function): Pass a type into the new
	convert_pointer_to_vbase instead of a binfo.
	* search.c (convert_pointer_to_vbase): Rewritten to use get_vbase
	and convert_pointer_to_real.
	(expand_indirect_vtbls_init): Use convert_pointer_to_vbase instead
	of the more cryptic call to get_vbase.

Thu Jun 29 09:35:05 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): Fix broken SLOW_BYTE_ACCESS check.

Thu Jun 29 03:43:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_template): Don't strip 'this' twice.

	* pt.c (coerce_template_parms): Allow null pointer constants.

	* decl.c (revert_static_member_fn): But only if DECL_ARGUMENTS is
	set.

Wed Jun 28 18:39:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (revert_static_member_fn): Also remove 'this' from
	DECL_ARGUMENTS.
	* decl2.c (check_classfn): Don't revert this function until we get a
	match.

Wed Jun 28 14:07:27 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (component_decl): Clear PREFIX_ATTRIBUTES here.

Wed Jun 28 11:05:13 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_file): Handle global vector news.
	* init.c (build_new): Encode vector news so that later we will know
	how many elements there are.

Mon Jun 26 13:38:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (cplus_expand_expr): Don't mess with temp slots.

	* decl2.c (warn_if_unknown_interface): Don't crash if tinst_for_decl
	returns null.

	* decl2.c (check_classfn): Use revert_static_member_fn.
	* decl.c (revert_static_member_fn): Diagnose static member functions
	declared const or volatile.

	* decl2.c (grokfield): Check for missing default args here, too.
	(check_default_args): Function to do the checking.
	* decl.c (pushdecl): Use it.

	* decl.c (pushdecl): Don't warn about shadowing a member of `this'
	if there is no `this'.

Sun Jun 25 11:34:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Downgrade 'called before definition'
	to a warning, as it ought to go away after Monterey.

Sat Jun 24 14:18:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (coerce_template_parms): Don't do extra checking on pointer
	to member arguments.

	* class.c (finish_struct): const and reference members don't prevent
	a class from being an aggregate.

	* class.c (finish_struct): Signatures are always aggregates.

Fri Jun 23 17:20:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (check_classfn): Improve error message.

	* pt.c (tsubst): Handle PROMOTE_PROTOTYPES.

Thu Jun 22 01:50:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (comptypes): Don't ignore method quals.

	* class.c (finish_struct): Non-abstract virtuals are always USED.

	* decl.c (build_ptrmemfunc_type): The underlying union type isn't
	IS_AGGR_TYPE, either.
	* class.c (finish_struct): Use CLASSTYPE_NON_AGGREGATE instead.
	* cp-tree.h: Likewise.

	* cp-tree.h (lang_type): Add aggregate.
	(CLASSTYPE_AGGREGATE): New macro.
	(TYPE_NON_AGGREGATE_CLASS): Likewise.
	* class.c (finish_struct): Determine whether a class is an
	aggregate.
	* decl.c (cp_finish_decl): Check TYPE_NON_AGGREGATE_CLASS instead of
	TYPE_NEEDS_CONSTRUCTING.
	* typeck2.c (digest_init): Check TYPE_NON_AGGREGATE_CLASS for
	subobjects, too.

	* pt.c (tsubst, PARM_TYPE): Propagate DECL_ARTIFICIAL.

	* decl.c (start_function): For pre-parsed functions, layout all of
	the parm decls again.
	(grokvardecl): TREE_PUBLIC depends on DECL_THIS_EXTERN, not
	DECL_EXTERNAL.

	* pt.c (coerce_template_parms): Improve checking for invalid
	template parms.

Wed Jun 21 12:01:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Forbid declaration of a static member
	with the same name as its enclosing class.

Mon Jun 19 10:28:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): Clear current_class_decl.

	* typeck.c (build_conditional_expr): Use convert (boolean_type_node
	instead of truthvalue_conversion.

	* class.c (finish_struct): A data member with the same name as the
	class doesn't suppress constructors.

Fri Jun 16 18:11:39 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* decl.c (start_function): If current_class_decl is a signature
	pointer, don't dereference it but set C_C_D to current_class_decl.

Fri Jun 16 17:06:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Complain about virtual functions
	redeclared to be inline.

Fri Jun 16 13:20:38 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (get_unique_name): New routine to name unnamed namespaces.
	(push_namespace): Use get_unique_name for naming unnamed namespaces.

Thu Jun 15 15:00:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y: Call cplus_decl_attributes with prefix_attributes where
	appropriate.

Wed Jun 14 19:24:49 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (get_vbase): New routine to switch hierarchies from the
	CLASSTYPE_VBASECLASSES to the normal one.
	(expand_indirect_vtbls_init): Use get_vbase to figure out how we
	want to convert to a vbase pointer.

Mon Jun 12 17:50:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_class_template): Add the new instantiation to
	template_classes.
	(do_pending_expansions): Call instantiate_member_templates on all of
	the classes in template_classes.

Mon Jun 12 12:36:59 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (complete_array_type): Fill in the TYPE_DOMAIN of our
	TYPE_MAIN_VARIANT if it is not filled in.
	* init.c (build_delete): If the TYPE_DOMAIN is not set, give an
	error instead of core dumping.

Mon Jun 12 10:41:40 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (can_convert): Also check for distance > 0.
	(can_convert_arg): Likewise.
	(user_harshness): Likewise.

Fri Jun  9 19:17:21 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* g++.c (MATH_LIBRARY): Provide default.
	(main): Always link with the math library if we link with libstdc++.

	* decl.c (start_function): Complain about redefinition of a function
	even when the pending_inline version is compiled after the other
	version.

Thu Jun  8 15:44:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* gc.c (build_dynamic_cast): Build up a reference to a parameter of
	aggregate type.

Wed Jun  7 15:31:57 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_vec_delete): Resolve an offset ref before we try to
	use it.

Wed Jun  7 14:19:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): If the class lacks a constructor or
	assignment operator, return error_mark_node.
	(common_type): Use build_cplus_array_type.

Tue Jun  6 09:41:27 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (dont_allow_type_definitions): New variable set when types
	cannot be defined.
	(finish_struct): Use it.
	* cp-tree.h (dont_allow_type_definitions): Define it.
	* parse.y (primary, handler_seq): Set it.

Mon Jun  5 18:49:38 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (build_opfncall): Use DECL_CHAIN, not TREE_CHAIN for
	results from lookup_fnfields.  Always give warning/error on bad
	code.

Mon Jun  5 11:39:37 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (member_init_ok_or_else): Don't allow initialization of
	an ancestor's member from within a constructor.

Mon Jun  5 11:20:34 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* sig.c (build_signature_table_constructor): Use DECL_CONTEXT
	instead of DECL_CLASS_CONTEXT for calculating the vfield offset so
	abstract virtual functions are handled correctly.

	* sig.c (build_signature_table_constructor): Store the correct
	delta in signature table entries.  It does not yet work for
	classes with virtual base classes as implementations of signatures.
	(build_signature_method_call): Add the delta to the object_ptr
	before generating the function call.

	* call.c (build_method_call): Make instance_ptr the signature
	pointer itself instead of dereferencing the optr.
	* sig.c (build_signature_method_call): Dereference the optr for the
	direct and virtual calls.

	* sig.c (build_signature_table_constructor): Make the tag for
	default implementations -1 instead of 2.
	(build_signature_method_call): Change the generated conditional
	expression correspondingly.

	* sig.c (build_signature_pointer_constructor): Deleted the sorry
	message that said we can't handle multiple inheritance for
	implementations of signatures
	(build_signature_method_call): Use the offset from the sigtable
	entry instead of the vptr field from the signature pointer for
	building a virtual function call.

	* class.c (build_vfn_ref): Deleted signature specific code, we don't
	call this function anymore from build_signature_method_call.

	* cp-tree.h (SIGNATURE_VPTR_NAME): Deleted.  We use the right vptr
	field in the object now instead of in the signature pointer/ref.
	(build_vptr_ref): Deleted extern declaration.
	* sig.c (build_vptr_ref): Deleted.
	(build_signature_pointer_or_reference_type): Deleted construction of
	the vptr field.
	(build_signature_pointer_constructor): Deleted initialization of/
	assignment to the vptr field.

	* sig.c (build_signature_table_constructor): Convert the signature
	table entry fields to their correct types.

	* sig.c (build_signature_table_constructor): Don't call digest_init
	for the fields of a sigtable entry, it's wasted time.

	* sig.c (build_signature_table_constructor): Correctly set the
	offset and index fields of a sigtable entry.  Build the constructor
	the way digest_init does, digest_init can't handle initializing an
	anonymous union inside a struct.
	(build_signature_method_call): Use the index field instead of the
	delta field to get the vtable index.

	* decl.c (init_decl_processing): Fix number of fields for building
	sigtable_entry_type.

	* cp-tree.h (tag_identifier, offset_identifier): Added extern decls.
	(SIGTABLE_CODE_NAME): Renamed to SIGTABLE_TAG_NAME.
	(SIGTABLE_PFN_NAME): Deleted, we'll use VTABLE_PFN_NAME instead.
	* decl.c (tag_identifier, offset_identifier): New variables to
	hold the identifiers for the sigtable fields tag and offset.
	(init_decl_processing): Initialize these variables.
	(init_decl_processing): Use these variables to build the
	sigtable_entry_type structure.  Rename the code and offset fields
	to tag and delta, respectively; add offset and index fields. Changed
	types of fields from short_integer_type_node to delta_type_node.
	* sig.c (build_signature_table_constructor): Rename code and offset
	to tag and delta, respectively.
	(build_signature_method_call): Likewise.  Use above variables.

Thu Jun  1 17:03:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (lookup_name_real): Don't try to look anything up in an
	erroneous object.

Fri Jun  2 10:30:14 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (build_overload_int): New routine.  Break out
	functionality from build_overload_value so we can reuse it.
	(build_overload_value): Handle pointer to member functions as value
	parameters for templates.
	(build_overload_identifier): Since template parameters are shared
	among all instantiations, we have to substitute in the real types
	in TREE_TYPE (parm).
	pt.c (coerce_template_parms): Likewise.
	(push_template_decls): Likewise.
	(grok_template_type): Deleted as template parameters are shared
	among all instantiations.

Wed May 31 19:10:32 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Always give errors on constant overflow
	for array indices.

Wed May 31 11:39:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (commonparms): Don't abort if simple_cst_equal returns < 0.
	(build_c_cast): Don't tack on a NON_LVALUE_EXPR when casting to
	reference type.
	(build_indirect_ref): Fix check for *&.

Fri Jun 16 06:54:03 1995  Mike Stump  <mrs@cygnus.com>

	* Version 2.7.0 released.

Fri Jun 16 15:07:29 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Make-lang.in (DEMANGLER_PROG): Add LIBS.

Thu Jun 15 15:00:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (define_function): Don't set DECL_INTERFACE_KNOWN.

Wed Jun  7 20:00:31 1995  Mike Stump  <mrs@cygnus.com>

	* *.[chy]: Change all callers of finish_decl to cp_finish_decl.
	* decl.c (finish_decl): New routine to handle call backs from the
	mid end (declare_hidden_char_array).

Wed Jun  7 19:02:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Handle setting C_C_D here.
	(set_C_C_D): Removed.
	(struct saved_scope): Remove class_decl.
	(push_to_top_level): Don't save current_class_decl.
	(pop_from_top_level): Don't restore current_class_decl or C_C_D.
	(struct cp_function): Add C_C_D.
	(push_cp_function_context): Save C_C_D.
	(pop_cp_function_context): Restore C_C_D.

Fri Jun  2 11:05:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (set_C_C_D): New function.  suspend_momentary before
	building C_C_D.
	(pop_from_top_level): Call it.
	(start_function): Likewise.
	(pop_cp_function_context): Likewise.

	* class.c, cp-tree.h, decl.c, decl2.c, parse.y: Lose all references
	to current_vtable_decl, CLASSTYPE_INST_VAR and CLASSTYPE_VTBL_PTR.

	* decl.c (push_cp_function_context): Save current_class_decl.
	(pop_cp_function_context): Restore current_class_decl and set C_C_D.
	(pop_from_top_level): Don't use CLASSTYPE_INST_VAR to set C_C_D.
	(start_function): Likewise.

	* class.c (popclass): Don't mess with current_class_decl,
	current_vtable_decl, or C_C_D.

Mon May 29 12:45:10 1995  Paul Eggert  <eggert@twinsun.com>

	* Make-lang.in (c++.mostlyclean): Remove $(DEMANGLER_PROG).

Wed May 24 15:55:18 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* decl.c (duplicate_decls): Check simple_cst_equal result against 0.
	* decl2.c (finish_anon_union): Likewise.
	* method.c (largest_union_member): Likewise.

Wed May 24 14:41:11 1995  H.J. Lu  <hjl@nynexst.com>

	* Make-lang.in (cxxmain.o): Replace single quotes with backslashes.

Mon May 22 17:38:48 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Make-lang.in (g++, g++-cross, cc1plus, DEMANGLER_PROG):
	Use $@ instead of output name so works even if have .exe.
	(cxxmain.o): Use cp if ln -s fails.
	(c++.install-man): Use $(exeext) in executable names.
	(c++.mostlyclean, stage[1-4]): Use $(objext) in object file names.
	* Makefile.in (../cc1plus): Use $(exeext) in name of executable.

Wed May 24 01:39:03 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Parms can be null, duh.

Tue May 23 01:32:09 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): If convert_arguments failed, just bail.

Fri May 19 10:31:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (convert_force): Pass LOOKUP_NORMAL to cp_convert.

	* tree.c (copy_to_permanent): Oops.

Fri May 19 10:01:07 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (break_out_target_exprs): Add decl.

Thu May 18 13:02:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Move *all* interface handling stuff after
	the pushdecl.

	* tree.c (mapcar): Renamed from make_deep_copy and generalized.
	(perm_manip): Return t if permanent, otherwise 0.
	(copy_to_permanent): Use them.
	(bot_manip): Helper for break_out_target_exprs.
	(break_out_target_exprs): New function.  Uses mapcar.

	* typeck.c (convert_arguments): Use it.

	* method.c (hack_identifier): Use convert_from_reference to
	dereference a reference.

Wed May 17 17:54:54 1995  Mike Stump  <mrs@cygnus.com>

	* call.c (convert_harshness): Move reference bashing before pointer
	to member bashing.

Wed May 17 16:57:53 1995  Mike Stump  <mrs@cygnus.com>

	* cvt.c (convert_to_reference): Only complain, if complaints are
	wanted.
	* typeck.c (build_function_call_real): Likewise.  If
	LOOKUP_SPECULATIVELY is set and something won't work, return
	NULL_TREE.
	* cvt.c (cp_convert): Likewise.  Pass flags down to build_method_call.
	(convert): Pass LOOKUP_NORMAL to cp_convert.
	* typeck.c (convert_for_assignment): Likewise.
	(convert_force): Pass LOOKUP_COMPLAIN to cp_convert.
	(convert_arguments): Get out early if we get an error_mark_node.
	(convert_for_initialization): Use cp_convert instead of convert so
	that we can pass flags down.
	* cp-tree.h (LOOKUP_SPECULATIVELY): Added documentation.

Wed May 17 01:43:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck2.c (store_init_value): Don't take the MAIN_VARIANT of the
	decl type.

	* class.c (finish_struct): Don't complain about a class with no
	user-defined constructors but with a member that has no default
	constructor, as this is OK for aggregates.

	* expr.c (cplus_expand_expr, NEW_EXPR): If this is an explicit
	constructor call, mark slot addressable.

Tue May 16 18:37:51 1995  Douglas Rupp  <drupp@cs.washington.edu>

	* g++.c: Changed WINNT to _WIN32.

Tue May 16 12:40:16 1995  Jason Merrill  <jason@lisa.cygnus.com>

	* lex.c (handle_sysv_pragma): Don't use token_buffer.

Tue May 16 12:05:26 1995  Mike Stump  <mrs@cygnus.com>

	* call.c (resolve_scope_to_name): Add initial semantic support for
	namespaces.
	* class.c (finish_struct): Likewise.
	* cp-tree.h (NAMESPACE_LEVEL): Likewise.
	* cvt.c (build_up_reference, convert_to_reference): Likewise.
	* decl.c (binding_level::namespace_p, suspend_binding_level): Likewise.
	(resume_binding_level, toplevel_bindings_p): Likewise
	(namespace_bindings_p, declare_namespace_level): Likewise.
	(resume_level, push_namespace, pop_namespace): Likewise.
	(pop_everything, pushtag, duplicate_decls, pushdecl): Likewise.
	(implicitly_declare, lookup_namespace_name): Likewise.
	(lookup_name_real, start_decl, make_temporary_for_reference): Likewise.
	(obscure_complex_init, finish_decl, expand_static_init): Likewise.
	(grokvardecl, grokdeclarator, parmlist_is_exprlist): Likewise.
	(store_parm_decls, hack_incomplete_structures): Likewise.
	* decl2.c (get_temp_name, finish_anon_union): Likewise.
	(current_namespace, push_namespace, pop_namespace): Likewise.
	(do_namespace_alias, do_toplevel_using_decl): Likewise.
	(do_class_using_decl): Likewise.
	* error.c (dump_decl): Likewise.
	* init.c (build_member_call, build_offset_ref): Likewise.
	* lex.c (identifier_type): Likewise.
	* parse.y (lang_extdef, using_decl, extdef): Likewise.
	(component_decl_1, nested_name_specifier_1): Likewise.
	* spew.c (yylex): Likewise.
	* tree.def (NAMESPACE_DECL): Likewise.

Tue May 16 11:55:35 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (push_overloaded_decl): Return the new decl even if it
	can't be pushed.

Tue May 16 11:00:37 1995  Jason Merrill  <jason@lisa.cygnus.com>

	* typeck.c (decay_conversion): Split out from default_conversion.
	(default_conversion): Call it.
	(build_binary_op): Likewise.
	(build_binary_op_nodefault): Use decay_conversion for truth ops.

Mon May 15 12:47:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (warn_extern_redeclared_static): This is a pedwarn.
	(duplicate_decls): Always use the old decl's linkage info.  Don't
	play with linkage of consts.
	(pushdecl): Don't play with linkage of consts.
	(redeclaration_error_message): Don't complain about an old public
	decl and a new non-public decl here.
	(grokvardecl): Handle linkage of consts here.
	(grokdeclarator): An 'extern inline' is public.  Pass constp to
	grokvardecl.
	(start_function): Wait until after the pushdecl to do some linkage
	stuff.

	* decl2.c (import_export_vtable): Make duplicates weak rather than
	static if supported.
	(import_export_inline): Likewise.
	* pt.c (do_pending_expansions): Likewise.

	* class.c (build_vbase_path): flag_assume_nonnull_objects only
	affects reference conversion.

	* init.c (emit_base_init): Build up an RTL_EXPR and add it to
	rtl_expr_chain.
	* decl.c, decl2.c: s/base_init_insns/base_init_expr/.

Tue May 16 07:06:28 1995  Paul Eggert  <eggert@twinsun.com>

	* method.c (numeric_output_need_bar): Renamed from misspelling.

	* typeck.c (build_ptrmemfunc): Fix misspellings in messages.

Sun May 14 10:26:22 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* lang-options.h, lang-specs.h: New files.

Thu May 11 00:31:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (default_conversion): Don't check for BLKmode before
	pulling out the decl_constant_value.

	* decl.c (start_function): Clear named_labels and shadowed_labels.

	* typeck.c (build_function_call_real): Also synthesize methods here.

Wed May 10 00:55:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): Synthesize exported methods before the
	reconsider loop.

	* parse.y: Move declaration of flag_new_for_scope to file scope.

Tue May  9 19:10:33 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c: Add flag_new_for_scope for new -ffor-scope flag.
	* parse.y (FOR): Conditionalize the pushing and popping of scope for
	the for-init-statement upon the new flag_new_for_scope.
	* parse.y (try_block): Simplify and use compstmt.

Mon May  8 12:41:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (define_function): Mark function decl artificial.

Sun May  7 00:51:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (simple_stmt, FOR): Put back push/pop for condition scope.

	* decl2.c (grokclassfn): DECLs don't have cv-qualified types.
	* tree.c (build_cplus_method_type): Likewise.

	* cp-tree.h (SET_DECL_ARTIFICIAL): Just set DECL_ARTIFICIAL to 1.

	* typeck.c (build_function_call_real): If convert_arguments failed,
	just bail.
	(convert_arguments): If one of the arguments is error_mark_node,
	just bail.

Sat May  6 02:39:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Don't check DECL_NOT_REALLY_EXTERN for
	decls that don't include it.

Fri May  5 14:23:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Decls that have DECL_INTERFACE_KNOWN or
	DECL_NOT_REALLY_EXTERN set aren't extern decls.

	* typeck.c (build_indirect_ref): Don't call default_conversion for a
	parameter of reference_type.
	* cvt.c (convert_from_reference): Just use build_indirect_ref.

	* pt.c (do_type_instantiation): Only instantiate member functions
	that actually come from templates.

Fri May  5 09:46:05 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y: Generalized cleanup of poplevels, and compound statements
	and compound statements in try blocks.  Rewritten `for' rule so that
	the scope of variables declared in the for clause is shortened to
	span just to the end of the statement, instead of the whole
	containing block.

Fri May  5 00:37:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): Handle pointers to members better.

Thu May  4 16:00:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (delete_sanity): Do access control here.
	* init.c (build_delete): Instead of here.

	* Make-lang.in: Build c++filt.

Wed May  3 02:59:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (cplus_decl_attributes): If we just modified a TYPE_DECL,
	update our IDENTIFIER_TYPE_VALUE.

Fri Apr 28 07:58:41 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* lex.c (cons_up_default_function): Fix linkage of #pragma
	implemented functions.

Thu Apr 27 16:56:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (build_overload_name): Simplify and fix repeated type
	folding.

	* decl.c (grokdeclarator): Prohibit pointers to void or reference
	members.

Thu Apr 27 09:49:07 1995  Mike Stump  <mrs@cygnus.com>

	* typeck2.c (process_init_constructor): Make sure initializers are
	fully digested.

Thu Apr 27 01:11:55 1995  Jason Merrill  <jason@python.cygnus.com>

	* lex.c (cons_up_default_function): Always defer synthesis.

Thu Apr 27 00:20:37 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (mark_inline_for_output): Don't play with pending_inline
	stuff.

Wed Apr 26 17:48:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (user_harshness): New function; like build_type_conversion,
	but doesn't actually build anything.
	(compute_conversion_costs): Use it instead of build_type_conversion.

Wed Apr 26 17:11:25 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_function_call_real): Improve error message for
	calling a non-function.

	* method.c (hack_identifier): Lose check for calling a data member.

Wed Apr 26 16:59:13 1995  Mike Stump  <mrs@cygnus.com>

	* typeck2.c (build_functional_cast): Remove very old cruft.
	Seems like good code is generated without it.

Wed Apr 26 00:47:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (do_build_assign_ref): Fix handling of anonymous unions.
	(do_build_copy_constructor): Likewise.

	* parse.y (simple_stmt, SWITCH): Call {push,pop}_switch.

	* decl.c (push_switch): New function.
	(pop_switch): Likewise.
	(define_case_label): Check for jumping over initialization.

	* call.c (build_method_call): Check for an inline function being
	called before its definition has been seen.
	* typeck.c (build_function_call_real): Likewise.

	* decl.c (duplicate_decls): Check for a function being redeclared
	inline after its address has been taken.

	* typeck.c (build_conditional_expr): Handle related class lvalues.

Tue Apr 25 13:20:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (do_pending_expansions): Don't expand unused templates.

	* parse.y (component_decl): Accept a lone semicolon.

Tue Apr 25 00:25:56 1995  Jason Merrill  <jason@rtl.cygnus.com>

	* call.c (build_method_call): Don't allow an RTL_EXPR to serve as the
	object parameter anymore.

	* expr.c (cplus_expand_expr): Don't create RTL_EXPRs with no insns.

Mon Apr 24 12:35:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (simple_stmt, decl case): Clear prefix_attributes.
	(lang_extdef): Likewise.

	* parse.y (maybe_parmlist): New rule for use in declarators where
	this could either be a list of expressions or parameters.  Calls
	suspend_momentary before deciding which.
	(direct_after_type_declarator): Use it.
	(complex_direct_notype_declarator): Use it.

	* pt.c (tsubst): Propagate attributes const and noreturn.

	* typeck.c (build_modify_expr): If warn_synth, call build_opfncall
	before doing the default thing.

Thu Apr 27 21:49:36 1995  Doug Evans  <dje@cygnus.com>

	* typeck.c (common_type): Call lookup_attribute instead of
	value_member.

Tue Apr 25 18:07:43 1995  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* Make-lang.in: Change "realclean" to "maintainer-clean".

Sun Apr 23 12:32:38 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_file): Fix broken linked list handling.

Fri Apr 21 18:08:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_base_struct): Don't set TYPE_HAS_COMPLEX_*_REF
	as often.
	(finish_struct): Likewise.

	* various: Use TYPE_HAS_TRIVIAL_* instead of TYPE_HAS_COMPLEX_*.

	* cp-tree.h (TYPE_HAS_TRIVIAL_INIT_REF): New macro.
	(TYPE_HAS_TRIVIAL_ASSIGN_REF): New macro.

Fri Apr 21 15:52:22 1995  Jason Merrill  <jason@python.cygnus.com>

	* typeck.c (c_expand_return): Only expand a returned TARGET_EXPR if
	it is of the same type as the return value.

Fri Apr 21 03:01:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): Reconsider if synthesizing a method wrote
	out its assembly.

	* typeck.c (convert_for_initialization): Don't call a trivial copy
	constructor.

	* typeck2.c (store_init_value): Only abort if the type has a
	non-trivial copy constructor.

	* typeck.c (c_expand_return): If we're returning in a register and
	the return value is a TARGET_EXPR, expand it.  Only do
	expand_aggr_init if we're returning in memory.
	(expand_target_expr): Function to expand a TARGET_EXPR.
	(build_modify_expr): Use it.

	* tree.c (build_cplus_new): Layout the slot.

	* expr.c (cplus_expand_expr): Use expand_call to expand the call
	under a NEW_EXPR, so the target is not discarded.

Thu Apr 20 14:59:31 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_dynamic_cast): Tighten error checking.

Thu Apr 20 11:23:54 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (cplus_expand_expr): Only abort if the returned target is
	different from what we expected if the type has a non-trivial copy
	constructor.

	* decl2.c (cplus_decl_attributes): Attributes applied to a template
	really apply to the template's result.

	* tree.c (lvalue_p): Check IS_AGGR_TYPE instead of TREE_ADDRESSABLE
	to decide whether to consider a CALL_EXPR an lvalue.

	* class.c (finish_struct_bits): Only set TREE_ADDRESSABLE if the
	type has a non-trivial copy constructor.

	* decl.c (start_function): If interface_known, unset
	DECL_NOT_REALLY_EXTERN on the function.

Wed Apr 19 16:53:13 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (do_function_instantiation): Handle explicit instantiation of
	member functions.
	(do_type_instantiation): Handle 'inline template class foo<int>',
	meaning just spit out the vtable.

	* lex.c (cons_up_default_function): Set DECL_NOT_REALLY_EXTERN on
	the consed functions.

	* decl2.c (import_export_inline): Set DECL_INTERFACE_KNOWN.

Wed Apr 19 16:28:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c, class.c, decl2.c, gc.c, init.c, parse.y, pt.c, search.c,
	typeck.c: Include output.h.

Wed Apr 19 14:57:21 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* call.c (build_method_call): Allow a signature member functions to
	be called from a default implementation.

Wed Apr 19 10:21:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (finish_repo): Remember what directory we are in.

	* search.c (expand_upcast_fixups): Don't mess with abort_fndecl.

	* repo.c: Use obstacks instead of fixed-size buffers.  Don't spit
	out the second copy of the symbol name.  Don't remember COLLECT_GCC.

Wed Apr 19 02:32:40 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (virtual_context): New function to get the virtual
	context of a function.
	(expand_upcast_fixups): New function to generate runtime vtables.
	(fixup_virtual_upcast_offsets): Likewise.
	(expand_indirect_vtbls_init): Use fixup_virtual_upcast_offsets to
	ensure that the this offsets for upcasts from virtual bases into
	other virtual bases or non-virtual bases are correct at construction
	time and destruction time.
	* class.c (fixup_vtable_deltas): Modify to fixup all offsets in all
	vtables in all virtual bases, instead of just one vtable in each
	virtual base.
	(fixup_vtable_deltas1): Likewise.

Tue Apr 18 03:57:35 1995  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (lex.o): Add dependency on c-pragma.h.

	* lex.c (handle_sysv_pragma): Use NULL_PTR and NULL_TREE as
	appropriate, instead of 0.

Mon Apr 17 12:28:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushdecl): Use decls_match, not duplicate_decls, for
	comparing local and global decls.

Fri Apr 14 01:46:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_arguments): Only prohibit passing to ... of
	types with non-trivial copy constructors.

	* repo.c (repo_template_used): Don't try to mess with no id.

Fri Apr 14 23:32:50 1995  Per Bothner  <bothner@rtl.cygnus.com>

	* decl.c (duplicate_decls):  Use cp_warning_at for redundant-decls.

Thu Apr 13 15:37:42 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (current_tinst_level): Delete declaration, since it's
	static inside pt.c.

	* typeck.c (build_modify_expr): Catch incompatible array assignment.

	* parse.y (attribute_list, attrib): Rewrite actions to feed the
	right stuff to decl_attributes.

Thu Apr 13 11:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (dfs_debug_mark): Check for magic virtual like
	import_export_vtable.

	* typeck.c (build_binary_op_nodefault): Don't call cp_pedwarn with
	four args.

Wed Apr 12 12:02:57 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (finish_file): Move prevtable pass before needs_messing_up
	decision.

Tue Apr 11 11:20:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_decl): If we're writing out a static data member of
	a class, we want the debug info for that class.

	* gc.c (build_t_desc): Check linkage of a class properly.

	* class.c (finish_struct): Set the 'headof' offset for the main
	vtable properly.
	(prepare_fresh_vtable): Fix typeinfo pointer here.
	(modify_one_vtable): Instead of here.

Mon Apr 10 12:15:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (repo_get_id): New function to return the interesting
	identifier for a repo entity.
	(repo_template_used): Use it.
	(repo_template_instantiated): Mark the id as chosen.
	(init_repo): Record whether or not the id was chosen.
	(finish_repo): Note if an id was newly chosen.

	* pt.c (do_function_instantiation): Call repo_template_instantiated.
	(do_type_instantiation): Likewise.  Don't diagnose multiple
	instantiation.

	* decl2.c (finish_file): Use DECL_NOT_REALLY_EXTERN when deciding
	whether or not to synthesize a method.

	Undo these changes:
	* class.c (finish_vtbls): Build more vtables if flag_rtti is on.
	* class.c (modify_all_direct_vtables): Likewise.
	* init.c (expand_direct_vtbls_init): Expand more vtables if
	flag_rtti is on.

Sat Apr  8 17:45:41 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_headof): Use ptrdiff_type_node instead of
	integer_type_node on pointer arithmetic.

Sat Apr  8 11:57:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Undo previous change.

Thu Apr  6 01:23:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (compiler): Remove ../cc1plus before rebuilding it.

	* repo.c (get_base_filename): Put the .rpo file in the directory
	with the object file, not the source.

	* typeck.c (build_conditional_expr): Handle pmf's better.

	* repo.c (finish_repo): Also use ASM_OUTPUT_LABELREF to print out
	the name of the symbol.

Wed Apr  5 15:24:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (open_repo_file): Make repo filename DOS-compliant.
	(*): Also write a new repo file if some previously-used
	templates are no longer used.  Only remember the identifier.

	* lex.c (cons_up_default_function): If this function belongs to a
	template class, call repo_template_used for it.

	* repo.c (repo_template_used): Using a class means using its vtable,
	if any.
	(finish_repo): Likewise.

	* typeck.c (build_modify_expr): Only wrap TARGET_EXPRs in RTL_EXPRs
	if the type has a complex copy constructor.

	* decl2.c (lang_decode_option): -frepo implies
	-fno-implicit-templates.

	* decl.c (start_function): Clear current_{base,member}_init_list.

	* lex.c (init_lex): Also unset *_eq if ! flag_operator_names.

Tue Apr  4 16:11:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (struct cp_function): Add {base,member}_init_list.
	(push_cp_function_context): Save current_{base,member}_init_list.
	(pop_cp_function_context): Restore them.

Mon Apr  3 16:55:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (get_base_filename): Take filename parm, fix logic bug.

	* typeck.c (build_compound_expr): Do not warn about a compound expr
	in which the first expression has no side effects.
	(build_x_compound_expr): Warn here instead.
	(build_conditional_expr): Don't warn about a conditional expression
	between an enum and the type it promotes to.

	* init.c (build_new): Handle initialization of arrays of builtins
	properly.

Mon Apr  3 15:08:04 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* repo.c: Include config.h to get definitions of bcopy and rindex
	on systems that don't have them (e.g., SVR4).

Mon Apr  3 14:41:55 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_table): Pass NULL_TREE instead of init to
	finish_decl so that it won't try and do error checking on the
	initializer.

Mon Apr  3 10:45:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (get_base_filename): Analyze COLLECT_GCC_OPTIONS to
	determine whether this compile used -c -o.
	(open_repo_file): Use get_base_filename.  Remove the extension.
	(finish_repo): Spit out the values of main_input_filename,
	COLLECT_GCC and COLLECT_GCC_OPTIONS.

	* parse.y (structsp): Add TYPENAME_KEYWORD complex_type_name.

Sun Apr  2 23:43:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (compute_access): Don't try to do access control on
	nested types.

Fri Mar 31 10:14:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c: New file to handle things repo.

	* pt.c (instantiate_template): Call repo_template_used if the
	definition is accessible.
	(mark_function_instantiated): Split out from
	do_function_instantiation.
	(mark_class_instantiated): Split out from do_type_instantiation.

	* parse.y (template_instantiate_once): Call repo_template_used.

	* lex.c (lang_init): Call init_repo.

	* decl2.c: Handle flag_use_repository.
	(finish_file): Call finish_repo.

	* decl.c (start_method): Call repo_template_used if this is a
	template method.

	* Makefile.in (CXX_OBJS): Add repo.o.
	(repo.o): Add dependencies.

	* Make-lang.in (CXX_SRCS): Add repo.c.

	* decl.c (start_function): If DECL_INTERFACE_KNOWN and
	DECL_NOT_REALLY_EXTERN are both set, unset DECL_EXTERNAL.

	* typeck.c (build_binary_op_nodefault): Identify the invalid operand
	types used.

	* decl.c (duplicate_decls): Propagate DECL_NOT_REALLY_EXTERN.

Thu Mar 30 17:54:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Tidy up use of build_type
	and result_type.  When checking for comparison between signed
	and unsigned, use result_type rather than the (possibly shortened)
	type of op0.  Also, don't warn about equality comparison of a
	signed operand to an unsigned constant that fits in the signed
	type.

	* method.c (do_build_copy_constructor): Reverse
	current_base_init_list after we've built it up.

Thu Mar 30 14:35:18 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (build_throw): Never warn about the value of throw not
	being used.

Thu Mar 30 13:16:54 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Check for bad catch parameter
	declarations.

Thu Mar 30 13:06:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): Only set DECL_NOT_REALLY_EXTERN if
	DECL_EXTERNAL is not already set.

Thu Mar 30 11:26:24 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (emit_thunk): Let poplevel know that the last level is
	for a function so it can create a BLOCK_NODE and set DECL_INITIAL.

Thu Mar 30 11:15:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (import_export_inline): Don't set DECL_NOT_REALLY_EXTERN
	here.

	* decl.c (grokdeclarator): OK, don't abort if we see a decl with
	METHOD_TYPE.
	(finish_function): Set DECL_EXTERNAL and DECL_NOT_REALLY_EXTERN on
	all deferred inlines.

Wed Mar 29 19:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h (DECL_THIS_INLINE): New macro.
	(DECL_NOT_REALLY_EXTERN): New macro.
	(DECL_THIS_STATIC): New macro.

	* decl.c: Lose all references to current_extern_inline.  Break
	inline semantics into DECL_INLINE for actual inlining and
	DECL_THIS_INLINE for the linkage wierdness.  Use DECL_THIS_STATIC.
	* decl2.c: Use DECL_NOT_REALLY_EXTERN to indicate that we want to
	emit an inline here.  Associated changes.
	* lex.c: Likewise.
	* pt.c: Likewise.
	* typeck.c: Likewise.

	* call.c (build_method_call): Don't bother trying to handle inlines
	specially.
	* cvt.c (convert_to_aggr): Likewise.

	* pt.c (do_function_instantiation): Handle instantiation of
	public inlines, too.

Wed Mar 29 16:04:25 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Change the interface for
	__throw_type_match and add decl for new rtti matching routine
	__throw_type_match_rtti.
	(build_eh_type): New routine to build a run time descriptor for the
	expression given.
	(expand_start_catch_block): Update to use new calling convention for
	the matcher.
	(expand_throw): Update to use build_eh_type.

Mon Mar 27 07:14:33 1995  Warner Losh  <imp@village.org>

	* g++.c: Removed __NetBSD__ from conditional.
	Declare strerror if HAVE_STRERROR is defined; otherwise
	declare sys_errlist and sys_nerr.
	(my_strerror): New function.

Tue Mar 28 14:16:35 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (get_binfo): Don't try to be so clever.

	* tree.c (copy_to_permanent): Also suspend_momentary().

	* cvt.c (cp_convert_to_pointer): Hand off to convert_fn_pointer even
	if the types are the same.

	* decl.c (start_function): Handle extern inlines more like C++ says
	we should.

	* init.c (build_member_call): Hand constructor calls off to
	build_functional_cast.

	* typeck2.c (build_functional_cast): Use DECL_NESTED_TYPENAME to get
	the name of the type.

Tue Mar 28 13:13:56 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Check for the decl returned by
	grokfndecl to be null before using build_decl_attribute_variant.

Mon Mar 27 18:04:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Use build_pointer_type instead of
	TYPE_POINTER_TO.

Fri Mar 24 12:11:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_conditional_expr): Handle pmfs.
	(convert_for_assignment): Fix pmf support.

	* cvt.c (convert_fn_ptr): Support !flag_vtable_thunks.
	(cp_convert_to_pointer): Handle pmfs.
	(cp_convert): Pass pmfs to cp_convert_to_pointer.

	* typeck.c (common_type): Handle inheritance for pmfs.

	* typeck2.c (build_m_component_ref): Do access control.

	* typeck.c (comp_target_types): Check for conversion to void *
	before checking trickier conversions.

	* decl.c (duplicate_decls): Propagate DECL_ABSTRACT_VIRTUAL_P.

	* pt.c (push_tinst_level): Complain if template instantiation depth
	is greater than max_tinst_depth.

	* typeck.c (common_type): Assume that we can call common_type to
	unify the target type of a pointer.

Thu Mar 23 00:48:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): Don't synthesize methods at
	finish_vtable_prevardecl time.  Do synthesize methods that are not
	used, but are public and not external.

	* cvt.c (build_type_conversion): Only give an error if for_sure.

	* typeck.c (comp_target_types): Only support pointer conversions if
	nptrs > 0.

Wed Mar 22 19:30:15 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Catch use of an initializer list where it
	shouldn't be.

Wed Mar 22 16:21:07 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Wrap alloc_expr in an RTL_EXPR if nelts is
	non-constant.

	* decl2.c: temp_name_counter is now public.

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

	* typeck.c (common_type): Handle unifying function types, and unify
	unmatched things to void* with a compiler_error, rather than
	silently like before.

Wed Mar 22 15:10:34 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_prevtable_vardecl, finish_vtable_vardecl): Revert
	Brendan's last change and fix latent problem that causes TD entries
	to not come out when the things that need them has yet to be
	expanded.

Wed Mar 22 15:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault, comparison ops): Update type0
	and type1, since we might have changed op0 or op1.

Wed Mar 22 13:33:45 1995  Jason Merrill  <jason@python.cygnus.com>

	* typeck.c (common_type): Don't mess up templates.

Wed Mar 22 04:56:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (common_type): Handle ptms properly.  Also handle
	T* -> void*.
	(build_binary_op_nodefault): New variable build_type controls what
	type is given to the expression when it is created.  Set this to
	boolean_type_node for comparison ops instead of using result_type.
	(comp_target_types): Allow T * -> void *.

	* cvt.c (cp_convert_to_pointer): Do access control when converting
	ptms, too.

Tue Mar 21 17:25:06 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (extern_lang_string): Catch use of linkage specs that
	aren't all naming the same language.

	* class.c (finish_struct): Delete accidental duplicate code.

Tue Mar 21 14:00:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Disable pedwarns about
	comparing functions and incomplete types.

	* decl.c (finish_function): Only unset current_function_decl if
	!nested.
	(duplicate_decls): Last change went too far; we only want to stop
	checking for value/reference ambiguity.

Tue Mar 21 01:26:39 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_generic_desc): Zap the DECL_SIZE so that we can lay it
	out fresh, as the new type may be larger.

Mon Mar 20 19:01:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (extract_init): Try to expand the RTL for the
	initialization and figure out what it will look like so we can avoid
	run-time initialization.  Disabled for now.
	(extract_scalar_init): Helper for scalar initialization.
	(extract_aggr_init): Helper for aggregate initialization.

	* decl.c (duplicate_decls): Don't complain about ambiguous
	declarations.
	(obscure_complex_init): Now returns a tree.  Call extract_init if
	we're optimizing and this is a toplevel decl.
	(finish_decl): Update accordingly.

	* lex.c (check_newline): If we're just changing files (not pushing
	or popping), update input_file_stack->name.

Mon Mar 20 17:55:04 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (type_unification): Only TEMPLATE_DECLs are handled right now
	in the transitive unification code.

Mon Mar 20 16:07:50 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (shadow_tag): Don't allow inline, virtual, or explicit on
	non-functions.
	(grokdeclarator): Don't allow friends to be defined in local classes.

Sat Mar 18 04:03:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_prevtable_vardecl): Use DECL_DECLARED_STATIC
	rather than DECL_SAVED_INSNS to decide whether or not this method
	was declared inline.

	* method.c (synthesize_method): Turn off DECL_INLINE if
	function_cannot_inline_p thinks we're too large.

	* typeck.c (build_indirect_ref): Use build_expr_type_conversion.

Fri Mar 17 17:47:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (instantiate_type): Handle pmfs.

	* typeck.c (convert_for_assignment): Check types when assigning one
	pmf to another.

	* decl.c (define_label): Fix logic for printing out the name of the
	label in an error message.

	* error.c (dump_expr): Support ARRAY_REF.

Fri Mar 17 17:43:02 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Call build_t_desc here.
	(finish_prevtable_vardecl): Instead of here.

Fri Mar 17 14:40:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (expand_static_init): Also use expand_aggr_init if the
	initializer is a TREE_LIST.
	(grokdeclarator): Only pedwarn about extra qualification if -pedantic.

	* pt.c (unify): Fix unification of return type.

	* expr.c (fixup_result_decl): Use store_expr, rather than
	emit_move_insn, to move the return value into the place where
	callers will expect it.

Thu Mar 16 22:05:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_offset_ref): Call assmble_external on functions.
	* typeck.c (build_component_ref): Likewise.

Thu Mar 16 20:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (struct saved_scope): Add members base_init_list and
	member_init_list.
	(push_to_top_level): Save current_base_init_list and
	current_member_init_list to them.
	(pop_from_top_level): Put it back.

Thu Mar 16 19:21:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_template): Call assemble_external.

Thu Mar 16 18:07:54 1995  Brendan Kehoe  <brendan@phydeaux.cygnus.com>

	* class.c: Include rtl.h, to get NULL_RTX.
	(finish_struct): Also zero out DECL_SAVED_INSNS, to avoid problems
	on hosts with different sizes for each part of the union.
	* tree.c: Also include rtl.h.
	(layout_basetypes): Same change for DECL_SAVED_INSNS.

Thu Mar 16 13:57:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (unify): Fix array domain unification for 64-bit targets.

	* decl2.c (finish_file): Push bizarre type decl before walking the
	vtables the first time.
	(walk_vtables): OK, don't set prev to vars if the vardecl_fn messed
	with TREE_CHAIN (prev).

	* init.c (emit_base_init): Use convert_pointer_to_real instead of
	convert_pointer_to when converting to a direct base.

Wed Mar 15 20:26:29 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (type_unification): Handle transitive unification better.

Wed Mar 15 13:56:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (walk_vtables): Always set prev to vars.
	(mark_vtable_entries): Call assemble_external on the vtable entries.

	* class.c (finish_struct): Set the vtable's size to NULL_TREE before
	calling layout_decl, so that it gets updated properly.

	Finally re-enable dynamic synthesis.  This time it works.
	* method.c (synthesize_method): Pass decl_function_context (fndecl)
	to {push,pop}_cp_function_context.
	* decl.c (push_cp_function_context): Now takes a tree argument.
	(pop_cp_function_context): Likewise.
	* call.c (build_method_call): Enable synthesis.
	* lex.c (cons_up_default_function): Likewise.

Tue Mar 14 19:14:19 1995  Doug Evans  <dje@chestnut.cygnus.com>

	* parse.y (setattrs): Chain onto prefix_attributes rather than
	setting it.

Wed Mar 15 13:00:00 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (pushdecl): Check if the type of the VAR_DECL is an
	error_mark_node before trying to read TYPE_LANG_SPECIFIC.

Mon Mar 13 21:00:28 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator, case ARRAY_REF): Wrap the exp with fold,
	and convert the size and integer_one_node to the index type.

Mon Mar 13 08:01:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Save the instance
	argument, and tack it onto the front of the COND_EXPR to make the
	semantics come out right.  Grab the instance argument from
	'*instance_ptrptr', rather than having it passed in separately.

	* various: Change various consed-up comparison operations to have
	boolean type.  Remove the instance argument in calls to
	get_member_function_from_ptrfunc.

	* error.c (dump_expr): Dump true and false as "true" and "false".

	* decl2.c (finish_file): Also set DECL_STATIC_FUNCTION_P on the
	global init function.

	* decl.c (finish_function): Only set DECL_EXTERNAL here if the
	inline function is public.

Sat Mar 11 00:58:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (is_friend): Be more careful about checking
	DECL_CLASS_CONTEXT on non-member functions.

	* decl2.c (finish_vtable_vardecl): Don't bother calling
	assemble_external here.
	(prune_vtable_vardecl): New function that just splices out the
	vtable decl from the top-level decls.
	(import_export_inline): Unset DECL_EXTERNAL at first.
	(finish_file): Don't bother calling assemble_external here.  Do
	splice out all of the vtables.

Fri Mar 10 14:42:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): If we're not emitting the function yet,
	call assemble_external for it.

	* decl2.c (finish_prevtable_vardecl): Don't call mark_vtable_entries
	here.
	(finish_vtable_vardecl): Don't do the linkage deduction thing here.
	Also don't splice out the current vtable if it is unused.
	(finish_file): Move the second walk_vtables and the synthesis check
	inside the 'reconsider' loop.  Move thunk emission after the
	'reconsider' loop.

Thu Mar  9 16:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* pt.c (tsubst): Don't bother calling cp_build_type_variant, since it
	was passing bogus values for readonly and volatile from the original
	template decl, not the resultant type of the tsubst call.

	* class.c (duplicate_tag_error): Use cp_error_at to point out the
	previous definition of the tag.

Thu Mar  9 10:46:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Clear base_init_insns and protect_list.
	(struct cp_function): Add base_init_insns field.
	(push_cp_function_context): Also save base_init_insns.
	(pop_cp_function_context): Also restore base_init_insns.

Wed Mar  8 13:31:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (member_init_ok_or_else): Check for initializing a static
	member here.
	(emit_base_init): Instead of here.

Tue Mar  7 16:03:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Disable synthesis as needed.
	* lex.c (cons_up_default_function): Likewise.

Tue Mar  7 10:14:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y: New rules to allow attributes in a prefix position.
	(prefix_attributes): New variable.  Pass it into cplus_decl_attributes.
	(setattr): New rule.
	(reserved_declspecs, declmods): Catch attributes here.
	* decl2.c (cplus_decl_attributes): Add PREFIX_ATTRIBUTES argument.
	* decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
	descendent typedef.
	(grokdeclarator): Added code to support machine attributes.
	* Makefile.in (stamp-parse): Expect 5 shift/reduce failures.

Mon Mar  6 15:07:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't synthesize methods outside of a
	function.

	Make base initialization more re-entrant so that synthesis on the
	fly will work (and, eventually, template instantiation on the fly).
	* init.c (sort_member_init): Don't bother with members that can't be
	initialized.  Reorganize a bit.  Don't initialize base members here.
	(sort_base_init): New function, like sort_member_init, but for base
	classes.  Steals some code from emit_base_init.
	(emit_base_init): Simplify.  Call sort_{member,base}_init before
	doing any initialization, so we don't have to save
	current_{member,base}_init_list in push_cp_function_context.
	(expand_aggr_vbase_init_1): Adjust for sort_base_init.
	(expand_aggr_vbase_init): Simplify.
	* decl.c (struct cp_function): Add protect_list field.
	(push_cp_function_context): Also save protect_list.
	(pop_cp_function_context): Also restore protect_list.
	* call.c (build_method_call): Enable synthesis at point of call.
	* lex.c (cons_up_default_function): Likewise.

	* parse.y: Turn -ansi checks back into -pedantic checks.

	* init.c (build_new): Fix -fcheck-new for array new.

Sat Mar  4 15:55:42 1995  Fergus Henderson  <fjh@cs.mu.oz.au>

	* typeck.c (build_compound_expr): warn if left-hand operand of
	comma expression has no side-effects.

Fri Mar  3 15:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (primary): Change 'object qualified_id *' rules to 'object
	overqualified_id *'.

Fri Mar  3 12:48:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (unary_expr): Catch doing sizeof an overloaded function.
	Make the error look the same as the one we issue in c_sizeof.

	* typeck.c (build_binary_op_nodefault): Give an error for trying
	to compare a pointer-to-member to `void *'.

Fri Mar  3 11:28:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_unary_op): Handle bool increment with smoke and
	mirrors here, rather than in expand_increment where it belongs,
	because Kenner doesn't agree with me.

Fri Mar  3 00:08:10 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokparms): Catch a PARM_DECL being used for a default
	argument as well.

Thu Mar  2 20:05:54 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Don't allow new on a function type.

	* parse.y (primary): Avoid a crash when seeing if the arg is of
	the same type as that given for the typespec in an explicit dtor call.

Thu Mar  2 00:49:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): Change test for calling
	mark_inline_for_output.

Wed Mar  1 11:23:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Complain if
	build_default_binary_type_conversion fails.

	* init.c (expand_default_init): Handle arguments of unknown type
	properly.

	* cvt.c (build_expr_type_conversion): Only complain about ambiguity
	if 'complain'.
	* various: Pass 'complain'.

	* typeck.c (comptypes): Be more picky about comparing UPTs.

Wed Mar  1 11:03:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): If declarator is null, say that the
	type used has an incomplete type.

Wed Mar  1 10:06:20 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_template): Copy the template arguments to the
	permanent_obstack.  Also use simple_cst_equal to compare them when
	looking for a previous instantiation.

	* tree.c (make_deep_copy): Support copying INTEGER_TYPEs (assuming
	they are array domain types).

Tue Feb 28 23:24:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h: Define WANT_* constants for passing to
	build_expr_type_conversion.
	* cvt.c (build_expr_type_conversion): New function to build
	conversion to one of a group of suitable types.
	(build_default_binary_type_conversion): Use it.
	* decl2.c (grok_array_decl): Likewise.
	* typeck.c (build_unary_op): Likewise.
	(build_array_ref): Tidy up a bit.
	(build_binary_op): Likewise.

Tue Feb 28 19:57:31 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow decl of an argument as `void'.

Tue Feb 28 17:23:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (typed_declspecs1): Add 'typespec reserved_typespecquals
	reserved_declspecs' rule.

	* parse.y (expr_or_declarator): Remove notype_qualified_id rule.
	(direct_notype_declarator): Likewise.
	(complex_direct_notype_declarator): Add notype_qualified_id rule.

	* lex.c (real_yylex): Handle :> digraph properly.

Tue Feb 28 12:26:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Check if it's a friend, not if it's
	non-virtual, that's being initialized.  Move the check up to
	before FRIENDP would get cleared.  Catch an unnamed var/field
	being declared void.  Say just `field' instead of `structure field'
	in the error message.  Only go for the operator name if DECLARATOR
	is non-null.

Tue Feb 28 00:08:01 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Complain about abstract return type.
	(grokdeclarator): Complain about declaring constructors and
	destructors to be const or volatile.  Complain about declaring
	destructors to be static.

	* pt.c (uses_template_parms): Handle pmfs.

	* decl.c (grokdeclarator): Don't call variable_size for array bounds
	that only depend on template constant parameters.

Mon Feb 27 15:38:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* error.c (dump_decl): Only look to see if it's a vtable if we
	actually have a name to check out.

Mon Feb 27 13:37:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (convert_to_aggr): Lose misleading shortcut.

Sun Feb 26 17:27:32 1995  Doug Evans  <dje@canuck.cygnus.com>

	* decl.c (set_nested_typename): Always set DECL_IGNORED_P,
	not just for dwarf.

Sun Feb 26 00:10:18 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow a static member to be
	declared `register'.

	* init.c (make_friend_class): Move up to a pedwarn for the warning
	about a class declaring friends with itself.

	* decl.c (grokdeclarator): You can't do `volatile friend class foo'
	or `inline friend class foo'.  Only try to make a friend out of
	TYPE if we didn't already reset it to integer_type_node.

Sat Feb 25 22:32:03 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow initialization of a
	non-virtual function.

	* decl.c (start_function): Do a pedwarn if we're changing `main'
	to have an int return type.

Sat Feb 25 00:02:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Handle simple assignment from
	TARGET_EXPRs by building up an RTL_EXPR to force expansion.  Whew.

Fri Feb 24 18:27:14 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Also don't allow virtual outside of a
	class decl for a scope method definition performed at global binding.

	* init.c (build_offset_ref): Don't allow creation of an OFFSET_REF
	of a bitfield.

	* decl.c (grokdeclarator): Don't allow a const to be declared mutable.

	* typeck.c (build_binary_op): Return an error_mark_node if either
	one of the args turned into an error_mark_node when we tried to
	use default_conversion.

	* typeck.c (build_unary_op): Forbid using postfix -- on a bool.

	* decl.c (grokdeclarator): Allow `signed' and `unsigned' to be
	used on `__wchar_t'.

Fri Feb 24 13:59:53 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (end_protect_partials): Do it the right way.

Wed Feb 22 15:42:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Upgrade warning about
	comparing distinct pointer types to pedwarn.

	* typeck2.c (digest_init): Cope with extra braces.

	* typeck.c (build_binary_op_nodefault): Use tree_int_cst_sgn instead
	of INT_CST_LT (..., interger_zero_node).

Wed Feb 22 14:45:52 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c [!TRY_NEW_EH] (end_protect_partials): Define dummy
	function for systems that don't have EH.

Tue Feb 21 19:18:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (can_convert_arg): Like can_convert, but takes an arg as
	well.

	* pt.c (type_unification): Allow implicit conversions for parameters
	that do not depend on template parameters.

Tue Feb 21 18:43:48 1995  Douglas Rupp  <drupp@cs.washington.edu>

	* Make-lang.in, config-lang.in: ($exeext): New macro.
	* Make-lang.in: Try a "cp" if "ln" fails.
	* cp-tree.h (decl_attributes): Added argument.
	* decl2.c (cplus_decl_attribute): Add arg to decl_attributes.
	* cp/g++.c: Added #ifdefs for sys/file.h and process.h for NT.
	Modified spawnvp to have to correct number of arguments for OS/2, NT.

Tue Feb 21 18:36:55 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (finish_function): Add calls to end_protect_partials to end
	the exception region that protects constructors so that partially
	constructed objects can be partially destructed when the constructor
	throws an exception.
	* init.c (perform_member_init, sort_member_init, emit_base_init):
	Added support for partially constructed objects.
	* init.c (build_partial_cleanup_for): New routine to do partial
	cleanups of a base class.
	* decl2.c (finish_file): Move the emitting of the exception table
	down, after we emit all code that might have exception regions in
	them.
	* except.c (end_protect_partials, might_have_exceptions_p): New
	routines.
	(emit_exception_table): Always output table if called.
	* cp-tree.h (protect_list, end_protect_partials,
	might_have_exceptions_p, emit_exception_table): Added.

Tue Feb 21 16:05:59 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* gc.c (build_typeid): Pass a NULL_TREE, not the bogus, unused
	address of a local variable.
	* class.c (build_vfn_ref): Only try to build the PLUS_EXPR if we
	were given a non-null PTR_TO_INSTPTR.

Tue Feb 21 01:53:18 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Always lay out the merged decl.

	* decl2.c (finish_vtable_vardecl): Don't do vtable hack on templates.
	(finish_prevtable_vardecl): Likewise.

	* method.c (synthesize_method): Set interface_{unknown,only}
	according to the settings for our class, not the file where it comes
	from.

Sat Feb 18 12:26:48 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Handle systems that define __i386__ but not __i386.

Fri Feb 17 15:31:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (reparse_decl_as_expr): Support being called without a
	type argument.

	* parse.y (primary): Add '(' expr_or_declarator ')'.  Adds 4 r/r
	conflicts.  Sigh.

Fri Feb 17 12:02:06 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (template_def, fndef, fn.def1, return_init, condition,
	initdcl0, initdcl, notype_initdcl0, nomods_initdcl0,
	component_decl_1, after_type_component_declarator0,
	notype_component_declarator0, after_type_component_declarator,
	notype_component_declarator, after_type_component_declarator,
	full_parm, maybe_raises, exception_specification_opt): Fix up,
	include exception_specification_opt maybeasm maybe_attribute and
	maybe_init if missing.  Rename maybe_raises to
	exception_specification_opt to match draft wording.  Use maybe_init
	to simplify rules.

Fri Feb 17 01:54:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Set TREE_NO_UNUSED_WARNING on COMPOUND_EXPRs
	built for news of scalar types.

Thu Feb 16 17:48:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Update code for warning
	about signed/unsigned comparisons from C frontend.  Realize that the
	code in the C frontend is, if anything, even more bogus.  Fix it.
	(build_binary_op): Undo default_conversion if it wasn't useful.

	* typeck.c (build_unary_op, ADDR_EXPR): Lose bogus special case for
	PRE*CREMENT_EXPR.

	* decl2.c (import_export_vtable): Don't try the vtable hack
	if the class doesn't have any real non-inline virtual functions.
	(finish_vtable_vardecl): Don't bother trying to find a non-inline
	virtual function in a non-polymorphic class.
	(finish_prevtable_vardecl): Likewise.

	* decl2.c (import_export_vtable): Use and set DECL_INTERFACE_KNOWN.

	* cp-tree.h (DECL_INTERFACE_KNOWN): Use DECL_LANG_FLAG_5.

	* init.c (expand_virtual_init): Always call assemble_external.

	* class.c (build_vfn_ref): Always call assemble_external.
	(build_vtable): Always call import_export_vtable.
	(prepare_fresh_vtable): Likewise.
	(add_virtual_function): Don't bother setting TREE_ADDRESSABLE.

Thu Feb 16 03:28:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Use TYPE_{MIN,MAX}_VALUE to determine
	whether an enumerated type fits in a bitfield.

Wed Feb 15 15:38:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (grow_method): Update method_vec after growing the class
	obstack.

Wed Feb 15 13:42:59 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (handler_seq): Push a level for the catch parameters.

Wed Feb 15 12:42:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (emit_base_init): Update BINFO_INHERITANCE_CHAIN on my
	bases, in case they've been clobbered.

Wed Feb 15 12:07:29 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_base_struct): Set up BINFO_INHERITANCE_CHAIN here,
	so that one day it will always be valid.
	* tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.

	* cp-tree.h (copy_binfo): Removed, unused.
	* tree.c (copy_binfo): Likewise.

Wed Feb 15 00:05:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Save the allocation before calling
	expand_vec_init on it.

	* decl.c (finish_enum): The TYPE_PRECISION of the enum type mush
	match the TYPE_PRECISION of the underlying type for constant folding
	to work.

Tue Feb 14 15:31:25 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (push_eh_entry, expand_start_all_catch,
	expand_leftover_cleanups, expand_end_catch_block): Keep track of
	the context in which the exception region occurs.
	(build_exception_table): If the region was not output, don't output
	the entry in the eh table for it.

Tue Feb 14 02:15:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (expand_default_init): Only use a previous constructor call
	if it's a call to our constructor.  Does the word "Duh" mean
	anything to you?

	* decl.c (grokparms): Fine, just don't call
	convert_for_initialization at all.  OK?  Happy now?

Mon Feb 13 02:23:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Make sure that the class
	method vector has a second element before returning it.

	* decl.c (grokparms): Don't strip REFERENCE_TYPE before calling
	convert_for_initialization.

Sun Feb 12 03:57:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Compare function name to
	constructor_name (current_class_type) instead of current_class_name.

	* decl.c (grokparms): Don't do anything with the return value of
	convert_for_initialization.

	* error.c (dump_decl): Also dump_readonly_or_volatile on the decl.

	* decl.c (duplicate_decls): Tweak error message.

	* typeck.c (build_const_cast): Implement checking.
	(build_reinterpret_cast): Implement some checking.

	* cp-tree.h (CONV_FORCE_TEMP): Require a new temporary when
	converting to the same aggregate type.
	(CONV_STATIC_CAST): Include it.
	(CONV_C_CAST): Likewise.
	* cvt.c (convert_force): Use CONV_C_CAST instead of CONV_OLD_CONVERT.
	(cp_convert): Only force a new temporary if CONV_FORCE_TEMP.

Fri Feb 10 16:18:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_c_cast): Use non_lvalue to tack something on
	where necessary.

	* decl.c (auto_function): Now a function.
	* except.c (init_exception_processing): terminate, unexpected,
	set_terminate, and set_unexpected have C++ linkage.

	* typeck.c (build_unary_op, TRUTH_NOT_EXPR): Use convert instead of
	truthvalue_conversion for converting to bool, as it handles
	user-defined conversions properly.
	(condition_conversion): Likewise.

	* except.c (expand_throw): Don't call convert_to_reference.
	Pass the correct parameters to build_new.

	* method.c (do_build_assign_ref): Don't use access control when
	converting to a base reference here.
	(do_build_copy_constructor): Or here.

	* init.c (build_new): Unset TREE_READONLY on the dereferenced
	pointer before assigning to it.

	* decl.c (maybe_build_cleanup): Don't bother stripping const here.

	* decl2.c (delete_sanity): You can now delete pointer to const.

Fri Feb 10 13:28:38 1995  Jason Merrill  <jason@python.cygnus.com>

	* decl.c (finish_function): Don't rely on actual parameters being
	evaluated left-to-right.
	* except.c (expand_end_catch_block): Likewise.

Fri Feb 10 00:52:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (real_lvalue_p): Like lvalue_p, but class temps aren't
	considered lvalues.
	* cvt.c (convert_to_reference): Use real_lvalue_p instead of
	lvalue_p.

	* cvt.c (build_type_conversion_1): Don't call convert on aggregate
	types.
	(convert_to_reference): Fix erroneous text substitution.

	* typeck2.c (initializer_constant_valid_p): Update from C frontend.
	Add new argument to all callers.

	* typeck.c (convert_arguments): Check for error_mark_node before
	trying to do anything with the actual parameter.

	* typeck.c (condition_conversion): Build up a CLEANUP_POINT_EXPR and
	fold it.
	(bool_truthvalue_conversion): Remove.  Fix all callers to call
	truthvalue_conversion instead.
	(various): Fold CLEANUP_POINT_EXPRs.

	* parse.y (conditions): Call condition_conversion rather than
	building up a CLEANUP_POINT_EXPR.

	* pt.c (end_template_decl): Don't warn_if_unknown_interface here
	under -falt-external-templates.

Thu Feb  9 05:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Complain about new of const type without
	initializer.  Other cleanup.

	* call.c (compute_conversion_costs): Don't call
	build_type_conversion with a reference type; convert to the target
	type and check its lvaluetude.
	* cvt.c (convert_to_reference): Likewise.

	* cvt.c (build_type_conversion_1): There will never be any need to
	dereference references here now.

Thu Feb  9 00:37:47 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Make sure we only `use' the
	value of return_val_rtx.

Wed Feb  8 15:45:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (structsp): Don't complain about declaring a type being
	defined to be a friend.

	* decl2.c (warn_if_unknown_interface): Note the template in question
	and the point of instantiation, for -falt-external-templates.
	* lex.c (reinit_parse_for_method): Pass the decl to
	warn_if_unknown_interface.
	* pt.c (instantiate_template): Likewise.
	(end_template_decl): Likewise.

	* decl.c (set_nested_typename): Set IDENTIFIER_TYPE_VALUE on the
	nested name again, to make local classes work a bit better.

	* typeck.c (build_function_call_real): Dereference reference after
	checking for incomplete type.

	* init.c (build_new): Accept new of const and volatile types.

Wed Feb  8 14:04:16 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Fix error message.

Wed Feb  8 03:16:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_initialization): Do bash arrays when
	converting to a reference to non-array.

Tue Feb  7 15:50:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (cp_convert): Don't call convert_to_reference, or
	automatically dereference references.  Do pass reference conversions
	to cp_convert_to_pointer.
	(cp_convert_to_pointer): Support references.

	* call.c (build_method_call): Don't build up a reference to the
	parameter here; let build_overload_call handle that.

	* typeck.c (build_c_cast): Call convert_to_reference directly if
	converting to a reference type.
	* method.c (do_build_copy_constructor): Likewise.
	* method.c (do_build_copy_constructor): Likewise.
	(do_build_assign_ref): Likewise.

	* call.c (build_method_call): Dereference a returned reference.
	* typeck.c (build_function_call_real): Likewise.

	* decl.c (xref_basetypes): Check for unions with basetypes here.
	(xref_tag): Instead of here.

	* pt.c (process_template_parm): Template type parm decls are
	artificial.

Mon Feb  6 04:32:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (typed_declspecs): Add missing semicolon.
	(do_xref_defn): Resurrect.
	(named_class_head_sans_basetype): Move template specialization
	definition cases to named_class_head_sans_basetype_defn.

	* decl2.c (grokfield): Call pushdecl_class_level after setting the
	TYPE_NAME, not before.

Sun Feb  5 02:50:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): Don't call sorry here.  Don't allow
	conversions between function pointer types if pedantic.

	* pt.c (overload_template_name): Pass globalize=1 to xref_tag.

	* lex.c (cons_up_default_function): Use the full name for the return
	type of op=.

	* decl.c (set_nested_typename): Don't worry about anonymous types,
	as they already have a unique name.
	(pushdecl): Remove redundant set_nested_typename
	(xref_tag): Split out base handling into xref_basetypes.

	* cp-tree.h (TYPE_INCOMPLETE): New macro; TEMPLATE_TYPE_PARMs are
	not considered incomplete even though their definition is unknown.

	* decl.c (xref_defn_tag): Lose.
	(xref_tag): xref_next_defn = ! globalize.
	(pushdecl): Don't set DECL_NESTED_TYPENAME on artificial decls.  The
	ones that should have it set will have it set by pushtag.
	(pushdecl_class_level): Likewise.
	(pushtag): Tidy up a bit.
	(set_nested_typename): Push a decl for the nested typename from
	here, rather than from xref_defn_tag.

	* parse.y (do_xref): Lose.
	(named_class_head): If we see 'class foo:' we know it's a
	definition, so don't worry about base lists for non-definitions.

	* pt.c (push_template_decls): Template parm decls are artificial.

	* decl.c (duplicate_decls): Restore check for qualifier
	disagreement for non-functions.
	(decls_match): Remove check for qualifier disagreement.

Fri Feb  3 14:58:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grok_reference_init): Convert initializer from
	reference.
	* typeck.c (convert_for_initialization): Likewise.

	* decl.c (duplicate_decls): Propagate DECL_NESTED_TYPENAME.

	* cvt.c (cp_convert): Don't convert to the same class type by just
	tacking on a NOP_EXPR.
	(convert_to_reference): Use comp_target_types instead of comptypes
	so that we don't allow conversions two levels down.

Thu Feb  2 15:07:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (build_vbase_path): Bash types to make the backend happy.
	* cvt.c (build_up_reference): Bash the types bashed by
	build_vbase_path to be reference types instead of pointer types.
	(convert_to_reference): Likewise.

	* typeck.c (build_c_cast): Don't strip NOPs if we're converting to a
	reference type.

	* parse.y (structsp): Put back error for 'struct B: public A;'.

Wed Feb  1 23:02:06 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Add support for mips systems that don't define __mips
	but do define mips, like Ultrix.

Wed Feb  1 22:39:07 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Add support for exception handling on the Alpha.

Wed Feb  1 10:12:14 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_file): Fix bug in Jan 31st change.

Tue Jan 31 16:59:15 1995  Gerald Baumgartner  <gb@lorenzo.cs.purdue.edu>

	* sig.c (build_signature_pointer_or_reference_type): Don't set
	IS_AGGR_TYPE for signature pointers/reference so expand_default_init
	doesn't expect to find a copy constructor.
	* call.c (build_method_call): Treat signature pointers/reference
	as if IS_AGGR_TYPE were set.

Tue Jan 31 13:28:56 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (get_typeid): Pawn off error messages to build_t_desc.
	(build_t_desc): Inform the user here if they try and build
	with -frtti and don't include <typeinfo.h>.

	* decl2.c (finish_prevtable_vardecl): Support rescanning.
	(finish_file): Move finish_prevtable_vardecl up to before the global
	initializers are done as tdecls are initialized in the global
	initializer.  Also Pick up any new tdecls or vtables needed by
	synthesized methods.

	* class.c (finish_struct): Simplify.  We have to do rtti scanning at
	end, so we might as well do all of it there.

Tue Jan 31 05:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Fix -fthis-is-variable for 32-bit
	targets, too.

Tue Jan 31 00:11:04 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_prevtable_vardecl): New routine, mostly split from
	finish_vtable_vardecl.  It has the first half functionality from
	that routine.
	* decl2.c (finish_vtable_vardecl): Update to not include stuff not
	in  finish_prevtable_vardecl.
	* decl2.c (finish_file): Call finish_prevtable_vardecl.
	* gc.c (build_generic_desc): Allow it to be called when not at the
	global binding layer, but behave as if we were.
	(build_t_desc): Rearrange a bit so that it really works and is
	easier to follow.
	* class.c (finish_struct): Don't decide on tdecls here, as we have
	to wait until the end of the file in general to decide whether or
	not they come out.

Mon Jan 30 01:00:40 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_delete): Check access to operator delete before
	calling the destructor.
	* method.c (build_opfncall, DELETE_EXPR): build_method is allowed to
	return error_mark_node.
	* call.c (build_method_call): Use the one-argument op delete even if
	it's an error.

	* init.c (build_new): Fix -fthis-is-variable support.
	* call.c (build_method_call): Likewise.

	* call.c (convert_harshness): Make conversion from a pointer to bool
	worse than conversion to another pointer.

Sat Jan 28 16:46:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Check new return value if -fcheck-new.

	* lex.c (check_newline): Clear end_of_file when we're done, too.

Sat Jan 28 10:38:39 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_vtable_vardecl): Make rtti TD tables follow
	vtables whereever they go.

	* gc.c (build_t_desc): Remove old way of setting it up, as it wasn't
	right.

Sat Jan 28 09:10:44 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_vtable_vardecl): Now set the
	interface/implementation of vtables on the first virtual function,
	if one exists, otherwise we use the old method.  This is a major win
	in terms of cutting down the size of objects and executables in
	terms of text space and data space.  Now most of the savings that
	#pragma interface/implementation gives is automatic in a fair number
	of cases.

Sat Jan 28 04:57:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokdeclarator): Discard the template parameters in a
	template constructor declaration so that the function is always
	named constructor_name (ctype).

	* lex.c (check_newline): Use ungetc to put back the character before
	calling HANDLE_PRAGMA.

Fri Jan 27 17:23:47 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): If the cname is T<int> and fn_name is T,
	make sure we still match them.

Fri Jan 27 16:32:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y: Add END_OF_LINE token.

	* lex.c (check_newline): Set linemode when we see a # directive, and
	unset it when we're done.  Turn all 'return's into 'goto skipline'.
	Fix all uses of '\n', since we won't see it anymore.  Put back the
	character we read before checking for a sysv or target pragma.
	(real_yylex): If we see an EOF in linemode, return END_OF_LINE.
	(handle_sysv_pragma): Don't look at the input stream; quit when we
	see an END_OF_LINE token.

	* input.c (getch): Return EOF if we're in line mode and at the end
	of a line.
	(put_back): Don't put back an EOF.

Thu Jan 26 19:26:34 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Do the newing of the exception object
	before we load the type descriptor or the address so that we don't
	wipe any of the values out.

Thu Jan 26 19:20:00 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Don't use r12 on the rs6000.

Tue Jan 24 16:36:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokparms): Don't try to build up a reference at this point.

	* typeck2.c (build_functional_cast): Don't assume that a NOP_EXPR
	will suffice to convert from integer_zero_node.

Wed Jan 25 15:02:09 1995  David S. Miller  <davem@nadzieja.rutgers.edu>

	* class.c (instantiate_type): Change error message text.
	* typeck2.c (store_init_value): Likewise.

Mon Jan 23 21:57:14 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): When we copy a node, don't forget to copy
	TREE_CHAIN, we use it later.

Mon Jan 23 03:33:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_assignment): Initialize variable before use.

Fri Jan 20 01:17:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* g++.c (main): Link with both libstdc++ and libg++ if called as
	something ending with "g++", otherwise only libstdc++.  Move -lm to
	the end of the line.

Thu Jan 19 15:43:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't mess with 'this' before calling
	compute_conversion_costs.

Wed Jan 18 15:40:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (get_matching_virtual): Give line number for previous
	declaration.

	* call.c (convert_harshness): Handle conversions to references
	better.

	* cvt.c (build_up_reference): OK, handle {MIN,MAX}_EXPR *properly*.

Wed Jan 18 15:21:38 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (instantiate_type): Use DECL_CHAIN to walk lists instead,
	as the TREE_CHAIN for methods will take us to the next differently
	named function, DECL_CHAIN won't.

Wed Jan 18 14:26:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (lvalue_p): Handle {MIN,MAX}_EXPR.

	* decl2.c (lang_decode_option): -Wall implies -Wparentheses.
	warn_parentheses defaults to 0.

	* decl.c (grokparms): Put back call to require_instantiated_type.

Tue Jan 17 19:56:15 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (exception_section): Use the data section on the rs6000.
	Change calling convention for named_section.

Wed Jan 17 18:20:57 1994  Fergus Henderson  <fjh@munta.cs.mu.oz.au>

	* cp-tree.h: Make if (x=0) warn with wall
	* parse.y: Make if (x=0) warn with wall

Tue Jan 17 14:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): BITS_PER_WORD if SLOW_BYTE_ACCESS,
	BITS_PER_UNIT otherwise.

	* search.c (get_matching_virtual): Don't check the binfo if the
	types are the same.

	* cvt.c (cp_convert): Just call truthvalue_conversion to convert to
	bool.

Mon Jan 16 13:28:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* various: Use boolean_type_node, boolean_true_node,
	boolean_false_node.

	* search.c (get_matching_virtual): Allow covariant returns that
	don't require pointer adjustment.

	* typeck.c (build_conditional_expr): Don't call default_conversion
	on ifexp.

	* cvt.c (build_up_reference): Handle MIN_EXPR and MAX_EXPR.

	* decl.c (grokdeclarator): Upgrade warning about &const to pedwarn.

Sun Jan 15 22:17:32 1995  David Binderman  <dcb@lovat.fmrco.COM>

	* pt.c (do_function_instantiation): Free targs once we're done.

Sun Jan 15 22:17:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): Defaults to BITS_PER_WORD.
	(init_decl_processing): Use BOOL_TYPE_SIZE instead of CHAR_TYPE_SIZE
	for bool.

Sat Jan 14 05:33:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): We need to mess up if there are any
	variables in the list, not just if there is one with a constructor.

Fri Jan 13 14:42:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
	(finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
	(finish_function): Trust rest_of_compilation.

	* decl2.c (finish_file): Also call functions designated as static
	constructors/destructors.

	* decl.c (grokdeclarator): Allow access decls of operator functions.
	(grokparms): Only do convert_for_initialization if the initializer
	has a type.
	(duplicate_decls): Put back push_obstacks_nochange call.

	* lex.c (real_yylex): Downgrade complaint about the escape sequence
	being too large from pedwarn to warning.

	* decl.c (grokdeclarator): Don't complain about long long in system
	headers.

	* lex.c (real_yylex): Handle digraphs.

Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (init_decl_processing): -f{no-,}strict-prototype only
	affects C linkage declarations now.

	* typeck.c (comp_target_types): Grok simple contravariant conversions.
	(common_type): t1 and t2 are interchangeable.

	* various: Test return value of comp_target_types differently in
	different places; it now returns -1 for a contravariant conversion
	(which is fine in symmetric cases).

	(common_type): Prefer long double to double even when
	they have the same precision.

	* decl.c (grokparms): Call convert_for_initialization to check
	default arguments.

	* init.c (build_new): void_type_node has a size (of 0).

	* decl.c (decls_match): Also check for agreement of TREE_READONLY
	and TREE_THIS_VOLATILE.
	(push_class_level_binding): Properly handle shadowing of
	nested tags by fields.

	* search.c (dfs_pushdecls): Likewise.

	* decl2.c (finish_file): Don't second-guess self-initialization.

	* cvt.c (convert_to_reference): Work with expr directly, rather than
	a copy.

	* decl.c (push_overloaded_decl): Only shadow artificial TYPE_DECLs.

	* init.c (add_friend): Downgrade duplicate friend message from
	pedwarn to warning.

	* decl.c (duplicate_decls): Push obstacks before calling common_type.

Thu Jan 12 17:15:21 1995  Michael Ben-Gershon  <mybg@cs.huji.ac.il>

	* except.c (push_eh_entry): Set LABEL_PRESERVE_P flag for
	exception table labels.
	(expand_start_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	* except.c (make_first_label): New function.
	(expand_start_all_catch): Add a call to make_first_label() before
	using a label as a jump destination.
	(expand_end_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_builtin_throw): Likewise.
	(expand_throw): Likewise.
	* except.c: Add ARM processor support for exception handling.

Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	(complete_array_type): Copy code from C frontend.

	* lex.c (real_yylex): Don't multiply the length of a wide string
	literal by WCHAR_BYTES.

	* decl.c (pushdecl): Check for redeclaration of wchar_t here.
	(duplicate_decls): Instead of here.
	(define_label): Complain about a label named wchar_t.
	(grokdeclarator): Complain about declarations of
	operator-function-ids as non-functions.

	* typeck.c (unary_complex_lvalue): Also wrap prefix -- and ++ in
	COMPOUND_EXPRs.
	(build_unary_op): Wrap unary plus in a NON_LVALUE_EXPR.

	* lex.c (real_yylex): Don't skip whitespace when reading the next
	character after ->.

Wed Jan 11 16:32:49 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Allow cc1plus to be built with native compiler on rs6000.
	(expand_start_all_catch): Add assemble_external calls for various
	routines we call.
	(expand_leftover_cleanups): Likewise.
	(expand_start_catch_block): Likewise.
	(do_unwind): Likewise.
	(expand_builtin_throw): Likewise.

Wed Jan 11 01:05:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Only look for a previous decl in the current
	binding level.  Use explicit global scope in DECL_NESTED_TYPENAME.

	* gxx.gperf: Add __signature__ and __sigof__ keywords.

	* decl2.c (lang_decode_option): -ansi does not set flag_no_asm.  It
	does set flag_no_gnu_keywords and flag_operator_names.

	* lex.c (init_lex): 'overload' is not a keyword unless -traditional.
	Unset extension keywords if -fno-gnu-keywords.
	Allow operator names ('bitand') if -foperator-names.
	Never unset 'asm'; -fno-asm only affects 'typeof'.

	* decl.c (lookup_name_real): The got_object special lookup only
	applies to types.

Tue Jan 10 18:07:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* spew.c (yylex): Also use DECL_NESTED_TYPENAME if got_object is set.

	* parse.y (primary): Unset got_object after all rules that use the
	'object' nonterminal.
	(object): Set got_object.

	* lex.h: Declare got_object.

	* decl.c (lookup_name_real): Also lookup names in the context of an
	object specified.

Tue Jan 10 14:30:30 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Use ptrdiff_type_node
	for things that have to be added to pointers, not size_type.  Cures
	problems with pointer to members on Alphas.
	(build_binary_op_nodefault): Likewise.
	(get_delta_difference_: Likewise.
	(build_ptrmemfunc): Likewise.

Tue Jan 10 01:49:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Stick the new decl in TYPE_NAME before pushing
	it.

	* typeck.c (build_component_ref): Don't build up a COMPONENT_REF
	when dealing with overloaded member functions; just act like
	build_offset_ref.
	(commonparms): Remove misleading comment.

	* decl.c (duplicate_decls): Complain about repeated default
	arguments here.
	(redeclaration_error_message): Instead of here.
	(pushdecl): Complain about missing default arguments here.
	(grokparms): Instead of here.
	(lookup_name_current_level): Also match on DECL_ASSEMBLER_NAME.
	(grok_reference_init): Do not complain about missing initializer if
	declared 'extern'.

	* search.c (lookup_field): Don't return a TYPE_DECL if there is a
	function alternative and want_type is not set.

Mon Jan  9 18:16:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Don't set TYPE_NAME to an identifier.  Do push
	the decl when the type has no TYPE_NAME.
	(lookup_nested_type): Don't assume that type has TYPE_NAME set.
	(lookup_name_real): Call lookup_field with want_type =
	prefer_type.

	* search.c (lookup_field): Handle want_type properly in the presence
	of fields with the same name.

	* decl.c (set_nested_typename): Set nested name for file-scope types
	to include leading ::.
	(pushdecl): Set the nested typename if the decl doesn't have one,
	rather than if the type's canonical decl doesn't have one.

Mon Jan  9 03:44:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_assignment): Complain about contravariance
	violation here.
	(comp_target_types): Instead of here.
	(build_unary_op): resolve_offset_ref before checking for a valid
	type.

	* spew.c (yylex): Decrement looking_for_typename after we see a
	_DEFN.

	* decl.c (pushdecl): Don't install an artificial TYPE_DECL in
	IDENTIFIER_LOCAL_VALUE if we already have a decl with that name.

	* typeck.c (convert_for_assignment): Converting pointers to bool
	does not need a cast.

Sun Jan  8 18:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (instantiate_type): Initialize nsubsts parm.

	* pt.c (do_function_instantiation): Likewise.

Sat Jan  7 14:37:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (tsubst): Use TREE_STATIC instead of DECL_INLINE &&
	DECL_SAVED_INSNS to determine whether or not we've seen a definition
	of this function.
	(instantiate_template): Likewise.

	* call.c (convert_harshness): Allow const reference binding when
	called from the overloading code, but not when called from
	can_convert (since it isn't a conversion).
	(convert_harshness): Put back some disabled code.

Fri Jan  6 14:10:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): There is no implicit conversion from
	void* to other pointer types (unless the parameter is (void*)0).
	(convert_harshness): Non-lvalues do not convert to reference types.

	* class.c (finish_struct_methods): Still set
	TYPE_HAS_{INT,REAL}_CONVERSION.

	* call.c (can_convert): Don't use aggregate initialization.

	* cp-tree.h: Declare lookup_conversions.

Thu Jan  5 21:08:00 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (simple_stmt): Fix duplicate case value error messages to
	be more readable.

Wed Jan  4 16:44:19 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (build_type_conversion): Total rewrite to use
	convert_harshness instead of reproducing conversion logic here.  Now
	much shorter.

	* call.c (convert_harshness): Support conversions to bool.
	(can_convert): Checks whether a conversion is less harsh
	than USER_CODE, for build_type_conversion.

	* search.c (add_conversions): Function for passing to dfs_walk which
	adds all the type conversion operators in the current type to a list.
	(lookup_conversions): Calls dfs_walk with add_conversions and return
	the list.
	(dfs_walk): Don't require a qfn.

	* cp-tree.h: Lose CLASSTYPE_CONVERSIONS hackery.
	(CLASSTYPE_FIRST_CONVERSION): Points to elt 1 of CLASSTYPE_METHOD_VEC.

	* class.c (finish_struct_bits): Lose CLASSTYPE_CONVERSIONS hackery.
	(grow_method): A separate function for building onto the growing
	method vector.
	(finish_struct_methods): Use it.  Put all type conversion operators
	right after the constructors.  Perhaps we should sort the methods
	alphabetically?

Mon Jan  2 14:42:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Lose another misleading shortcut.

Fri Dec 30 17:57:30 1994  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_bltn_desc): Handle bool as a built-in type.

Fri Dec 30 14:20:21 1994  Mike Stump  <mrs@cygnus.com>

	* tree.c (layout_vbasetypes): Ensure that we don't loose alignment
	on the complete type because of small virtual bases.

Fri Dec 30 12:22:29 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (n_incomplete): Bump n_incomplete up to int to match C
	front end.
	(pushdecl): Also count decls pushed that are of a type being defined
	as incomplete things.
	* class.c (finish_struct): Move hack_incomplete_structures up to
	just after we set it as not being defined, so that the decls we
	build for RTTI don't count as incomplete.

Thu Dec 29 18:20:57 1994  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): Fix problem with defining constructors in templated
	classes with virtual bases.

Wed Dec 28 08:31:00 1994  Mike Stump  <mrs@cygnus.com>

	* parse.y (TYPEID): Strip top-level cv-qualifiers on typeid
	expressions.
	* gc.c (build_typeid): Likewise.

Thu Dec 22 17:26:33 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Fix breakage introduced on Nov 29,
	don't assert on complex AGGR inits.

Thu Dec 22 14:32:31 1994  Mike Stump  <mrs@cygnus.com>

	* method.c (build_overload_value): Handle pointer to members as
	template arguments.

Thu Dec 22 13:09:07 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (unary_complex_lvalue): Don't call sorry if we know how
	to do take the address of a data member for a pointer to data
	member.

Thu Dec 22 10:04:19 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Use the typedef name for linkage if the
	type doesn't otherwise have a name.

	* decl2.c (grokfield): Likewise.

	* class.c (finish_struct): Since we reuse the TYPE_DECL for the
	DECL_NAME of enums, structs and classes, we have to avoid trying to
	put it in the TYPE_FIELDS again.

Wed Dec 21 11:07:05 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Ignore this parameter on static functions
	when checking to see if we match.

Tue Dec 20 17:47:02 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (unary_complex_lvalue): Handle address of non-left most
	pointers to members by calling get_delta_difference.

Mon Dec 19 22:40:53 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Don't use decls_match yet, as it modifies
	static functions to early.

Thu Dec 19 22:37:48 1994  Mike Stump  <mrs@cygnus.com>

	* method.c (make_thunk): Handle encoding of positive thunk offsets.

Sat Dec 17 13:29:50 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (.PHONY): Tell GNU make C++ and c++ are phony targets.

Thu Dec 15 16:32:12 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Use decls_match to check if this has
	already been declared, as the DECL_ASSEMBLER_NAME may have been
	changed via asm("new_name").
	* decl.c (decls_match): Make public.

Thu Dec 15 15:17:55 1994  Mike Stump  <mrs@cygnus.com>

	* *.[chy] (expand_aggr_init): Add fourth argument to handle
	distinction between = init and (init) style of initializations.
	* *.[chy] (finish_decl): Add fifth argument to handle
	distinction between = init and (init) style of initializations.

Tue Dec 13 19:16:05 1994  Mike Stump  <mrs@cygnus.com>

	Fix some random `explicit' bugs.

	* cvt.c (convert_to_reference): Add third parameter to
	convert_force.
	(convert_force): Likewise.
	* call.c (build_method_call): Likewise.
	* decl2.c (setup_vtbl_ptr): Likewise.
	* init.c (expand_virtual_init): Likewise.
	(build_member_call): Likewise.
	(build_delete): Likewise.
	(build_vbase_delete): Likewise.
	* typeck.c (build_component_addr): Likewise.
	(build_c_cast): Likewise.
	(build_modify_expr): Likewise.
	* cp-tree.h (CONV_NONCONVERTING): Likewise. Add so that we can
	distinguish the context in which the conversion appears.  Add thrid
	argument to build_c_cast.
	* cvt.c (cp_convert): Pass whether or not we want to consider
	non-converting constructors down to build_method_call.
	* decl2.c (reparse_absdcl_as_casts): Add third argument to
	build_c_cast.
	* gc.c (build_m_desc): Likewise.
	* init.c (build_new): Likewise.
	* parse.y (expr_no_commas): Likewise.
	(primary): Likewise.
	* typeck.c (build_x_function_call): Likewise.
	(build_static_cast): Likewise.
	(build_reinterpret_cast): Likewise.
	(build_const_cast): Likewise.
	(build_c_cast): Likewise.
	(build_ptrmemfunc): Likewise.
	* typeck2.c (build_functional_cast): Likewise.
	* init.c (expand_aggr_init): Added LOOKUP_ONLYCONVERTING to
	expand_aggr_init_1 as inits are converted to the destination type.

Tue Dec 13 16:18:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Make-lang.in (cc1plus): Depends on c-pragma.o.

	* Makefile.in (OBJ{DEP,}S): Add ../c-pragma.o.

	* lex.c (check_newline): If the #pragma is not recognized by g++,
	try machine-specific ones too.
	(handle_sysv_pragma): Copied from c-lex.c.

Mon Dec 12 23:53:06 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Fix Dec 6th change, build_new likes a
	reference better.

Mon Dec 12 18:01:00 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op): Lose checks on TYPE_PTRMEMFUNC_P with
	IS_AGGR_TYPE, since now they will not both be set on the same type.

	* pt.c (do_pending_expansions): Don't clear TREE_PUBLIC on
	instantiations controlled by -fexternal-templates.

	* decl.c (duplicate_decls): Don't complain about different values of
	__attribute__ ((const)) and ((noreturn)).

Fri Dec  9 18:17:37 1994  Doug Evans  <dje@cygnus.com>

	* Makefile.in (BISONFLAGS): Delete --yacc.
	(PARSE_H): Depend on $(PARSE_C), for parallel makes.
	(PARSE_C): Undo last patch.

Fri Dec  2 10:44:36 1994  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (BISONFLAGS): Add --yacc so that output winds up in
	y.tab.c.

Thu Dec  8 17:39:46 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_decl): Don't call obscure_complex_init for decls
	of indeterminate size.

Wed Dec  7 16:49:22 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (obscure_complex_init): Function to tweak the decl to
	prevent expand_decl from tring to initialize it.
	(finish_decl): Use it rather than writing the same code in three
	different places.

	* parse.y (bad_parm): Stop trying to support parms without types.

Wed Dec  7 12:06:56 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (grokfield): Make asm specs on static member functions
	work.

Tue Dec  6 15:43:20 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Make a copy of the thrown object.

Tue Dec  6 14:16:34 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y: : Has lower precedence than =.

Tue Dec  6 12:46:17 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (pushdecl): Use DECL_NAME of VAR_DECLs to avoid namespace
	manglings.
	(grokvardecl): Add namespace into variable name.

Tue Dec  6 11:26:55 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (current_namespace_id): New routine to transform a simple
	name into a name in a namespace.
	* decl.c (grokdeclarator): Use it.
	* decl2.c (get_namespace_id): Find the name of the current
	namespace.
	(push_namespace, pop_namespace): Complete out missing
	functionality.

Mon Dec  5 17:11:51 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Don't use LONG_LONG_TYPE_SIZE, as it may
	not be defined.  Fix warning message for enums and restore warning
	for non-enums.

	* decl2.c (push_namespace): Dummy function.
	(pop_namespace): Likewise.
	(do_namespace_alias): Likewise.
	(do_using_decl): Likewise.
	(do_using_directive): Likewise.

	* parse.y: New token NSNAME for namespace names.
	(extdef): Add namespace, using definitions.
	(using_decl): New rule for using declarations.
	(any_id): New rule for identifiers with any degree of scoping.
	(identifier): Add NSNAME.
	(notype_identifier): Likewise.
	(component_decl): Add using_decl.
	(nested_name_specifier): Add NSNAME SCOPE.

	* typeck.c (convert_for_assignment): Handle conversions between
	enums and bool.

	* decl.c (duplicate_decls): Only propagate DECL_MAIN_VARIANT on
	FUNCTION_DECLs.

Mon Dec  5 13:03:16 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct): Give an error if one tries to declare a
	bit-field's size greater than a long long, as the backend will dump.
	It is not an error to declare an enum bit-field greater than its
	precision.  Warn if an enum bit-field is too small to hold all
	its values.

Mon Dec  5 11:41:50 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (convert_for_assignment): Use cp_convert instead of
	convert so that we don't get static casts.

Sun Dec  4 11:59:01 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert): Don't complain about int->enum conversion if
	we are doing static casts.

Fri Dec  2 18:32:41 1994  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_expr): Do something more intelligent with SAVE_EXPRs
	when dumping expressions in error messages.

Fri Dec  2 17:04:27 1994  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_dynamic_cast): Change interface to libg++, ensure that
	the return type is the right type, and make references work.

Fri Dec  2 16:36:43 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (poplevel): Don't be confused by function-scope
	declarations of non-nested functions.
	(duplicate_decls): Propagate DECL_MAIN_VARIANT.
	(pushdecl): Use duplicate_decls to copy info from old decl into new
	function-scope one rather than doing it here.

	* decl2.c (mark_inline_for_output): Deal with the DECL_MAIN_VARIANT
	of this decl, in case this is a function-scope declaration.

	* decl.c (finish_enum): Make sure that the type has the right
	precision when we call fixup_*_type.

Tue Nov 29 19:12:07 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (build_up_reference): Strip superfluous NOP_EXPRs; we do
	want to build up references to rvalues if possible.
	(cp_convert): Stick on a NOP_EXPR when converting to the same type.

Tue Nov 29 11:28:59 1994  Mike Stump  <mrs@cygnus.com>

	* parse.y (maybe_raises): Handle throw ().
	* parse.y (ansi_raise_identifier): Grok type-ids in exception
	specifications.
	* tree.c (build_exception_variant): Use list compare to check if
	two exception specifications match.
	* decl.c (duplicate_decls, bad_specifiers): Enhance wording on error
	messages.
	* call.c (build_method_call): Remove TREE_RAISES.
	* cvt.c (convert_to_aggr): Likewise.
	* typeck.c (build_function_call_real, convert_arguments): Likewise.
	* init.c (expand_aggr_init_1): Likewise.

Tue Nov 29 09:50:39 1994  Mike Stump  <mrs@cygnus.com>

	* except.c: Add support for m68k and mips exception handling
	support.

Tue Nov 29 08:48:33 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_end_all_catch): Throw into outer context, if we
	fall off end of catch handlers.

Mon Nov 28 16:44:41 1994  Mike Stump  <mrs@cygnus.com>

	* Makefile.in: Make is easier to decide where parse.[ch] will be
	built.

Thu Nov 17 20:11:24 1994  Doug Evans  <dje@cygnus.com>

	* cp/Make-lang.in (CXX_INSTALL_NAME): Use program_transform_name.
	(GXX_INSTALL_NAME): Likewise.
	(CXX_CROSS_NAME): Use program_transform_cross_name.
	(GXX_CROSS_NAME): Likewise.
	(c++.install-man): Use program_transform_name on g++.1.
	(c++.uninstall): Likewise.

Mon Nov 28 13:53:03 1994  Mike Stump  <mrs@cygnus.com>

	* parse.y (THROW): Fix precedence of throw expressions.

Mon Nov 28 13:15:16 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_unary_op): Allow promotions from bool to int on
	unary ~.

Sun Nov 27 00:16:21 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (build_overload_name): Use DECL_ASSEMBLER_NAME for
	classes when appropriate.
	(build_overload_nested_name): When dealing with a function context,
	use ASM_FORMAT_PRIVATE_NAME to tweak the name of the function to
	avoid conflicts between local classes of the same name.

Wed Nov 23 17:59:42 1994  Mike Stump  <mrs@cygnus.com>

	* gxx.gperf, parse.y, lex.h, hash.h, lex.c (init_lex), delc.c
	(duplicate_decls, grokdeclarator), cp-tree.h: Add support for
	`explicit'.
	* cvt.c (convert_to_reference, cp_convert, build_type_conversion_1,
	build_type_conversion): Use LOOKUP_ONLYCONVERTING in
	build_method_calls so that non-converting constructors are not used.
	* call.c (build_method_call): If we shouldn't use a non-converting
	constructor, then don't.

Wed Nov 23 14:46:56 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't try to synthesize methods yet.

Tue Nov 22 12:45:21 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (push_template_decls): Create CONST_DECLs for template
	constant parameters, not VAR_DECLs.

Sat Nov 19 15:28:31 1994  Jim Wilson  <wilson@chestnut.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Can shorten shift only if
	shift count is less than size in bits of arg0.

Thu Nov 17 15:30:50 1994  Mike Stump  <mrs@cygnus.com>

	* gxx.gperf, hash.h, lex.c (init_lex, real_yylex), parse.y: Add new
	ANSI keywords and, and_eq, bitand, bitor, explicit, namespace, not,
	not_eq, or, or_eq, typename, using, xor, xor_eq to g++.  Still need
	to add support for explicit, namespace, typename, and using, support
	for the rest is already in.

Fri Nov  4 19:04:18 1994  Mike Stump  <mrs@cygnus.com>

	* gc.c (get_bad_cast_node): New routine to support compile time
	throws of bad_cast.
	* gc.c (build_dynamic_cast): Support throwing of bad_cast at compile
	time.

Fri Nov  4 11:12:00 1994  Mike Stump  <mrs@cygnus.com>

	* except.c: Add hppa support.

Fri Nov  4 10:50:50 1994  Mike Stump  <mrs@cygnus.com>

	* except.c: Add rs6000 support.

Thu Nov  3 14:24:23 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (do_unwind): Add i[34]86 support.

Thu Nov  3 00:10:46 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (do_pending_expansions): Unset TREE_PUBLIC on implicit
	instantiations.

Wed Nov  2 15:08:24 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl.c (finish_function): Emit types used in method parameters
	into symbol table.

Wed Nov  2 15:05:47 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (process_template_parm): Allow pointer to member function
	template parameter types.
	(uses_template_parms): Handle pointer to member function
	CONSTRUCTORs.

	* g++.c (main): Cast first argument of bzero to (char *).
	Pass -lstdc++ instead of -lg++ unless we are invoked as 'g++'.

Mon Oct 31 14:50:48 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* gc.c (build_dynamic_cast): Rewrite to make it work.
	* class.c (finish_vtbls): Build more vtables if flag_rtti is on.
	* class.c (modify_all_direct_vtables): Likewise.
	* init.c (expand_direct_vtbls_init): Expand more vtables if
	flag_rtti is on.
	* decl.c (init_type_desc): Add default return.

Tue Oct 25 17:13:09 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* tree.c (debug_binfo): Get rid of the initial size entry of
	vtable.
	* cp-tree.h: Change flag_dossier to flag rtti, define type
	descriptor type nodes.
	* decl.c (init_type_desc): New function to initialize type
	descriptor type nodes.
	* decl.c (record_builtin_type): Change flag_dossier to flag_rtti.
	* lex.c (init_lex): Likewise.
	* decl.c: Change variable flag_dossier to flag_rtti.
	* decl.c (duplicate_decls): Get rid initial size entry of vtable.
	* decl.c (hack_incomplete_structures): Take out assert 164.
	* search.c (get_abstract_virtuals_1): Likewise.
	* search.c (dfs_init_vbase_pointers): Change CLASSTYPE_DOSSIER to
	CLASSTYPE_RTTI.
	* parse.y: Likewise.
	* class.c (prepare_fresh_vtable): For virtual bases, get right
	offset.
	* class.c (add_virtual_function): Change flag_dossier to
	flag_rtti.
	* class.c (modify_one_vtable): Modify the right rtti entry.
	* class.c (override_one_vtable): Get rid of size entry.
	* class.c (finish_struct): Change flag_dossier to flag_rtti, and
	build extra vtables, build type descriptors for polymorphic
	classes.
	* gc.c (build_headof): Make headof() works correctly with new
	rtti.
	* gc.c (build_typeid): Make this function work with new rtti.
	* gc.c (get_typeid): Make this function work with new rtti.
	* gc.c (build_bltn_desc): New function for new rtti.
	* gc.c (build_user_desc): Likewise.
	* gc.c (build_class_desc): Ditto.
	* gc.c (build_ptr_desc): Ditto.
	* gc.c (build_attr_desc): Ditto.
	* gc.c (build_func_desc): Ditto.
	* gc.c (build_ptmf_desc): Ditto.
	* gc.c (build_ptmd_desc): Ditto.
	* gc.c (build_t_desc): Ditto.
	* gc.c: Comment out old build_t_desc, build_i_desc, build_m_desc.

Tue Oct 25 13:37:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): Check for TREE_UNSIGNED differences
	after checking for integral conversions.

Wed Nov 30 19:13:50 1994  Mike Stump  <mrs@cygnus.com>

	* Version 2.6.3 released.

Thu Nov 17 10:56:50 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck2.c (build_m_component_ref): Check the basetype of the
	member pointer against the main variant of the object type.

Mon Nov 14 14:21:52 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (convert_to_reference): Make sure that the original expr
	gets its type back when converting a reference.

	* method.c (build_overload_name): Clear numeric_outputed_need_bar here.
	(build_decl_overload): Instead of here.

Tue Nov  8 17:11:24 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (cp_convert): Don't build a TARGET_EXPR if we're not in a
	function.

	* typeck.c (convert_for_initialization): Handle initialization from
	a TARGET_EXPR.

Sun Nov  6 01:34:24 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (lookup_nested_type_by_name): Fix list-walking logic.
	(tsubst): When replacing a TEMPLATE_TYPE_PARM, propagate
	TYPE_READONLY and TYPE_VOLATILE from the argument.
	(unify): When unifying with a TEMPLATE_TYPE_PARM, remove cv-quals
	present in parm from arg.
	(type_unification): Strip REFERENCE_TYPE from the argument type.
	(unify): Don't strip REFERENCE_TYPE from the argument type.

Sat Nov  5 22:42:15 1994  Greg McGary  <gkm@magilla.cichlid.com>

	* pt.c (do_type_instantiation): Check to see if there's a
	IDENTIFIER_TEMPLATE on a class before calling
	instantiate_member_templates().

Sat Nov 12 06:35:42 1994  Mike Stump  <mrs@cygnus.com>

	* Version 2.6.2 released.

Thu Nov  3 18:48:19 1994  Paul Eggert  <eggert@twinsun.com>

	* Makefile.in (spew.o, lex.o, pt.o):
	Depend on $(srcdir)/parse.h, not parse.h.

Tue Nov  1 19:19:41 1994  Mike Stump  <mrs@cygnus.com>

	* Version 2.6.1 released.

Sun Oct 23 13:19:55 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c: Declare flag_access_control.
	(struct lang_f_options): Add access-control.
	* expr.c (cplus_expand_expr, NEW_EXPR): Unset flag_access_control
	for the call to expand_aggr_init to copy the object out of the
	pcc_struct_return slot.
	* search.c (compute_access): if (!flag_access_control) return
	access_public.

Fri Oct 21 00:32:54 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* lex.c (cons_up_default_function): Don't try to defer method
	synthesis now.

	* decl.c (init_decl_processing): Use __pure_virtual for abort_fndecl
	instead of abort, since the OSF/1 dynamic linker doesn't like to see
	relocation entries for abort.

	* tree.c (array_type_nelts_total): Use sizetype, not
	integer_type_node.
	(array_type_nelts_top): Likewise.

Thu Oct 20 15:48:27 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Added handling for catch parameters
	(CATCHPARM).
	* except.c (expand_start_catch_block): Use the new CATCHPARM context
	instead of NORMAL.
	* except.c (expand_throw): Don't let convert_to_reference complain
	about what we are doing.

Thu Oct 20 12:55:24 1994  Jim Wilson  <wilson@cygnus.com>

	* method.c (emit_thunk): Call instantiate_virtual_regs.

Wed Oct 19 14:15:33 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_exception_blocks): Make sure throw code doesn't
	get put in function that won't be output.

Mon Oct 17 18:03:15 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (init_decl_processing): Make alloca a builtin.

Thu Oct 27 21:10:25 1994  Craig Burley  <craig@burley>

	* g++.c (main): Only decrement "added" and set "library" to
	NULL when "library" != NULL (just like 940829 fix).

Mon Oct 17 15:56:11 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Make sure the false label
	gets onto the permanent obstack, as it is used for the exception
	table.

Fri Oct 14 18:54:48 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (modify_one_vtable): Since the DECL_CONTEXT of fndecl can
	be set just below, use current_fndecl instead.

Fri Oct 14 15:12:22 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (expand_aggr_vbase_init_1): Don't call expand_aggr_init_1
	with LOOKUP_SPECULATIVELY.
	(expand_default_init): Abort if build_method_call returns NULL_TREE.

	* typeck.c (build_modify_expr): Don't just build a MODIFY_EXPR if
	the rhs is a TARGET_EXPR.

	* parse.y (left_curly): Anonymous types are not affected by #pragma
	interface/implementation.

	* method.c (synthesize_method): Don't call setup_vtbl_ptr for the
	default constructor if it isn't needed.

	* lex.c (cons_up_default_function): Do synthesize methods for
	anonymous types if necessary.

Thu Oct 13 17:44:55 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (build_decl_overload): Set numeric_outputed_need_bar to 0.

Wed Oct 12 13:27:57 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Understand how to copy an aggregate.

	* init.c (expand_default_init): Likewise.  Also remove some of the
	crufty code that assumes methods will not be synthesized properly.

	* lex.c (cons_up_default_function): If the containing type has no
	name, these functions should never need to be called, so just
	declare them.

	* lex.c (real_yylex): Use HOST_BITS_PER_WIDE_INT to determine the
	bitmask for lexing character constants.

	* call.c (build_method_call): Disable code that tries to do tricky
	stuff with a default parameter that is a constructor call, but
	actually does other tricky stuff that breaks things.

Wed Oct 12 16:14:01 1994  Benoit Belley  <belley@cae.ca>

	* decl.c (finish_enum): Disable code which forces enums to be signed,
	since this conflicts with their use as bitfields. type_promotes_to
	handles promotion of enums of underlying unsigned types to signed
	integer types.

Wed Oct 12 13:24:03 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (type_promotes_to): Also promote enums to long if
	appropriate.

	* typeck.c (default_conversion): Don't expect type_promotes_to to
	return a main variant.

Wed Oct 12 12:19:45 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_scoped_method_call): Don't lose side effects in the
	object expression when calling a non-existent destructor.

Fri Sep  2 19:05:21 1994  Rohan Lenard  <rjl@iassf.easams.com.au>

	* call.c (build_scoped_method_call): Remove erroneous error message
	when destructor call is written as a scoped call.

Tue Oct 11 23:48:31 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* various: Cast pointer arguments to bzero and bcopy to char *.

Tue Oct 11 19:34:32 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (get_derived_offset): Added a type parameter to limit how
	far up the CLASSTYPE_VFIELD_PARENT chain we search.
	* class.c (modify_one_vtable, fixup_vtable_deltas): When forming the
	offset to put into the vtable for the this parameter, make sure we
	don't offset from a parent of the DECL_CONTEXT of the function.

Tue Oct 11 16:10:52 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (do_function_instantiation): Set DECL_EXTERNAL and
	TREE_STATIC when setting DECL_INTERFACE_KNOWN.
	(do_type_instantiation): Likewise.

	* lex.c (cons_up_default_function): Set DECL_INTERFACE_KNOWN,
	DECL_EXTERNAL and TREE_STATIC as appropriate.

	* decl2.c (finish_file): Also synthesize methods that don't have
	DECL_EXTERNAL set.  Set interface_unknown before doing so.

	* decl.c (start_function): If DECL_INTERFACE_KNOWN is set on the
	function decl, don't muck with TREE_PUBLIC and DECL_EXTERNAL.

Mon Oct 10 00:56:53 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* lex.c (cons_up_default_function): Mark methods in a template class
	as template instances.  Store the values of interface_unknown and
	interface_only for do_pending_inlines.
	(do_pending_inlines): Use them.

	* decl2.c (finish_file): If we haven't seen a definition of a
	function declared static, make the decl non-PUBLIC so compile_file
	can give an error.

Sun Oct  9 02:42:29 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* method.c (do_build_copy_constructor): Handle anonymous unions.
	(do_build_assign_ref): Likewise.
	(largest_union_member): Move from lex.c.

Sat Oct  8 14:59:43 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	Re-implement g++'s vague linkage independent of TREE_PUBLIC.
	* pt.c (instantiate_member_templates): Lose redundant
	-fexternal-templates handling.
	(tsubst): Set TREE_PUBLIC and DECL_EXTERNAL on new decls.  Don't set
	TREE_STATIC or DECL_INTERFACE_KNOWN.
	(do_pending_expansions): Predicate on DECL_INTERFACE_KNOWN instead
	of DECL_EXTERNAL for explicit instantiations.
	(do_function_instantiation): Do the new thing.
	(do_type_instantiation): Likewise.
	(instantiate_template): Deal with member templates defined in a .cc
	file with -fexternal-templates.
	* except.c (expand_exception_blocks): Use DECL_LINKAGE_KNOWN to
	decide whether to stick builtin_throw here.
	* decl2.c (import_export_inline): Predicate on DECL_INTERFACE_KNOWN
	rather than TREE_PUBLIC.  Generally fix rules.
	(finish_file): Use DECL_INITIAL to determine whether or not a method
	has been synthesized, rather than TREE_ASM_WRITTEN.
	* decl.c (warn_extern_redeclared_static): Use DECL_PUBLIC instead of
	TREE_PUBLIC.
	(pushdecl): Likewise.
	(duplicate_decls): Likewise.  Deal with DECL_DECLARED_STATIC and
	DECL_INTERFACE_KNOWN.
	(redeclaration_error_message): Fix checking for conflicting linkage.
	(define_function): Set DECL_INTERFACE_KNOWN.
	(grokfndecl): Function decls are PUBLIC until we are sure about
	their linkage.  Set DECL_DECLARED_STATIC as needed.
	(start_function): Deal with linkage.  Move pushdecl after linkage
	magic.
	(finish_function): Don't set TREE_ASM_WRITTEN on discarded inlines.
	* cp-tree.h (lang_decl_flags): Add interface_known and
	declared_static.
	(DECL_INTERFACE_KNOWN): New macro.
	(DECL_DECLARED_STATIC): New macro.
	(DECL_PUBLIC): New macro.

	Clean up bogus use of TREE_PUBLIC.
	* class.c (alter_access): Fix mistaken use of TREE_PUBLIC (it
	doesn't correspond to TREE_PROTECTED and TREE_PRIVATE).
	* init.c (do_friend): Don't arbitrarily set TREE_PUBLIC.

Wed Oct  5 13:44:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_overload_call_real): Don't immediately do
	array->pointer conversion.

	* pt.c (type_unification): If not passing to a reference, strip
	cv-quals.  Also handle array->pointer conversion.

Tue Oct  4 17:45:37 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokdeclarator): Don't warn about applying const to a
	const typedef or template type parameter.

	* decl2.c (finish_file): Also synthesize methods after walking the
	vtables.  Ugly ugly ugly.

Mon Oct  3 15:02:41 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* various: Remove lingering remnants of old exception handling code.

	* decl2.c (finish_file): Synthesize methods before walking the
	vtables, so that the vtables get emitted as needed.

	* decl.c (shadow_tag): Remove obsolete code for pushing tags and
	dealing with exceptions.

Mon Oct  3 13:05:27 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* Make-lang.in (g++-cross): Depend upon version.o and $(LIBDEPS).

Mon Oct  3 02:59:28 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): Fix inline handling.

Sun Oct  2 00:21:56 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokdeclarator): Handle redundant scope even better.
	({push,pop}_cp_function_context): Take toplev parameter.

	* method.c (synthesize_method): Pass toplev parameter to
	{push,pop}_cp_function_context depending on decl_function_context
	(fndecl).

	* typeck.c (build_x_unary_op): Unary & on OFFSET_REFs is always the
	built-in version.

	* method.c (synthesize_method): Don't be confused by __in_chrg
	parameter.

	* class.c (popclass): Set C_C_D like start_function does.

	* decl.c (grokdeclarator): Handle redundant scope better.

	* parse.y (expr_or_declarator): Add '(' expr_or_declarator ')' rule.
	(direct_notype_declarator): Likewise.
	(complex_direct_notype_declarator): Remove it here.

Sat Oct  1 21:42:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (resolve_offset_ref): Fix types used in resolving .*
	expressions.

Sat Oct  1 15:18:49 1994  Jason Merrill  <jason@phydeaux.cygnus.com>

	Beginnings of work to synthesize methods only when needed.
	* call.c (build_method_call): Synthesize methods as necessary
	(currently never necessary).
	* class.c (popclass): Don't try to set C_C_D here, as it'll end up
	on the wrong obstack.
	* decl.c (push_cp_function_context): Mostly copied from
	push_c_function_context.
	(pop_cp_function_context): Similarly.
	(finish_function): Reverse order of poplevel and pop_nested_class so
	that current_class_decl is restored properly. 
	(start_function): Likewise.
	(finish_function): Add parameter 'nested'.  Don't call
	permanent_allocation if (nested).
	* various: Pass extra parameter to finish_function.
	* decl2.c (finish_file): Reorganize end-of-file inline handling,
	synthesizing methods as necessary.
	* lex.c (cons_up_default_function): Call mark_inline_for_output.
	Only synthesize methods immediately if #pragma implementation
	(currently disabled).
	(do_pending_inlines): Call synthesize_method.
	* method.c (synthesize_method): New function; all method synthesis
	goes through here.  Calls do_build_assign_ref and
	do_build_copy_constructor.
	(build_default_constructor): Remove.
	(build_dtor): Likewise.
	(build_assign_ref): Rename to do_build_assign_ref and remove stuff
	done by synthesize_method.
	(build_copy_constructor): Similarly.

Thu Sep 29 16:58:52 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (c_expand_return): Use magic so the backend can fixup the
	assignment into the return register, so cleanups won't clobber it.

Thu Sep 29 13:08:50 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (hack_identifier): Don't call assemble_external for
	template decls.

	* decl.c (finish_decl): Also end temporary allocation if the decl in
	question has a type of error_mark_node.

Wed Sep 28 21:45:00 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_modify_expr): When optimizing ?: on lhs, make sure
	that if the ?: was a reference type, that the subparts will be also.

Wed Sep 28 16:14:04 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c (register_exception_table): Use Pmode, not PTRmode.

Fri Sep 23 13:54:27 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (do_pending_inlines): Do method synthesis after the
	pending_inlines have been reversed.

Thu Sep 22 12:53:03 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl2.c (finish_file):  Fix Brendan's fix:  Only call
	register_exception_table if there is a non-empty exception table.

Thu Sep 22 12:03:46 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (finish_file): Only do register_exception_table if
	-fhandle-exceptions is being used.

Wed Sep 21 19:01:51 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* except.c (output_exception_table_entry):  Simplify
	by using assemble_integer.
	(build_exception_table):  Change to return a count.
	Cleanup to use standard macros, instead of hard-wired
	sparc asm format.  Don't make __EXCEPTION_TABLE__ global.
	(register_exception_table):  New function.  Generate call to builtin.
	* decl2.c (finish_file):  Call register_exception_table.
	* cp-tree.h (build_exception_table):  Fix prototype.

Wed Sep 21 13:20:42 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* tree.c (break_out_calls): Don't try to duplicate the DECL_INITIAL.

	* decl2.c (delete_sanity): Give an error at trying to delete a
	function.

Wed Sep 21 11:47:10 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (cons_up_default_function): Mark synthesized destructors
	inline.

	* decl.c (duplicate_decls): Ignore redeclarations of wchar_t as
	something other than __wchar_t, complaining if -pedantic and not in
	a system header.

Tue Sep 20 09:43:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (xref_tag): Set up BINFO_INHERITANCE_CHAIN on base binfos
	here.

	* typeck.c (build_modify_expr): Require complete type after checking
	for error_mark_node.

	* call.c (build_method_call): Print parmtypes when complaining of
	ambiguous call.

	* typeck.c (build_modify_expr): Handle assignment to array from
	non-array.

	* decl.c (lookup_name_real): Deal with got_scope == error_mark_node.

	* call.c (build_method_call): Don't bother with the exact match.

Mon Sep 19 00:51:39 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (expand_aggr_init): If we munge the type of the variable,
	also munge the type of the initializer.

	* decl.c (grokdeclarator): Use <= when comparing to RID_LAST_MODIFIER.
	(init_decl_processing): Push artificial declaration of wchar_t so
	people don't have to declare it before they can use it.

	* error.c (cp_line_of): Return lineno in lieu of 0.

	* typeck.c (convert_for_assignment): Handle conversion of pmfs to
	int and bool.
	(build_component_ref): Fold the COMPONENT_REF in case it can be
	reduced.

	* typeck2.c (store_init_value): Don't pedwarn about non-constant
	bracketed initializers for automatic variables.

Sun Sep 18 10:12:12 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_decl): Don't say `typedef enum foo foo'.

	* decl.c (start_decl): Don't set TREE_PUBLIC on template decls just
	because they're affected by #pragma i/i.  We'll deal with that when
	they get instantiated.

	* typeck.c (build_unary_op): Clean up cruft in ADDR_EXPR case.

	* class.c (instantiate_type): Set TREE_CONSTANT on instantiated
	ADDR_EXPRs if appropriate.

	* decl.c (build_ptrmemfunc_type): Unset IS_AGGR_TYPE on pmf types.

	* typeck.c (build_ptrmemfunc): Handle &overloaded_method as an
	initializer properly.
	* typeck2.c (digest_init): Likewise.

	* tree.c (cp_build_type_variant): Like c_build_type_variant, except
	it uses build_cplus_array_type.
	* *.c: Use cp_build_type_variant instead of c_build_type_variant.

	* pt.c (do_type_instantiation): Don't try to instantiate nested
	enums.

Tue Sep 13 10:56:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_up_reference): Handle preincrement and predecrement
	properly.

Tue Sep 13 09:51:59 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (finish_decl): Only lay out the rtl for DECL if it is, in
	fact, static.

Mon Sep 12 14:40:30 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (finish_decl): Lay out the rtl for DECL before doing
	grok_reference_init, in case it's static.

Mon Sep 12 12:45:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't synthesize constructors if the
	class has a field with the same name as the class.  Don't die on
	classes with no constructors or destructors.  Don't die if the head
	and tail of the class are in different files.

	* decl.c (grokdeclarator): Don't treat a function pointer field
	with the same name as the class as a constructor.

Fri Sep  9 13:17:00 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_c_cast): Pull constant values out of their
	variables here.

	* decl.c (duplicate_decls): Only propagate DECL_CHAIN in
	FUNCTION_DECLs and TEMPLATE_DECLs.

Thu Sep  8 10:07:48 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): Propagate DECL_CHAIN in all DECLs that
	have it.

	* pt.c (unify): REALs and INTEGERs only unify with their own genus.
	(instantiate_member_templates): Don't muck with DECL_EXTERNAL and
	TREE_PUBLIC unless -fexternal-templates.

Wed Sep  7 13:17:10 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (do_type_instantiation): Call instantiate_member_templates.
	Deal with specializations.
	(tsubst): Don't stick the mangled name in DECL_NAME for function
	instantiations.  Don't push them, either.

	* decl2.c (grokfield): Move code for generating the
	DECL_ASSEMBLER_NAME for static members from here.
	* method.c (build_static_name): To here.
	* decl.c (grokvardecl): Call build_static_name.
	(duplicate_decls): Keep old DECL_ASSEMBLER_NAME.

Mon Sep  5 12:49:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): If -Wsynth, warn when selecting
	synthesized op= over user-supplied one cfront would select.
	* decl2.c (lang_decode_option): Handle -Wsynth.

Fri Sep  2 15:11:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (finish_enum): Overhaul to fix several bugs.
	(start_enum): Disable useless code.

Thu Sep  1 16:04:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (c_expand_return): Warn about returning a reference to a
	temporary.
	(convert_arguments): Increment argument counter when using default
	arguments, too.

Wed Aug 31 14:29:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (finish_decl): If the type of decl is error_mark_node,
	don't bother trying to do anything.

	* typeck.c (convert_for_initialization): If the rhs contains a
	constructor call, pretend the lhs type needs to be constructed.

	* init.c (expand_default_init): If we stick the object inside the
	initializer, mark the initializer used.

Tue Aug 30 13:50:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (build_assign_ref): Return *this;
	(build_assign_ref): Fix base assignment order.
	(build_copy_constructor): Fix member init order.

Mon Aug 29 13:54:39 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++.c (main): Remember to clear out SAW_SPECLANG after we see
	its argument.

Sat Aug 27 09:36:03 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (build_copy_constructor): Also copy virtual bases.

Fri Aug 26 17:05:15 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (do_pending_inlines): Clear out pending_inlines before doing
	any synthesis.  Also first set deja_vu on all pending_inlines.

	* method.c (build_assign_ref): Use build_member_call to invoke base
	operator=, rather than build_modify_expr.  And use
	build_reference_type instead of TYPE_REFERENCE_TO.
	(build_copy_constructor): Use TYPE_NESTED_NAME to identify the
	basetype.

	* decl2.c (grokfield): Don't complain about undefined local class
	methods.

	* class.c (finish_struct): Don't try to synthesize methods here.
	* lex.c (do_pending_inlines): Instead, synthesize them here.
	(init_lex): Initialize synth_obstack.
	(cons_up_default_function): Stick synthesis request on
	pending_inlines.

Fri Aug 26 12:24:14 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (build_method_call) [PCC_STATIC_STRUCT_RETURN]: Also
	accept an RTL_EXPR in what we're about to use for the instance,
	since anything which would end up with pcc_struct_return set
	inside cplus_expand_expr.

	* cp-tree.h (cons_up_default_function): Note change of prototype.

Thu Aug 25 23:05:30 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* class.c (finish_struct): Undid change from Aug 21 testing
	CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.
	* parse.y (left_curly): Likewise, undid change from Aug 21.
	* decl.c (xref_tag): Undid change from Aug 21, set
	CLASSTYPE_INTERFACE correctly, and added comments.

Thu Aug 25 00:36:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Rework approach to synthesized methods; don't go through the parser
	anymore.
	* class.c (finish_struct): Use new synthesis approach.
	* lex.c (cons_up_default_function): Now just creates declaration,
	not code.
	(largest_union_member): #if 0 out.
	(default_assign_ref_body): Likewise.
	(default_copy_constructor_body): Likewise.
	* method.c (build_default_constructor): New function to synthesize X().
	(build_copy_constructor): Synthesize X(X&).
	(build_assign_ref): Synthesize X::operator=(X&).
	(build_dtor): Synthesize ~X().

	* error.c (cp_line_of): If we're dealing with an artificial
	TYPE_DECL, look at the type instead.

Wed Aug 24 11:11:50 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (sort_member_init): Check warn_reorder.
	* decl2.c (lang_decode_option): Handle -W{no-,}reorder.

	* cp-tree.h (CLASSTYPE_SOURCE_LINE): New macro.
	* error.c (cp_line_of): Use CLASSTYPE_SOURCE_LINE for aggregates.
	* class.c (finish_struct): Set CLASSTYPE_SOURCE_LINE.

Tue Aug 23 09:28:35 1994  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_decl): Improve wording, so that error messages
	dont't read template<, class foo>...

Mon Aug 22 15:30:51 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (label_colon): Also match a TYPENAME as a label name,
	since they may have declared a class by that name but have also
	tried to have a local label under the same name.

	* pt.c (coerce_template_parms): Call cp_error, not cp_error_at,
	for the message so they know at what point it was instantiated.

Sun Aug 21 23:07:35 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
	CLASSTYPE_VTABLE_NEEDS_WRITING for signatures up to left_curly time.
	* decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
	CLASSTYPE_VTABLE_NEEDS_WRITING for signatures down to left_curly time.
	* parse.y (left_curly): New final resting place for setting
	CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING for signatures.

	* class.c (finish_struct): Don't test for function/field name
	conflicts in signatures, since all the fields are compiler-constructed.

Fri Aug 19 14:04:47 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* method.c (build_overload_nested_name): In qualified name
	mangling, the template with value instantiation will have numeric
	at end and may mixed with the name length of next nested level.
	Add a '_' in between.
	* method.c (build_overload_name): Ditto.
	* method.c (build_overload_identifier): Ditto.

Thu Aug 18 16:24:43 1994  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_decl): Handle NULL args.

Thu Sep 29 16:15:36 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* g++.c: Rework last change so it's done like collect.c (and
	gcc.c).

Wed Sep 14 10:17:27 1994  Michael I Bushnell  <mib@churchy.gnu.ai.mit.edu>

	* g++.c: Include <sys/errno.h> in case `errno' is a macro
	as permitted by ANSI C.

Thu Aug 18 12:48:09 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct): Move setting of CLASSTYPE_INTERFACE and
	CLASSTYPE_VTABLE_NEEDS_WRITING up to left_curly time.
	* decl.c (xref_tag): Move setting of CLASSTYPE_INTERFACE and
	CLASSTYPE_VTABLE_NEEDS_WRITING down to left_curly time.
	* parse.y (left_curly): New final resting place for setting
	CLASSTYPE_INTERFACE and CLASSTYPE_VTABLE_NEEDS_WRITING.

Thu Aug 11 11:32:42 1994  H.J. Lu  <hjl@nynexst.com>

	* g++.c (main): Only decrement "added" and set "library" to
	NULL when "library" != NULL.

Sat Aug 13 00:14:52 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Don't set TREE_PUBLIC on a function decl
	just because its class has a known interface.
	(decls_match): Deal with new format of template parms.

	* lex.c (cons_up_default_function): Don't play with TREE_PUBLIC and
	DECL_EXTERNAL here.

Fri Aug 12 01:55:15 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (pushtag): SET_DECL_ARTIFICIAL on gratuitous typedefs.
	(xref_defn_tag): Likewise.
	(pushdecl): Only allow artificial typedefs to be shadowed.

	* init.c (emit_base_init): Pass the right binfos to
	expand_aggr_init_1.

	* class.c (delete_duplicate_fields_1): Make it work right.
	(finish_struct): Catch function/field name conflict.

	* decl2.c (check_classfn): Pass the function to cp_error, not just
	the name.

	* init.c (sort_member_init): Warn when order of member initializers
	does not match order of member declarations.
	(emit_base_init): Call expand_aggr_init_1 with LOOKUP_PROTECT.

	* error.c (dump_expr): Handle lists of functions.

	* decl.c (start_function): #pragma interface only affects functions
	that would otherwise be static.
	(finish_decl): Don't warn about an unused variable if it has both
	constructor and destructor, since the 'resource allocation is
	initialization' idiom is relatively common.

	* typeck.c (comp_target_types): Don't handle TEMPLATE_TYPE_PARMs.
	(comp_target_parms): Likewise.
	(compparms): Never consider default parms.
	(common_base_type): Don't choose a virtual baseclass if there is a
	more derived class in common.
	(build_conditional_expr): If pedantic, pedwarn about conversion to
	common base in conditional expr.

	* class.c (instantiate_type): Handle template instantiation better.

	* typeck.c (convert_arguments): Don't try to get tricky and convert
	to int directly when PROMOTE_PROTOTYPES is set, as it breaks
	user-defined conversions.

	* lex.c (check_for_missing_semicolon): Also give error at end of
	file.

	* call.c (build_method_call): Don't promote arrays to pointers here.

	* typeck.c (convert_arguments): Don't require the actual parameter
	to be of a complete type if the formal parameter is a reference.

Thu Aug 11 15:21:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Soften 'static' on member function error
	to pedwarn.

	* init.c (build_new): Don't automatically save rval.
	(build_offset_ref): Do field lookup with proper basetype_path.

Thu Aug 11 12:46:54 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* errfn.c (cp_silent): Declare to mark when we should avoid
	emitting warnings and errors.
	(cp_error): Check it.
	(cp_warning): Likewise.
	(cp_pedwarn): Likewise.
	(cp_compiler_error): Likewise.
	(cp_error_at): Likewise.
	(cp_warning_at): Likewise.
	(cp_pedwarn_at): Likewise.
	* call.c (compute_conversion_costs): Set CP_SILENT when we start
	out, and make sure we turn it off before we leave.

Thu Aug 11 00:02:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (grok_array_decl): Try computing *(A+B) if neither
	argument is obviously an array.

Wed Aug 10 15:32:04 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (c_expand_start_case): Do cleanups here.

	* parse.y (xcond): Do bool conversion here, too.
	(simple_stmt, SWITCH case): Don't do cleanups here.

	* decl.c (duplicate_decls): Don't treat builtins that have been
	explicitly declared specially.

Tue Aug  9 01:16:09 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* tree.c (make_deep_copy): Support copying pointer, reference,
	function, array, offset and method types.

	* decl.c (init_decl_processing): Mark exit and abort as
	BUILT_IN_NONANSI so that duplicate_decls is kinder about
	redeclaration.
	(duplicate_decls): Don't give two errors for redeclaring a C
	function with the same parms but a different return type.

	* parse.y (paren_cond_or_null): Do cleanup and bool conversion here.
	(condition): Instead of here.
	(simple_stmt, SWITCH case): Also do cleanup here.

	* decl2.c (finish_anon_union): Only break out FIELD_DECLs.

	* call.c (build_method_call): Don't throw away the side effects of
	the object in a call to a non-existent constructor.
	* parse.y (primary): Likewise.

	* method.c (build_decl_overload): Oop.

	* decl2.c (lang_decode_option): Deal with flag_no_nonansi_builtin,
	warn about uselessness of specifying -fansi-overloading.

	* method.c (build_decl_overload): Treat any non-member new with one
	parameter as __builtin_new.

	* decl.c (init_decl_processing): Setup built-in meanings of exit,
	_exit and abort.

Mon Aug  8 15:03:30 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_readonly_or_volatile): Put a space between const and
	volatile if both apply.

	* init.c (perform_member_init): Clean up after this initialization.
	(emit_base_init): Clean up after each base init, not after all have
	been done.
	(expand_aggr_vbase_init_1): Clean up after this init.

Sun Aug  7 14:55:05 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Deal with destroying references.

	* parse.y (condition): Do bool_truthvalue_conversion here.
	(paren_expr_or_null): And here.
	(simple_if): Not here.
	(simple_stmt): Or here.

Sat Aug  6 22:29:45 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (paren_expr_or_null): Wrap the expression in a
	CLEANUP_POINT_EXPR.
	(condition): Likewise.

Sat Aug  6 19:46:37 1994  Rohan Lenard  <rjl@easams.com.au>

	* call.c (build_scoped_method_call): Fix error message when
	destructor call refers to a nonexistent type.

Sat Apr 16 22:43:30 1993  Gerald Baumgartner  <gb@cs.purdue.edu>

	* lex.h (rid): Deleted RID_RAISES, it's never used.
	Moved RID_PUBLIC, RID_PRIVATE, RID_PROTECTED, RID_EXCEPTION,
	RID_TEMPLATE and RID_SIGNATURE to the end of the enumeration,
	they don't need to be touched in `grokdeclarator.'
	(RID_LAST_MODIFIER): Defined macro to be RID_MUTABLE.

	* decl.c (grokdeclarator): Use RID_LAST_MODIFIER instead of
	RID_MAX as loop limit for finding declaration specifiers.

Sat Apr  3 21:59:07 1993  Gerald Baumgartner  <gb@cs.purdue.edu>

	* lex.c (debug_yytranslate): Moved to parse.y since it needs to
	access `yytname,' which is static in parse.c.

Fri Apr  2 23:36:57 1993  Gerald Baumgarnter  <gb@cs.purdue.edu>

	* cp-tree.h (GNU_xref_ref): Fixed typo in extern declaration, it
	was `GNU_xref_def' instead of `GNU_xref_ref.'

Fri Aug  5 14:20:16 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (do_function_instantiation): Don't set TREE_PUBLIC and
	DECL_EXTERNAL on 'extern' instantiations; wait until EOF to do that.
	(do_type_instantiation): Likewise.

	* decl2.c (import_export_inline): Decides at EOF what an inline's
	linkage should be.
	(finish_file): Call it.

	* decl.c (start_function): Don't rely on the settings of TREE_PUBLIC
	and DECL_EXTERNAL from do_*_instantiation.  Only set
	DECL_DEFER_OUTPUT on inlines whose linkage might actually change.
	(finish_function): Use DECL_DEFER_OUTPUT to decide which inlines to
	mark for later consideration, rather than DECL_FUNCTION_MEMBER_P.

Fri Aug  5 01:12:20 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (get_class_offset_1, get_class_offset): New routine to
	find the offset of the class where a virtual function is defined,
	from the complete type.
	* class.c (modify_one_vtable, fixup_vtable_deltas): Use
	get_class_offset instead of virtual_offset as get_class_offset will
	always provide the right answer.
	* tree.c (virtual_offset): Remove.  It only ever worked some of the
	time.

Tue Aug  2 12:44:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Put back unary_complex_lvalue call
	that I thought was redundant.

	* typeck.c (c_expand_return): Fix a case I missed before.

Sun Jul 31 17:54:02 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (unify): Strip cv-quals from template type arguments (when
	'const T*' is matched to 'const char*', that does not mean that T is
	'const char').

Fri Jul 29 01:03:06 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (do_type_instantiation): Instantiate nested TAGS, not
	typedefs.  Third time's the charm?

	* parse.y (template_parm): Support default template parms.
	* pt.c (process_template_parm): Likewise.
	(end_template_parm_list): Likewise.
	(coerce_template_parms): Likewise.
	(mangle_class_name_for_template): Likewise.
	(push_template_decls): Likewise.
	(unify): Likewise.
	* method.c (build_overload_identifier): Likewise.
	* error.c (dump_decl): Likewise.

Wed Jul 27 17:47:00 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (do_type_instantiation): Only instantiate nested *classes*.

Tue Jul 26 13:22:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (note_debug_info_needed): Also emit debugging information
	for the types of fields.

Mon Jul 25 00:34:44 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (lookup_template_class): Pass 'template' to
	coerce_template_parms instead of 'in_decl', since it's a more
	meaningful context.

	* typeck.c (c_expand_return): Make sure any cleanups for the return
	expression get run.
	(build_c_cast): Use CONVERT_EXPR for conversion to void.

	* pt.c (do_type_instantiation): Also instantiate nested types.

	* typeck.c (convert_for_assignment): Don't die when comparing
	pointers with different levels of indirection.

	* decl.c (grokdeclarator): The sub-call to grokdeclarator for
	class-local typedefs sets DECL_ARGUMENTS, so we need to clear it
	out.

	* decl2.c (finish_anon_union): Don't die if the union has no
	members.

	* decl.c (grokdeclarator): Undo changes to declspecs when we're done
	so that 'typedef int foo, bar;' will work.

	* decl2.c (finish_file): Don't call expand_aggr_init for
	non-aggregates.

Mon Jul 25 00:03:10 1994  Teemu Torma  <tot@trema.fi>

	* decl.c (finish_function): We can't inline constructors and
	destructors under some conditions with -fpic, but don't unset
	DECL_INLINE.

Mon Jul 25 00:03:10 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_object_ref): Make sure 'datum' is a valid object.

Sun Jul 24 14:19:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't set DECL_FIELD_BITPOS on
	non-fields.
	(finish_struct_methods): Use copy_assignment_arg_p.

	* cvt.c (cp_convert): If expr is an OFFSET_REF, resolve it instead
	of giving an error.

	* typeck.c (build_binary_op_nodefault): Don't set result_type if we
	don't know how to compare the operands.

	* decl.c (grokdeclarator): Avoid seg fault when someone uses '__op'
	as a declarator-id in their program.  Like the Linux headers do.
	Arrgh.

	* tree.c (lvalue_p): Treat calls to functions returning objects by
	value as lvalues again.

	* typeck.c (build_component_addr): Use convert_force to convert the
	pointer in case the component type is also a private base class.

	* search.c (get_matching_virtual): Fix bogus warning of overloaded
	virtual.

	* pt.c (overload_template_name): Set DECL_ARTIFICIAL on the created
	TYPE_DECL to fix bogus shadowing warnings.

Fri Jul 22 01:15:32 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (expand_aggr_init_1): const and volatile mismatches do not
	prevent a TARGET_EXPR from initializing an object directly.

Tue Jul 19 17:55:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_up_reference): Allow building up references to
	`this', don't warn about making references to artificial variables
	(like `this').

	* tree.c (lvalue_p): `this' is not an lvalue.

	* call.c (build_method_call): Accept using a typedef name (or
	template type parameter) for explicit destructor calls.

Thu Jul 14 09:42:23 1994  Mike Stump  <mrs@cygnus.com>

	* Version 2.6.0 released.

Wed Jul 13 03:57:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (hack_identifier): Put back old code so lists of
	non-functions will be handled properly.

	* cp-tree.h (TYPE_NEEDS_CONSTRUCTING): #if 0 out; this macro is now
	defined in the language-independent tree.h.

	* tree.c (count_functions): Avoid bogus warning when compiling this
	function.

Mon Jul 11 18:37:20 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_reference_init): Always save the initializer of a
	reference.

Fri Jul  8 17:41:46 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (cplus_expand_expr_stmt): Wrap statement expressions inside
	CLEANUP_POINT_EXPRs so that the stack slots can be reused.
	(disabled for now)

Fri Jul  8 12:59:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (hack_identifier): Fix for new overloading.

	* typeck.c (build_binary_op_nodefault): Don't mess with division by
	zero.

Fri Jul  8 13:20:28 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* decl2.c (finish_file): Only call walk_sigtables, if
	flag_handle_signatures is turned on, don't waste time otherwise.

Fri Jul  8 02:27:41 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (push_overloaded_decl): Don't create overloads of one when
	shadowing a class type.
	* typeck.c (build_x_function_call): Complain about overloads of one.

	* decl.c (grokdeclarator): Don't try to treat a char* as a tree.
	(grokdeclarator): Fix setting of TREE_STATIC.
	(start_decl): Clear DECL_IN_AGGR_P after calling duplicate_decls.

Thu Jul  7 22:20:46 1994  Gerald Baumgartner  <gb@andros.cygnus.com>

	* cp-tree.h (walk_sigtables): Created extern declaration.
	* decl2.c (walk_sigtables): Created function, patterned after
	walk_vtables, even though we only need it to write out sigtables.
	(finish_sigtable_vardecl): Created function.
	(finish_vtable_vardecl): Changed 0 to NULL_PTR.
	(finish_file): Call walk_sigtables.

	* sig.c (build_signature_table_constructor): Mark class member
	function pointed to from signature table entry as addressable.

Thu Jul  7 13:39:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_decl): Check new decl of static member variable
	against the declaration in the class here.
	(grokvardecl): Instead of here.

	* class.c (prepare_fresh_vtable): Call import_export_vtable if not
	-fvtable-thunks.
	(build_vtable): Likewise.

	* decl2.c (import_export_vtable): Move logic for deciding the
	interface of a template class from here.
	(import_export_template): To here.
	(finish_vtable_vardecl): Call import_export_template before
	import_export_vtable.

Wed Jul  6 20:25:48 1994  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Setup interim_eh_hook to
	call lang_interim_eh.
	* except.c (do_unwind): Propagate throw object value across
	stack unwinding.
	* except.c (saved_throw_value): Used to hold the value of the object
	being thrown.  It is always a reference to the real value.
	* except.c (expand_start_catch_block): Add handling for the
	value of the exception object.
	* except.c (expand_start_catch_block): Add handler for the handler,
	so that throws inside the handler go to the outer block.
	* except.c (expand_end_catch_block): Likewise.
	* parse.y (handler_args): Use parm instead, as the other doesn't yet
	handle references correctly.

Wed Jul  6 17:55:32 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl2.c (mark_vtable_entries):  If -ftable-thunks, set the
	vtable entry properly to abort.

Tue Jul  5 14:07:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Downgrade division by zero
	errors to warnings.

	* call.c (build_overload_call_real): Handle fnname being a list of
	functions.
	* typeck.c (build_x_function_call): Pass list of functions to
	build_overload_call, not just the name.
	* tree.c (count_functions): Complain when called for invalid
	argument.

	* decl.c (grokdeclarator): Fix settings of TREE_STATIC, TREE_PUBLIC
	and DECL_EXTERNAL on static members and initialized const members.
	* decl2.c (grokfield): Reflect this change.

Fri Jul  1 09:35:51 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (init): ANSI C++ does not forbid { }.

Thu Jun 30 00:35:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (lang_decode_option): Set warn_nonvdtor along with -Wall.
	warn_nonvdtor defaults to off.

	* class.c (instantiate_type): Use comptypes rather than relying on
	types to satisfy ==.

	* decl.c (start_function): Set DECL_DEFER_OUTPUT on all inlines that
	might be static.

	* tree.c (build_cplus_new): Never build WITH_CLEANUP_EXPRs.

	* decl.c (grok_reference_init): Deal with ADDR_EXPRs of TARGET_EXPRs.

	* cvt.c (cp_convert): Pass 0 to with_cleanup_p arg of
	build_cplus_new.

Wed Jun 29 22:31:09 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (finish_file): Maybe consider static inlines multiple
	times, in case they reference each other.

Tue Jun 28 11:58:38 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* class.c (finish_struct): Don't `cons_up_default_function's
	for signatures.
	(finish_struct): Handle an empty method_vec correctly.

	* decl.c (grokdeclarator): Don't warn about a signature being
	empty in a signature pointer declaration if we only saw a
	forward declaration of the signature.  Changed `warning's into
	`cp_warning's.

	* sig.c (build_sigtable): Don't die if a null signature table
	constructor is returned.
	(build_signature_pointer_constructor): If the signature table
	constructor is null, the _sptr field is set to a null pointer
	and cast to the appropriate type.  Make copies of all null
	pointers so that the type null_pointer_node doesn't get changed.
	(build_signature_table_constructor): Added comments.

	* sig.c (build_signature_pointer_constructor): Complain if we
	try to assign to/initialize a signature pointer/reference of
	an undefined signature.

Mon Jun 27 14:05:16 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* typeck2.c (store_init_value): Don't be pedantic about
	non-constant initializers of signature tables/pointers/references.

Fri Jun 24 16:49:41 1994  Gerald Baumgartner  <gb@cs.purdue.edu>

	* decl.c (grokdeclarator): If we are grokking an opaque typedef
	in a signature, don't complain about it begin static.

Wed Jun 29 16:44:45 1994  Mike Stump  <mrs@cygnus.com>

	Fixes a problem of the this pointer being wrong in virtual calls to
	methods that are not overridden in more derived classes.

	* class.c (fixup_vtable_delta): New routine.  It will fixup the
	delta entries in vtables, wheever they need updating.
	* class.c (finish_struct): Call the new routine for all virtual
	bases, as they can have different offsets, than those used in base
	classes that we derive our vtable from.

Tue Jun 28 23:49:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_binary_op): Use the types before default
	conversions in the error message.

	* *.c: Use c_build_type_variant instead of build_type_variant where
	the type might be an array.

	* call.c (build_method_call): Call build_type_variant and
	build_reference_type in the right order.
	* decl.c (record_builtin_type): Likewise.

Wed Jun 29 16:58:53 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Call build_type_variant and
	build_reference_type in the right order.
	* decl.c (record_builtin_type): Likewise.

Tue Jun 28 23:49:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_binary_op): Use the types before default
	conversions in the error message.

	* *.c: Use c_build_type_variant instead of build_type_variant where
	the type might be an array.

Sat Jun 25 11:50:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): Try UDC's before doing the
	reinterpret_cast thang, though.

Fri Jun 24 01:24:01 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (c_expand_return): Don't USE the return value location
	after we've expanded the jump.

	* decl2.c (finish_file): Make sure DECL_SAVED_INSNS is not 0 before
	trying to write out an inline.

	* cvt.c (build_up_reference): Also do address adjustment when the
	target type uses MI.
	(convert_to_reference): Try UDCs only after built-in conversions.
	(build_type_conversion_1): Don't play games with the argument to the
	method.
	(build_type_conversion): #if 0 out code for binding to reference.

Thu Jun 23 00:22:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (finish_file): Use TREE_SYMBOL_REFERENCED to decide
	whether to emit inlines.

	* decl.c (grokdeclarator): Set explicit_int for decls that just
	specify, say, 'long'.

	* init.c (do_friend): Do overload C functions (or call pushdecl,
	anyaway).

Wed Jun 22 13:40:49 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_up_reference): Don't call readonly_error.
	(convert_to_reference): Propagate const and volatile from expr to
	its type.

	* tree.c (lvalue_p): Random CALL_EXPRs are not lvalues.

	* cvt.c (build_up_reference): Break out WITH_CLEANUP_EXPR when
	creating a temporary.
	(convert_to_reference): Lose excessive and incorrect trickiness.
	(cp_convert): Call build_cplus_new with with_cleanup_p set.

	* typeck2.c (build_functional_cast): Likewise.

Tue Jun 21 17:38:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): signed, unsigned, long and short all
	imply 'int'.

	* decl.c (grokdeclarator): Allow "this is a type" syntax.
	(grok_reference_init): Simplify and fix.

Sun Jun 19 17:08:48 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): pedwarn about a typedef that specifies no
	type.

Sat Jun 18 04:16:50 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_function): Move TREE_PUBLIC and DECL_EXTERNAL
	tinkering to after call to pushdecl.

Fri Jun 17 14:48:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Handle destructors for non-aggregate
	types properly.

Thu Jun 16 16:48:05 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Make sure that the name given for the
	destructor matches the constructor_name of the instance.

	* pt.c (do_function_instantiation): A non-extern instantiation
	overrides a later extern one.
	(do_type_instantiation): Likewise.

Wed Jun 15 19:34:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (expand_aggr_init): Use TYPE_MAIN_VARIANT to get the
	unqualified array type.

	* cp-tree.h (EMPTY_CONSTRUCTOR_P): Tests whether NODE is a
	CONSTRUCTOR with no elements.

	* decl.c (various): Lose empty_init_node.
	(finish_decl): Use EMPTY_CONSTRUCTOR_P, do the empty CONSTRUCTOR
	thing depending on the value of DECL_COMMON instead of
	flag_conserve_space, do the empty CONSTRUCTOR thing for types that
	don't have constructors, don't treat a real empty CONSTRUCTOR
	specially.

	* typeck2.c (process_init_constructor): Don't treat empty_init_node
	specially.

Wed Jun 15 19:05:25 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (override_one_vtable): Don't forget to merge in an old
	overrider when we wanted to reuse a vtable, but couldn't.

Wed Jun 15 15:03:16 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_decl): Put statics in common again.

	* decl.c (grokdeclarator): Return NULL_TREE for an error rather than
	setting the type to error_mark_node.

	* typeck.c (build_modify_expr): Build up a COMPOUND_EXPR for enum
	bitfield assignments.

Tue Jun 14 12:23:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_op_properties): Const objects can be passed by value.

Mon Jun 13 03:10:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (import_export_vtable): Force implicit instantiations to
	be interface_only when -fno-implicit-templates.

	* decl.c (duplicate_decls): Redeclaring a class template name is an
	error.

	* pt.c (end_template_decl): Call GNU_xref_decl for class templates.
	* xref.c (GNU_xref_decl): Support templates.

Sat Jun 11 17:09:05 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_op_properties): Split out checking for whether this
	function should suppress the default assignment operator.
	* decl2.c (grok_function_init): Likewise.
	(copy_assignment_arg_p): New function to do just that.
	Now considers virtual assignment operators that take a base as an
	argument to count as copy assignment operators.

	* search.c (dfs_debug_mark): Lose checks for DWARF_DEBUG and
	TREE_ASM_WRITTEN, as they are redundant.

	* pt.c (end_template_decl): Don't try to set DECL_CLASS_CONTEXT on a
	decl that has no LANG_SPECIFIC part.
	(do_type_instantiation): Force the debugging information for this
	type to be emitted.

	* decl.c (start_decl): Clear up uses of various types of templates
	(say sorry for static data members, rather than "invalid template").
	(expand_static_init): Fix initialization of static data members of
	template classes.

Fri Jun 10 00:41:19 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Set DECL_CONTEXT on static data members.

	* g++.c (main): Use -xc++-cpp-output for .i files.

	* pt.c (tsubst): Give meaningful error about declaring template for
	a copy constructor which was not declared in the class template.
	(do_type_instantiation): Explicit instantiation before the class
	template is an error.
	(instantiate_template): Don't die if tsubst returns error_mark_node.

Thu Jun  9 19:04:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Don't synthesize the copy assignment operator if the one in a base
	class is pure virtual.
	* cp-tree.h (TYPE_HAS_ABSTRACT_ASSIGN_REF): New macro to indicate
	whether the type has a pure virtual copy assignment operator.
	* class.c (finish_base_struct): Don't generate the copy assignment
	operator if a base class has a pure virtual one.
	* decl.c (grok_op_properties): Add disabled code to set
	TYPE_HAS_ABSTRACT_ASSIGN_REF with comment pointing to where it is
	actually set.
	* decl2.c (grok_function_init): Set TYPE_HAS_ABSTRACT_ASSIGN_REF.

	* decl2.c (import_export_vtable): Always treat template
	instantiations as if write_virtuals >= 2, and treat implicit
	instantiations as external if -fno-implicit-templates.
	(finish_file): Output all pending inlines if
	flag_keep_inline_functions.

Wed Jun  8 20:48:02 1994  Mike Stump  <mrs@cygnus.com>

	* tree.c (layout_vbasetypes): Align virtual base classes inside
	complete objects, so that we don't core dump on machines such as
	SPARCs when we access members that require larger than normal
	alignments, such as a double.  Also, we bump up the total alignment
	on the complete type, as necessary.

Wed Jun  8 16:18:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* gxxint.texi (Free Store): New section with code for examining
	cookie.
	(Limitations of g++): Remove operator delete entry, since it is no
	longer accurate.  Fix access control entry.

	* typeck.c (build_unary_op): Pedwarn about taking the address of or
	incrementing a cast to non-reference type.
	(build_modify_expr): Use convert instead of convert_force again.

	* search.c (get_base_distance): Use IS_AGGR_TYPE_CODE to check for
	class type, not == RECORD_TYPE.

	* decl.c (grokdeclarator): Cope with grokfndecl returning NULL_TREE.

	* typeck2.c (report_case_error): #if 0 out.
	* lex.c (real_yylex): Lose RANGE.
	* parse.y: Likewise.

Tue Jun  7 18:17:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (simple_stmt, case ranges): Use ELLIPSIS instead of RANGE.

Mon Jun  6 19:39:57 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_c_cast): Don't shortcut conversions to the same
	type.  Don't replace consts with their values here, since that's now
	done in cp_convert.

	* cvt.c (cp_convert): When converting to bool, take
	integer_zero_node to false_node and all other INTEGER_CSTs to
	true_node.
	(build_type_conversion): Don't complain about multiple conversions
	to float if we're not really converting.

Fri Jun  3 02:10:56 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Implement 'extern template class A<int>;' syntax for suppressing
	specific implicit instantiations.
	* cp-tree.h: Update prototypes for do_*_instantiation.
	* pt.c (do_pending_expansions): Don't compile 'extern' explicit
	instantiations.
	(do_function_instantiation): Set DECL_EXTERNAL on 'extern' explicit
	instantiations.
	(do_type_instantiation): Likewise.
	* parse.y (explicit_instantiation): Support 'extern template class
	A<int>;' syntax.
	* decl.c (start_function): Don't modify the settings of TREE_PUBLIC
	and DECL_EXTERNAL on explicit instantiations.

	* cvt.c (cp_convert): Replace constants with their values before
	converting.
	(cp_convert): Consistently use 'e' instead of 'expr'.

Thu Jun  2 03:53:30 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (build_x_arrow): Resolve OFFSET_REFs first.

Wed Jun  1 18:57:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (digest_init): Handle initializing a pmf with an
	overloaded method.
	* typeck.c (build_ptrmemfunc): Handle overloaded methods.

	* decl.c (pushtag): Use build_decl to make TYPE_DECLs.
	(xref_defn_tag): Likewise.
	* pt.c (process_template_parm): Likewise.
	(lookup_template_class): Likewise.
	(push_template_decls): Likewise.
	(instantiate_class_template): Likewise.
	(create_nested_upt): Likewise.
	* class.c (finish_struct): Don't try to set DECL_CLASS_CONTEXT on
	TYPE_DECLs.

	* typeck.c (convert_arguments): Make sure type is not NULL before
	checking its TREE_CODE.

Wed Jun  1 17:40:39 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (get_derived_offset): New routine.
	* class.c (finish_base_struct): Make sure we set BINFO_VTABLE and
	BINFO_VIRTUALS when we choose a new base class to inherit from.
	* class.c (modify_one_vtable): Use get_derived_offset to get the
	offset to the most base class subobject that we derived this binfo
	from.
	* class.c (finish_struct): Move code to calculate the
	DECL_FIELD_BITPOS of the vfield up, as we need might need it for
	new calls to get_derived_offset in modify_one_vtable.

Wed Jun  1 16:50:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_member_call): Use build_pointer_type instead of
	TYPE_POINTER_TO.

Wed Jun  1 11:11:15 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Make sure we have a DNAME set before we
	try to use it in an error.

Wed Jun  1 09:48:49 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (convert_arguments, convert_for_initialization): Don't
	strip NOP_EXPRs, when we are converting to a reference.

Wed Jun  1 01:11:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Don't dereference references when
	initializing them.

	* decl2.c (grokfield): Don't check for grokdeclarator returning
	error_mark_node any more.

	* decl.c (grokfndecl): Return NULL_TREE instead of error_mark_node.
	(start_method): Return void_type_node instead of error_mark_node.

	* typeck.c (build_modify_expr): Resolve offset refs earlier.

Tue May 31 16:06:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Resolve OFFSET_REFs in the object.

	* typeck.c (build_modify_expr): Dereference references before trying
	to assign to them.

	* call.c (build_method_call): Don't confuse type conversion
	operators with constructors.
	* typeck2.c (build_functional_cast): Just call build_c_cast if there
	was only one parameter.
	* method.c (build_typename_overload): Don't set
	IDENTIFIER_GLOBAL_VALUE on these identifiers.
	* decl.c (grok_op_properties): Warn about defining a type conversion
	operator that converts to a base class (or reference to it).
	* cvt.c (cp_convert): Don't try to use a type conversion operator
	when converting to a base class.
	(build_type_conversion_1): Don't call constructor_name_full on an
	identifier.
	* cp-tree.h (DERIVED_FROM_P): Should be self-explanatory.

	* decl.c (start_decl): Don't complain that error_mark_node is an
	incomplete type.
	(finish_decl): Check for type == error_mark_node.

Mon May 30 23:38:55 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_function): Set DECL_DEFER_OUTPUT on implicit
	instantiations and inline members.

	* spew.c (yylex): Set looking_for_template if the next token is a '<'.

	* lex.h: Declare looking_for_template.

	* decl.c (lookup_name_real): Use looking_for_template to arbitrate
	between type and template interpretations of an identifier.

Sat May 28 04:07:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (instantiate_template): Zero out p if we found a
	specialization.

	* decl.c (grokdeclarator): Elucidate warning.
	(grokdeclarator): If pedantic AND -ansi, complain about long long.

	Make explicit instantiation work reasonably.  It is now appropriate
	to deprecate the use of -fexternal-templates.
	* pt.c (instantiate_template): Set DECL_TEMPLATE_SPECIALIZATION or
	DECL_IMPLICIT_INSTANTIATION on fndecl as appropriate.
	(end_template_instantiation): Reflect changes in USE_TEMPLATE
	semantics.
	(do_pending_expansions): if (!flag_implicit_templates) DECIDE(0);
	(do_function_instantiation): Don't set EXPLICIT_INST if
	flag_external_templates is set.  Do set TREE_PUBLIC and DECL_EXTERN
	appropriately otherwise.
	(do_type_instantiation): Set interface info for class.  Set
	TREE_PUBLIC and DECL_EXTERN for methods.  Do none of this if
	flag_external_templates is set.
	* parse.y: Reflect changes in USE_TEMPLATE semantics.
	* decl2.c: New flag flag_implicit_templates determines whether or
	not implicit instantiations get emitted.  This flag currently
	defaults to true, and must be true for -fexternal-templates to work.
	(finish_file): Consider flag_implement_inlines when
	setting DECL_EXTERNAL.  Consider flag_implicit_templates when
	deciding whether or not to emit a static copy.
	* decl.c (start_function): Set TREE_PUBLIC and DECL_EXTERNAL
	properly for template instantiations.
	(start_method): Set DECL_IMPLICIT_INSTANTIATION on methods of a
	template class.
	* cp-tree.h (CLASSTYPE_USE_TEMPLATE): Change semantics.
	(DECL_USE_TEMPLATE): Parallel macro for FUNCTION and VAR_DECLs.
	(various others): Accessor macros for the above.

Fri May 27 13:57:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Division by constant zero is
	an error.

Fri May 27 13:50:15 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (override_one_vtable): Don't modify things we don't own.

Fri May 27 01:42:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (finish_decl): Don't postpone processing the initializer of
	a decl with DECL_EXTERNAL set, and do call rest_of_compilation for a
	PUBLIC const at toplevel.
	(grokdeclarator): pedwarn about initializing non-const or
	non-integral statics in the class body.

	* decl.c (pushtag): Don't try to set DECL_CLASS_CONTEXT on a
	TYPE_DECL.

	* call.c (convert_harshness): Dereference reference on rhs before
	proceeding, properly grok passing const things to non-const
	references.

	* typeck.c (build_unary_op): Soften error about taking the address
	of main() to a pedwarn.

	* lex.c (default_copy_constructor_body): Unambiguously specify base
	classes (i.e. A((const class ::A&)_ctor_arg) ).
	(default_assign_ref_body): Likewise.

Thu May 26 13:13:55 1994  Gerald Baumgartner  <gb@mexican.cygnus.com>

	* decl2.c (grokfield): Don't complain about local signature
	method declaration without definition.

	* call.c (convert_harshness): If `type' is a signature pointer
	and `parmtype' is a pointer to a signature, just return 0.  We
	don't really convert in this case; it's a result of making the
	`this' parameter of a signature method a signature pointer.

	* call.c (build_method_call): Distinguish calling the default copy
	constructor of a signature pointer/reference from a signature
	member function call.

Thu May 26 12:56:25 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (grokfield): Don't set TREE_PUBLIC on member function
	declarations.

	* decl.c (duplicate_decls): A previous function declaration as
	static overrides a subsequent non-static definition.
	(grokdeclarator): Don't set TREE_PUBLIC on inline method
	declarations.

Wed May 25 14:36:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Handle initialization of static const
	members.
	(finish_decl): Likewise.

	* decl2.c (grokfield): Allow initialization of static const members
	even when pedantic.

	* decl2.c (grokfield): Deal with grokdeclarator returning
	error_mark_node.

	* decl.c (grok_ctor_properties): Return 0 for A(A) constructor.
	(grokfndecl): Check the return value of grok_ctor_properties.
	(start_method): Likewise.

	* parse.y (absdcl): Expand type_quals inline.

Tue May 24 19:10:32 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (pushtag): Use IS_AGGR_TYPE rather than checking for a
	RECORD_TYPE.

Tue May 24 18:09:16 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* cp-tree.h (VTABLE_NAME_FORMAT):  If flag_vtable_thunks,
	always use "__vt_%s".
	* decl2.c (finish_vtable_vardecl):  Don't consider abstract virtuals
	when looking for a "sentinal" method (to decide on emitting vtables).
	* decl2.c (finish_file):  Scan all decls for thunks that need
	to be emitted.
	* decl2.c (finish_vtable_vardecl):  Don't bother calling emit_thunk.
	* method.c (make_thunk):  Use a more meaningful label.  If there
	exists a matching top-level THUNK_DECL re-use it;  otherwise
	create a new THUNK_DECL (and declare it).
	* method.c (emit_thunk):  Make thunk external/public depending
	on the underlying method.

Tue May 24 00:22:04 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (tsubst): Use lookup_name_nonclass to find guiding decls, not
	lookup_name.

	* call.c (build_overload_call_real): Don't immediately pick a
	function which matches perfectly.

	* decl.c (grokdeclarator): Use c_build_type_variant for arrays.
	(grokdeclarator): Warn about, and throw away, cv-quals attached to a
	reference (like 'int &const j').

	* typeck.c (convert_arguments): Don't mess with i for methods.
	* call.c (build_method_call): Pass the function decl to
	convert_arguments.

	* typeck.c (comp_ptr_ttypes_real): New function.  Implements the
	checking for which multi-level pointer conversions are allowed.
	(comp_target_types): Call it.
	(convert_for_assignment): Check const parity on the ultimate target
	type, too.  And make those warnings pedwarns.

Mon May 23 14:11:24 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_char): Use TARGET_* for character constants.

Mon May 23 13:03:03 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* tree.c (debug_no_list_hash): Make static.

	* decl.c (decls_match): Say the types don't match if newdecl ends up
	with a null type, after we've checked if olddecl does.
	(pushdecl): Check if the decls themselves match before looking for
	an extern redeclared as static, to avoid inappropriate and incorrect
	warnings.

Fri May 20 14:04:34 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Make warning about duplicate short, etc.
	a pedwarn.

	* typeck.c (build_c_cast): Casting to function or method type is an
	error.

	* class.c (finish_struct): Make warning for anonymous class with no
	instances a pedwarn.

	* Makefile.in (stamp-parse): Expect a s/r conflict.

	* typeck.c (build_modify_expr): pedwarn about using a non-lvalue
	cast as an lvalue.

Thu May 19 12:08:48 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (type_promotes_to): Make sure bool promotes to int rather
	than unsigned on platforms where sizeof(char)==sizeof(int).

Wed May 18 14:27:06 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_c_cast): Tack on a NOP_EXPR when casting to
	another variant.
	(build_modify_expr): Don't strip NOP_EXPRs, and don't get tricky
	and treat them as lvalues.

	* decl.c (shadow_tag): Do complain about forward declarations of
	enums and empty declarations.
	* parse.y: Don't complain about forward declarations of enums and
	empty declarations.

	* typeck.c (convert_for_assignment): Complain about changing
	the signedness of a pointer's target type.

	* parse.y (stmt): Move duplicated code for checking case values from
	here.
	* decl2.c (check_cp_case_value): To here.  And add a call to
	constant_expression_warning.

	* typeck.c (convert_for_assignment): Don't complain about assigning
	a negative value to bool.

	* decl.c (init_decl_processing): Make bool unsigned.

	* class.c (finish_struct): Allow bool bitfields.

Wed May 18 12:35:27 1994  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>

	* Make-lang.in (c++.install-man): Get g++.1 from $(srcdir)/cp.

Wed May 18 03:28:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_type_conversion): Lose special handling of
	truthvalues.

	* search.c (dfs_pushdecls): Improve shadowing warning.

Tue May 17 13:34:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_delete): Throw away const and volatile on `this'.

	* decl.c (finish_enum): Put the constants in TYPE_VALUES again,
	rather than the enumerators.
	(pushtag): s/cdecl/c_decl/g

Mon May 16 23:04:01 1994  Stephen R. van den Berg  <berg@pool.informatik.rwth-aachen.de>

	* cp/typeck.c (common_type): Attribute merging.
	(comp_types): Utilize COMP_TYPE_ATTRIBUTES macro.

	* cp/parse.y: Revamp attribute parsing.

Mon May 16 01:40:34 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (shadow_tag): Also check for inappropriate use of auto and
	register.

	* method.c (build_overload_name): Clarify that the illegal case is a
	pointer or reference to array of unknown bound.

	* error.c (dump_type_prefix): Print references to arrays properly.

	* typeck.c (various): Be more helpful in pointer
	comparison diagnostics.

	* tree.c (lvalue_p): MODIFY_EXPRs are lvalues again.  Isn't this
	fun?

	* parse.y: Also catch an error after valid stmts.

	* search.c (dfs_init_vbase_pointers): Don't abort because `this' is
	const.

	* typeck.c (convert_for_initialization): If call to
	convert_to_reference generated a diagnostic, print out the parm
	number and function decl if any.

	* errfn.c (cp_thing): Check atarg1 to determine whether or not we're
	specifying a line, not atarg.

	* tree.c (build_cplus_method_type): Always make `this' const.

	* decl2.c (grokclassfn): If -fthis-is-variable and this function is
	a constructor or destructor, make `this' non-const.

	* typeck.c (build_modify_expr): Don't warn specially about
	assignment to `this' here anymore, since it will be caught by the
	usual machinery.

	* various: Disallow specific GNU extensions (variable-size arrays,
	etc.) when flag_ansi is set, not necessarily when pedantic is set,
	so that people can compile with -pedantic-errors for tighter const
	checking and such without losing desirable extensions.

	* typeck2.c (build_functional_cast): Call build_method_call with
	LOOKUP_PROTECT.
	(process_init_constructor): Only process FIELD_DECLs.

	* decl.c (finish_decl): Also force static consts with no explicit
	initializer that need constructing into the data segment.

	* init.c (build_delete): Undo last patch, as it interferes with
	automatic cleanups.

Sat May 14 01:59:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c, class.h, cp-tree.h, cvt.c, decl2.c: Lose old overloading
	code.

	* init.c (build_delete): pedwarn about using plain delete to delete
	an array.

Fri May 13 16:45:07 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (comp_target_types): Be more helpful in contravariance
	warnings, and make them pedwarns.

	* decl.c (grokdeclarator): Use decl_context to decide whether or not
	this is an access declaration.

	* class.c (finish_struct_bits): Set TYPE_HAS_INT_CONVERSION if it
	has a conversion to enum or bool, too.

Fri May 13 16:31:27 1994  Mike Stump  <mrs@cygnus.com>

	* method.c (emit_thunk):  Make declaration for
	current_call_is_indirect local (needed for hppa).

Fri May 13 16:16:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (uses_template_parms): Grok BOOLEAN_TYPE.
	(tsubst): Likewise.

Fri May 13 16:23:32 1994  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): If there is already a function for this expansion,
	use it.
	* pt.c (instantiate_template): Likewise.

Fri May 13 10:30:42 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (implicitly_scoped_stmt, simple_stmt case): Use
	kept_level_p for MARK_ENDS argument to expand_end_bindings, to avoid
	generating debug info for unemitted symbols on some systems.

	* cp-tree.h (build_static_cast, build_reinterpret_cast,
	build_const_cast): Add declarations.

Fri May 13 09:50:31 1994  Mike Stump  <mrs@cygnus.com>

	* search.c (expand_indirect_vtbls_init): Fix breakage from Apr 27
	fix.  We now try get_binfo, and if that doesn't find what we want,
	we go back to the old method, which still sometimes fails.

Fri May 13 01:43:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (initdcl): Call cplus_decl_attributes on the right
	variable.
	* decl2.c (cplus_decl_attributes): Don't call decl_attributes for
	void_type_node.

	* typeck.c (build_binary_op_nodefault): Change result_type for
	comparison ops to bool.
	(build_binary_op): Convert args of && and || to bool.
	* cvt.c (build_default_binary_type_conversion): Convert args of &&
	and || to bool.
	(build_default_unary_type_conversion): Convert arg of ! to bool.
	(type_promotes_to): bool promotes to int.

Fri May 13 01:43:18 1994  Mike Stump  <mrs@cygnus.com>

	Implement the new builtin `bool' type.
	* typeck.c (build_binary_op_nodefault): Convert args of && and || to
	bool.
	(build_unary_op): Convert arg of ! to bool.
	* parse.y: Know true and false.  Use bool_truthvalue_conversion.
	* method.c (build_overload_value): Know bool.
	(build_overload_name): Likewise.
	* lex.c (init_lex): Set up RID_BOOL.
	* gxx.gperf: Add bool, true, false.
	* error.c (*): Know bool.
	* decl.c (init_decl_processing): Set up bool, true, false.
	* cvt.c (cp_convert): Handle conversion to bool.
	(build_type_conversion): Likewise.
	* *.c: Accept bool where integers and enums are accepted (use
	INTEGRAL_CODE_P macro).

Thu May 12 19:13:54 1994  Richard Earnshaw  <rwe11@cl.cam.ac.uk>

	* g++.c: Use #ifdef for __MSDOS__, not #if.

Thu May 12 18:05:18 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (lang_f_options): Handle -fshort-temps.  -fshort-temps
	gives old behavior , and destroys temporaries earlier.  Default
	behavior now conforms to the ANSI working paper.

Thu May 12 14:45:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Understand MODIFY_EXPR as an lvalue.
	Use convert_force to convert the result of a recursive call when we
	are dealing with a NOP_EXPR.  Don't automatically wrap MODIFY_EXPRs
	in COMPOUND_EXPRs any more.
	(various): Lose pedantic_lvalue_warning.
	(unary_complex_lvalue): Understand MODIFY_EXPR.

	* cvt.c (convert_to_reference): Allow DECL to be error_mark_node if
	we don't know what we're initializing.

Wed May 11 01:59:36 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): Modify to use convtype parameter.
	Only create temporaries when initializing a reference, not when
	casting.
	(cp_convert): New main function.
	(convert): Call cp_convert.
	* cvt.c, decl.c, typeck.c: Fix calls to convert_to_reference.
	* cp-tree.h (CONV_*): New constants used by conversion code for
	selecting conversions to perform.

	* tree.c (lvalue_p): MODIFY_EXPRs are no longer lvalues.

	* typeck.c (build_{static,reinterpret,const_cast): Stubs that just
	call build_c_cast.
	* parse.y: Add {static,reinterpret,const}_cast.
	* gxx.gperf: Likewise.

	* typeck.c (common_type): Allow methods with basetypes of different
	UPTs.
	(comptypes): Deal with UPTs.
	(build_modify_expr): Wrap all MODIFY_EXPRs in a COMPOUND_EXPR.

	* pt.c (end_template_decl): Check for multiple definitions of member
	templates.

	* call.c (build_method_call): Complain about calling an abstract
	virtual from a constructor.

	* typeck.c (pointer_int_sum): Check for the integer operand being 0
	after checking the validity of the pointer operand.

	* typeck2.c (digest_init): Pedwarn about string initializer being
	too long.

Tue May 10 12:10:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (push_overloaded_decl): Only throw away a builtin if the
	decl in question is the artificial one.

	* parse.y (simple_stmt, switch): Use implicitly_scoped_stmt because
	expand_{start,end}_case cannot happen in the middle of a block.

	* cvt.c (build_type_conversion_1): Use convert again.

Tue May 10 11:52:04 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck2.c (digest_init): Make sure we check for signed and
	unsigned chars as well when warning about string initializers.

	* init.c (emit_base_init): Check if there's a DECL_NAME on the
	member before trying to do an initialization for it.

Tue May 10 11:34:37 1994  Mike Stump  <mrs@cygnus.com>

	* except.c: Don't do anything useful when cross compiling.

Tue May 10 03:04:13 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): Fix up handling of builtins yet again.
	(push_overloaded_decl): Likewise.

	* cvt.c (convert): Don't look for void type conversion.

Mon May  9 18:05:41 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (do_friend): Only do a pushdecl for friends, not
	pushdecl_top_level.

Mon May  9 13:36:34 1994  Jim Wilson  <wilson@sphagnum.cygnus.com>

	* decl.c (lookup_name_current_level): Put empty statement after
	the label OUT to make the code valid C.

Mon May  9 12:20:57 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Only complain about
	comparing void * and a function pointer if void * is smaller.

Sun May  8 01:29:13 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (lookup_name_current_level): Move through temporary binding
	levels.

	* parse.y (already_scoped_stmt): Revive.
	(simple_stmt): Use it again.

	* decl.c (poplevel): Always call poplevel recursively if we're
	dealing with a temporary binding level.

Sat May  7 10:52:28 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (finish_decl): Make sure we run cleanups for initial values
	of decls.  Cures memory leak.
	* decl.c (expand_static_init): Likewise for static variables.
	* decl2.c (finish_file): Likewise for globals.

Sat May  7 03:57:44 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (commonparms): Don't complain about redefining default
	args.

	* decl.c (duplicate_decls): Don't complain twice about conflicting
	function decls.
	(decls_match): Don't look at default args.
	(redeclaration_error_message): Complain about redefining default
	args.

	* call.c (build_overload_call_real): Also deal with guiding
	declarations coming BEFORE the template decl.

	* pt.c (unify): Allow different parms to have different
	cv-qualifiers.
	(unify): Allow trivial conversions on non-template parms.

Fri May  6 03:53:23 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (tsubst): Support OFFSET_TYPEs.
	(unify): Likewise.

	* decl2.c (finish_decl_parsing): Call push_nested_class with a type.

	* init.c (build_offset_ref): Fix error message.
	* search.c (lookup_field): Likewise.

	* call.c (build_scoped_method_call): Pass binfo to
	build_method_call.
	* typeck.c (build_object_ref): Likewise.

	* typeck2.c (binfo_or_else): Don't return a _TYPE.

	* class.c (finish_struct): Don't complain about re-use of inherited
	names or shadowing of type decls.
	* decl.c (pushdecl_class_level): Likewise.

	* decl.c (finish_enum): Set the type of all the enums.

	* class.c (finish_struct): Don't get confused by access decls.

	* cp-tree.h (TYPE_MAIN_DECL): New macro to get the _DECL for a
	_TYPE.  You can stop using TYPE_NAME for that now.

	* parse.y: Lose doing_explicit (check $0 instead).
	* gxx.gperf: 'template' now has a RID.
	* lex.h (rid): Likewise.
	* lex.c (init_lex): Set up the RID for 'template'.

	* parse.y (type_specifier_seq): typed_typespecs or
	nonempty_type_quals.  Use it.
	(handler_args): Fix bogus syntax.
	(raise_identifier{,s}, optional_identifier): Lose.
	* except.c (expand_start_catch_block): Use grokdeclarator to parse
	the catch variable.
	(init_exception_processing): The second argument to
	__throw_type_match is ptr_type_node.

	Fri May  6 07:18:54 1994  Chip Salzenberg  <chip@fin.uucp>

	[ change propagated from c-decl.c of snapshot 940429 ]
	* cp/decl.c (finish_decl): Setting asmspec_tree should not
	zero out the old RTL.

Fri May  6 01:25:38 1994  Mike Stump  <mrs@cygnus.com>

	Add alpha exception handling support to the compiler.
	Quick and dirty backend in except.c.

	* cp/*:  Remove most remnants of old exception handling support.
	* decl.c (finish_function): Call expand_exception_blocks to put
	the exception hanlding blocks at the end of the function.
	* dec.c (hack_incomplete_structures): Make sure expand_decl_cleanup
	comes after expand_decl_init.
	* except.c: Reimplementation.
	* expr.c (cplus_expand_expr): Handle THROW_EXPRs.
	* lex.c (init_lex): Always have catch, try and throw be reserved
	words, so that we may always parse exception handling.
	* parse.y: Cleanup to support new interface into exception handling.
	* tree.def (THROW_EXPR): Add.

Thu May  5 17:35:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (simple_stmt, for loops): Use implicitly_scoped_stmt.
	(various): Lose .kindof_pushlevel and partially_scoped_stmt.

Thu May  5 16:17:27 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* parse.y (already_scoped_stmt): Move expand_end_binding() to
	fix the unmatched LBB/LBE in stabs.

Thu May  5 14:36:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (set_nested_typename): Set TREE_MANGLED on the new
	identifiers.
	(pushdecl): Check TREE_MANGLED.
	(xref_tag): Likewise.
	* cp-tree.h (TREE_MANGLED): This identifier is a
	DECL_NESTED_TYPENAME (named to allow for future use to denote
	mangled function names as well).

	Implement inconsistency checking specified in [class.scope0].
	* decl.c (lookup_name_real): Don't set ICV here after all.
	(finish_enum): Also set the type of the enumerators themselves.
	(build_enumerator): Put the CONST_DECL in the list instead of its
	initial value.
	(pushdecl_class_level): Check inconsistent use of a name in the
	class body.
	* class.c (finish_struct): Check inconsistent use of a name in the
	class body.  Don't set DECL_CONTEXT on types here anymore.
	* parse.y (qualified_type_name): Note that the identifier has now
	been used (as a type) in the class body.
	* lex.c (do_identifier): Note that the identifier has now been used
	(as a constant) in the class body.
	* error.c (dump_decl): Print type and enum decls better.

Thu May  5 09:35:35 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (build_modify_expr): Warn about assignment to `this'.

Wed May  4 15:55:49 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_delete): Use the global operator delete when
	requested.

	* decl.c (lookup_name_real): If we find the type we're looking in a
	base class while defining a class, set IDENTIFIER_CLASS_VALUE for
	the type.

	* class.c (finish_struct): Remove a couple of dependencies on
	language linkage.

	* decl.c (pushtag): Classes do nest in extern "C" blocks.
	(pushdecl): Only set DECL_NESTED_TYPENAME on the canonical one for
	the type.
	(pushtag): Remove another dependency on the language linkage.

	* lex.c (cons_up_default_function): Don't set DECL_CLASS_CONTEXT to
	a const-qualified type.

	* decl.c (push_overloaded_decl): Throw away built-in decls here.
	(duplicate_decls): Instead of here.

Wed May  4 15:27:40 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc):  Do The Right
	Thing (I hope) if we're using thunks.

Wed May  4 13:52:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (specialization): aggr template_type_name ';'.
	(named_class_head_sans_basetype): Use it.
	(explicit_instantiation): Likewise.
	(tmpl.2): Revert.

	* cvt.c (build_type_conversion_1): Use convert_for_initialization,
	rather than convert, to do conversions after the UDC.

	* cp-tree.h (SHARED_MEMBER_P): This member is shared between all
	instances of the class.

	* search.c (lookup_field): If the entity found by two routes is the
	same, it's not ambiguous.

Wed May  4 12:10:00 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (lookup_name_real):  Check for a NULL TREE_VALUE,
	to prevent the compiler from crashing ...

Wed May  4 11:19:45 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): If we don't have an object, check
	basetype_path to figure out where to look up the function.

	* typeck.c (convert_for_initialization): Pass TYPE_BINFO (type) to
	build_method_call in case exp is NULL_TREE.

Tue May  3 16:02:53 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	Give a vtable entries a unique named type, for the sake of gdb.
	* class.c (build_vtable_entry):  The address of a thunk now has
	type vtable_entry_type, not ptr_type_node.
	* method.c (make_thunk):  Fix type of THUNK_DECL.
	* class.c (add_virtual_function, override_one_vtable):  Use
	vfunc_ptr_type_node, instead of ptr_type_node.
	* cp-tree.h (vfunc_ptr_type_node):  New macro.
	* decl.c (init_decl_processing):  Make vtable_entry_type
	be a unique type of pointer to a unique function type.

Tue May  3 09:20:44 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (do_explicit): Sets doing_explicit to 1.
	(explicit_instantiation): Use do_explicit rather than TEMPLATE
	directly, add "do_explicit error" rule.
	(datadef): Set doing_explicit to 0 after an explicit instantiation.
	(tmpl.2): Don't instantiate if we see a ';' unless we're doing an
	explicit instantiation.
	(named_class_head_sans_basetype): Remove aggr template_type_name
	';' again.

Mon May  2 23:17:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (lookup_nested_tag): Lose.

	* decl2.c (grokfield): Set DECL_CONTEXT on TYPE_DECLs.
	(lookup_name_nonclass): Lose.

	* decl.c (poplevel_class): Add force parameter.
	(lookup_name_real): Fix handling of explicit scoping which specifies
	a class currently being defined.  Add 'nonclass' argument.
	(lookup_name, lookup_name_nonclass): Shells for lookup_name_real.

	* class.c (finish_struct): Don't unset IDENTIFIER_CLASS_VALUEs here.
	(popclass): Force clearing of IDENTIFIER_CLASS_VALUEs if we're being
	called from finish_struct.

Mon May  2 19:06:21 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (init_decl_processing), cp-tree.h:  Removed memptr_type.
	(It seeems redundant, given build_ptrmemfunc_type.)
	* typeck.c (get_member_function_from_ptrfunc), gc.c (build_headof,
	build_classof):  Use vtable_entry_type instead of memptr_type.
	* method.c (emit_thunk):  Call poplevel with functionbody==0
	to prevent DECL_INITIAL being set to a BLOCK.

Mon May  2 15:02:11 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (named_class_head_sans_basetype): Add "aggr
	template_type_name ';'" rule for forward declaration of
	specializations.

Mon May  2 15:02:11 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (instantiate_type): Deal with pmf's.

	* Make-lang.in (cc1plus): Don't depend on OBJS or BC_OBJS, since
	stamp-objlist does.

	* Makefile.in (../cc1plus): Depend on OBJDEPS.
	(OBJDEPS): Dependency version of OBJS.

Mon May  2 12:51:31 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* search.c (dfs_debug_mark): Unmark TYPE_DECL_SUPPRESS_DEBUG, not
	DECL_IGNORED_P.

Fri Apr 29 12:29:56 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Clear out memory of local tags.  And
	typedefs.

	* decl2.c (grokclassfn): Don't set DECL_CONTEXT to a cv-qualified
	type.
	* search.c (get_matching_virtual): Be more helpful in error message.

	* *: Use DECL_ARTIFICIAL (renamed from DECL_SYNTHESIZED).

	* lex.c (default_assign_ref_body): Expect TYPE_NESTED_NAME to work.
	(default_copy_constructor_body): Likewise.

	* class.c (finish_struct): Don't gratuitously create multiple decls
	for nested classes.

Thu Apr 28 23:39:38 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Avoid clobbering the arg types of other functions when reverting
	static member functions.
	* decl.c (revert_static_member_fn): Rearrange arguments, don't
	require values for 'fn' and 'argtypes', add warning to comment
	above.
	(decls_match): Rearrange arguments in call to rsmf.
	(grok_op_properties): Don't pass values for fn and argtypes.
	* pt.c (instantiate_template): Don't pass values for fn and argtypes.

Thu Apr 28 16:29:11 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (cc1plus): Depend on stamp-objlist.
	* Makefile.in (BC_OBJS): Delete.
	(OBJS): Cat ../stamp-objlist to get language independent files.
	Include ../c-common.o.
	(../cc1plus): Delete reference to BC_OBJS.

Thu Apr 28 02:12:08 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (compute_access): No really, deal with static members
	properly.  Would I lie to you?

	Implement lexical hiding of function declarations.
	* pt.c (tsubst): Use lookup_name to look for function decls to guide
	instantiation.
	* method.c (build_opfncall): Use lookup_name_nonclass to look for
	non-member functions.
	* init.c (do_friend): Use lookup_name_nonclass to look for
	functions.
	* error.c (ident_fndecl): Use lookup_name to look for functions.
	* decl2.c (lookup_name_nonclass): New function, skips over
	CLASS_VALUE.
	* decl.c (struct binding_level): Lose overloads_shadowed field.
	(poplevel): Don't deal with overloads_shadowed.
	(push_overloaded_decl): Do lexical hiding for functions.
	* class.c (instantiate_type): Don't check non-members if we have
	members with the same name.
	* call.c (build_method_call): Use lookup_name_nonclass instead of
	IDENTIFIER_GLOBAL_VALUE to check for non-member functions.
	(build_overload_call_real): Likewise.

	* decl.c (duplicate_decls): Check for ambiguous overloads here.
	(push_overloaded_decl): Instead of here.

	* decl.c (pushdecl): Back out Chip's last change.

	* decl.c (grok_op_properties): Operators cannot be static members.

	* cp-tree.h (DECL_SYNTHESIZED): DECL_SOURCE_LINE == 0
	(SET_DECL_SYNTHESIZED): DECL_SOURCE_LINE = 0
	* lex.c (cons_up_default_function): Use SET_DECL_SYNTHESIZED.

	* method.c (do_inline_function_hair): Don't put friends of local
	classes into global scope, either.

	* typeck2.c (build_functional_cast): Don't look for a function call
	interpretation.

Thu Apr 28 15:19:46 1994  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h: Disable use of backend EH.

Wed Apr 27 21:01:24 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (c++.distdir): mkdir tmp/cp first.
	* Makefile.in (INCLUDES): Move definition to same place as
	parent makefile.
	(ALLOCA): Define.
	(OLDAR_FLAGS): Delete.
	(OLDCC): Define.
	(DIR): Delete.
	(CLIB): Define.
	(####site): Delete.
	(SUBDIR_USE_ALLOCA): Don't use ALLOCA if compiling with gcc.

Wed Apr 27 19:10:04 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl.c (xref_tag): Not to use strstr(), it's not available on
	all platforms.

Wed Apr 27 18:10:12 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Resolve yet another class/pmf confusion.

	* call.c (build_overload_call_real): Don't take the single-function
	shortcut if we're dealing with an overloaded operator.

Wed Apr 27 17:35:37 1994  Mike Stump  <mrs@cygnus.com>

	* search.c (get_base_distance): Search the virtual base class
	binfos, incase someone wants to convert to a real virtual base
	class.
	* search.c (expand_indirect_vtbls_init): Use convert_pointer_to_real
	instead of convert_pointer_to, as it now will work.

Wed Apr 27 15:36:49 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): Don't complain about casting away
	const and volatile.

	* typeck.c (build_unary_op): References are too lvalues.

Wed Apr 27 13:58:05 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (override_one_vtable): We have to prepare_fresh_vtable
	before we modify it, not after, also, we cannot reuse an old vtable,
	once we commit to a new vtable.  Implement ambiguous overrides in
	virtual bases as abstract.  Hack until we make the class
	ill-formed.

Wed Apr 27 01:17:08 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (unary_expr): Expand new_placement[opt] and
	new_initializer[opt] inline.

	* search.c (lookup_fnfields): Don't throw away the inheritance
	information here, either.
	(compute_access): Handle static members properly.

	* init.c (build_member_call): Always set basetype_path, and pass it
	to lookup_fnfields.

	* search.c (lookup_field): Deal properly with the case where
	xbasetype is a chain of binfos; don't throw away the inheritance
	information.
	(compute_access): protected_ok always starts out at 0.

	* init.c (resolve_offset_ref): Don't cast `this' to the base type
	until we've got our basetype_path.

	* cp-tree.h (IS_OVERLOAD_TYPE): aggregate or enum.

	* cvt.c (build_up_reference): Use build_pointer_type rather than
	TYPE_POINTER_TO.

	* call.c (convert_harshness_ansi): Call type_promotes_to for reals
	as well.

	* cvt.c (type_promotes_to): Retain const and volatile, add
	float->double promotion.

	* decl.c (grokdeclarator): Don't bash references to arrays into
	references to pointers in function parms.  Use type_promotes_to.

Tue Apr 26 23:44:36 1994  Mike Stump  <mrs@cygnus.com>

	Finish off Apr 19th work.

	* class.c (finish_struct_bits): Rename has_abstract_virtuals to
	might_have_abstract_virtuals.
	* class.c (strictly_overrides, override_one_vtable,
	merge_overrides): New routines to handle virtual base overrides.
	* class.c (finish_struct): Call merge_overrides to handle overrides
	in virtual bases.

Tue Apr 26 12:45:53 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_function_call): Call build_function_call_real with
	LOOKUP_NORMAL.

	* *: Don't deal with TYPE_EXPRs.

	* tree.c (lvalue_p): If the type of the expression is a reference,
	it's an lvalue.

	* cvt.c (convert_to_reference): Complain about passing const
	lvalues to non-const references.
	(convert_from_reference): Don't arbitrarily throw away const and
	volatile on the target type.

	* parse.y: Simplify and fix rules for `new'.

	* decl.c (grok_op_properties): operator void is illegal.

Mon Apr 25 02:36:28 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (components): Anonymous bitfields can still have declspecs.

	* decl.c (pushdecl): Postpone handling of function templates like we
	do C functions.

	* search.c (expand_indirect_vtbls_init): Fix infinite loop when
	convert_pointer_to fails.

	* call.c (compute_conversion_costs_ansi): A user-defined conversion
	by itself is better than that UDC followed by standard conversions.
	Don't treat integers and reals specially.

	* cp-tree.h: Declare flag_ansi.

	* typeck.c (c_expand_return): pedwarn on return in void function
	even if the expression is of type void.
	(build_c_cast): Don't do as much checking for casts to void.
	(build_modify_expr): pedwarn about array assignment if this code
	wasn't generated by the compiler.

	* tree.c (lvalue_p): A comma expression is an lvalue if its second
	operand is.

	* typeck.c (default_conversion): Move code for promoting enums and
	ints from here.
	* cvt.c (type_promotes_to): To here.
	* call.c (convert_harshness_ansi): Use type_promotes_to.  Also fix
	promotion semantics for reals.

Sun Apr 24 16:52:51 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (c++.install-common): Check for g++-cross.
	* Makefile.in: Remove Cygnus cruft.
	(config.status): Delete.
	(RTL_H): Define.
	(TREE_H): Use complete pathname, some native makes have minimal
	VPATH support.
	(*.o): Use complete pathname to headers in parent dir.
	(doc, info, dvi): Delete.

Sun Apr 24 16:52:51 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (c++.install-common): Check for g++-cross.
	* Makefile.in: Remove Cygnus cruft.
	(config.status): Delete.
	(RTL_H): Define.
	(TREE_H): Use complete pathname, some native makes have minimal
	VPATH support.
	(*.o): Use complete pathname to headers in parent dir.
	(doc, info, dvi): Delete.

Sun Apr 24 00:47:49 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (pushdecl): Avoid redundant warning on redeclaring function
	with different return type.
	(decls_match): Compare return types strictly.

Fri Apr 22 12:55:42 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (build_type_conversion): Do try to convert through other
	pointers.  This will fail if the class defines multiple pointer
	conversions.

	* error.c (dump_type_prefix): Print out pointers to arrays properly.
	(dump_type_suffix): Likewise.  (was 'int *[]', now 'int (*)[]')

	* typeck.c (build_unary_op): Disallow ++/-- on pointers to
	incomplete type.

	* decl.c (duplicate_decls): Check mismatched TREE_CODES after
	checking for shadowing a builtin.  If we're redeclaring a builtin
	function, bash the old decl to avoid an ambiguous overload.

	* cvt.c (convert_to_reference): Don't force arrays to decay here.

	* tree.c (lvalue_p): A MODIFY_EXPR is an lvalue.

	* decl.c (duplicate_decls): Don't assume that the decls will have
	types.

	Mon Apr 18 11:35:32 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940318 snapshot ]
	* c-decl.c (pushdecl): Warn if type mismatch with another external decl
	in a global scope.

	Fri Apr 22 06:38:56 1994  Chip Salzenberg  <chip@fin.uucp>

	* cp/typeck2.c (signature_error): Use cp_error for "%T".

	Mon Apr 18 11:59:59 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940415 snapshot ]
	* cp/decl.c (duplicate_decls, pushdecl, builtin_function):
	Use DECL_FUNCTION_CODE instead of DECL_SET_FUNCTION_CODE.

	Mon Apr 18 11:55:18 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940409 snapshot ]
	* cp/decl.c (duplicate_decls): Put new type in same obstack as
	old ones, or permanent if old ones in different obstacks.

	Mon Apr 18 11:48:49 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940401 snapshot ]
	* cp/parse.y (attrib): Handle string args as expressions,
	merging the two rules.  `mode' attribute now takes a string arg.
	Delete the rule for an identifier as arg.

	Mon Apr 18 11:24:00 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940312 snapshot ]
	* cp/typeck.c (pointer_int_sum): Multiplication should be done signed.
	(pointer_diff): Likewise the division.

	Sun Mar  6 19:43:39 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940304 snapshot ]
	* cp/decl.c (finish_decl): Issue warning for large objects,
	if requested.

	Sat Feb 19 22:20:32 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940218 snapshot ]
	* cp/parse.y (attrib): Handle attribute ((section ("string"))).
	* cp/decl.c (duplicate_decls): Merge section name into new decl.

	Tue Feb  8 09:49:17 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp/* changes propagated from c-* changes in 940206 snapshot ]
	* cp/typeck.c (signed_or_unsigned_type): Check for any
	INTEGRAL_TYPE_P not just INTEGER_TYPE.

	Mon Dec  6 13:35:31 1993  Norbert Kiesel  <norbert@i3.INformatik.rwth-aachen.DE>

	* cp/decl.c (finish_enum): Start from 0 when determining precision
	for short enums.

	Fri Dec  3 17:07:58 1993  Ralph Campbell  <ralphc@pyramid.COM>

	* cp/parse.y (unary_expr): Look at $1 for tree_code rather than
	casting $$.

	Wed Nov 17 19:22:09 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp/typeck.c (build_binary_op_nodefault): Propagate code
	from C front-end to optimize unsigned short division.
	(build_conditional_expr): Fix bug in "1 ? 42 : (void *) 8".

	Wed Nov 17 19:17:18 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp/call.c (convert_harshness_ansi): Given an (e.g.) char
	constant, prefer 'const char &' to 'int'.

	Wed Feb  3 13:11:48 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp/class.c (finish_struct_methods):  Handle multiple
	constructors in fn_fields list.

Fri Apr 22 12:48:10 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* class.c (finish_struct): Use TYPE_DECL_SUPPRESS_DEBUG to flag
	types not to be dumped in stabs, like types in #pragma interface.
	* decl.c (init_decl_processing): Use TYPE_DECL_SUPPRESS_DEBUG to
	mark unknown type.

Fri Apr 22 03:27:26 1994  Doug Evans  <dje@cygnus.com>

	* Language directory reorganization.
	See parent makefile.

Thu Apr 21 18:27:57 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* cp-tree.h (THUNK_DELTA):  It is normally negative, so
	use signed .i variant of frame_size rather than unsigned .u.
	* cp-tree.h (VTABLE_NAME_FORMAT):  If flag_vtable_thunks,
	use "VT" rather than "vt" due to binary incompatibility.
	* class.c (get_vtable_name):  Use strlen of VTABLE_NAME_FORMAT,
	rather than sizeof, since it is now an expression.
	* class.c (modify_one_vtable):  Modify to skip initial element
	containing a count of the vtable.

Thu Apr 21 00:09:02 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (check_newline): Force interface_unknown on main input file.

	* pt.c (do_pending_expansions): Always emit functions that have been
	explicitly instantiated.
	(do_function_instantiation): Set DECL_EXPLICITLY_INSTANTIATED.
	(do_type_instantiation): Set CLASSTYPE_VTABLE_NEEDS_WRITING and
	DECL_EXPLICITLY_INSTANTIATED on all my methods.
	* parse.y (explicit_instantiation): Call do_type_instantiation for
	types.
	* decl2.c (finish_vtable_vardecl): Call import_export_vtable.
	* decl.c (start_function): Don't set DECL_EXTERNAL on a function
	that has been explicitly instantiated.
	* cp-tree.h (DECL_EXPLICITLY_INSTANTIATED): Alias for
	DECL_LANG_FLAG_4.
	* class.c: Move import_export_vtable to decl2.c, and comment out all
	uses.

Wed Apr 20 16:51:06 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (process_next_inline): Don't muck with DECL_INLINE.
	(do_pending_inlines): Likewise.

Tue Apr 19 22:25:41 1994  Mike Stump  <mrs@cygnus.com>

	Reimplement vtable building, and most vtable pointer setting.
	Allows for earier maintenance, easier understandability, and most
	importantly, correct semantics.

	* class.c (build_vtable): Removed unneeded
	SET_BINFO_VTABLE_PATH_MARKED.
	* class.c (prepare_fresh_vtable): Likewise.  Added argument.
	* class.c (modify_vtable_entry): General cleanup.
	* class.c (related_vslot, is_normal, modify_other_vtable_entries,
	modify_vtable_entries): Removed.
	* class.c (add_virtual_function): General cleanup.
	* class.c (finish_base_struct): Setup BINFO_VTABLE and
	BINFO_VIRTUALS as early as we can, so that modify_all_vtables can
	work.
	* class.c (finish_vtbls): New routine, mostly from
	unmark_finished_struct.
	* class.c (overrides): New routine.
	* class.c (modify_one_vtable): New routine, mostly from
	modify_other_vtable_entries and modify_vtable_entries.
	* class.c (modify_all_direct_vtables, modify_all_indirect_vtables,
	modify_all_vtables): New routines.
	* class.c (finish_struct): Added arguemnt to prepare_fresh_vtable
	call.  General cleanup on how pending_hard_virtuals are handled.
	General cleanup on modifying vtables.  Use finish_vtbls, instead of
	unmark_finished_struct.
	* cp-tree.h (init_vtbl_ptrs, expand_direct_vtbls_init,
	get_first_matching_virtual, get_matching_virtual,
	expand_vbase_vtables_init,  expand_indirect_vtbls_init): Update.
	* cvt.c (convert_pointer_to_real): Cleanup error message.
	* decl.c (grokfndecl): General cleanup.
	* decl.c (finish_function): Change init_vtbl_ptrs call to
	expand_direct_vtbls_init.  Change expand_vbase_vtables_init call to
	expand_indirect_vtbls_init.
	* init.c (expand_virtual_init): Remove unneeded argument.
	* init.c (init_vtbl_ptrs): Rename to expand_direct_vtbls_init, added
	two arguments to make more general.  Made more general.  Now can be
	used for vtable pointer initialization from virtual bases.
	* init.c (emit_base_init): Change expand_vbase_vtables_init call to
	expand_indirect_vtbls_init.  Change init_vtbl_ptrs call to
	expand_direct_vtbls_init.
	* init.c (expand_virtual_init): General cleanup.
	* init.c (expand_default_init): Change expand_vbase_vtables_init
	call to expand_indirect_vtbls_init.
	* init.c (expand_recursive_init_1): Change expand_vbase_vtables_init
	call to expand_indirect_vtbls_init.
	* init.c (expand_recursive_init): Change expand_vbase_vtables_init
	call to expand_indirect_vtbls_init.
	* search.c (get_first_matching_virtual): Rename to
	get_matching_virtual.  General cleanup and remove setting of
	DECL_CONTEXT.  That is now done in a cleaner way in
	modify_vtable_entry and add_virtual_function.
	* search.c (expand_vbase_vtables_init): Rename to
	expand_indirect_vtbls_init.  General cleanup.  Use
	expand_direct_vtbls_init to do hard work.  Ensures that _all_ vtable
	pointers from virtual bases are set up.
	* search.c (bfs_unmark_finished_struct, unmark_finished_struct):
	Removed.

	* *.[chy]: Remove support for VTABLE_USES_MASK.

Tue Apr 19 12:51:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): Use NOP_EXPRs to switch between
	reference and pointer types instead of bashing the types directly.

	* call.c (build_overload_call_real): Use the TREE_CODE to determine
	whether the function is overloaded or not, rather than
	TREE_OVERLOADED.
	* *: Remove all uses of TREE_OVERLOADED.

	* decl.c (grokdeclarator): Only complain about initializing const
	fields when -ansi or -pedantic.

Tue Apr 19 12:42:42 1994  Doug Evans  <dje@canuck.cygnus.com>

	* cp-tree.h (THUNK_DELTA): frame_size is now a union.

Mon Apr 18 00:17:13 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Do overloading on a block-by-block basis, not function-by-function.
	* decl.c: Lose overloads_to_forget.
	(struct binding_level): Add overloads_shadowed field.
	(poplevel): Restore overloads_shadowed.
	(push_overloaded_decl): Use overloads_shadowed instead of
	overloads_to_forget.
	(finish_function): Don't look at overloads_to_forget.

	Copy enum_overflow logic from c-decl.c.
	* decl.c (start_enum): Initialize enum_overflow.
	(build_enumerator): Use enum_overflow.  Also use current_scope().

	* search.c (current_scope): Move Brendan's comment from
	build_enumerator here.

	* typeck.c (convert_for_assignment): Change warnings to pedwarns for
	discarding const/volatile.

Sat Apr 16 01:18:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (comp_target_parms): Accept TEMPLATE_TYPE_PARMs on the rhs.
	(comp_target_types): Likewise.

	* decl.c (lookup_name): Don't unset got_scope here.

	* spew.c (yylex): Only replace yylval with the TYPE_NESTED_NAME if
	got_scope != NULL_TREE.

Fri Apr 15 16:36:33 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Horrible kludge to prevent templates from being instantiated by
	their base classes.
	* parse.y (template_instantiate_once): Unset TYPE_BEING_DEFINED
	before we get to left_curly.
	* pt.c (instantiate_class_template): Set TYPE_BEING_DEFINED.

	* error.c (dump_decl): If it's a typedef, print out the name of the
	decl, not just the underlying type.

	* decl.c (pushdecl): If the old duplicate decl was a TYPE_DECL,
	update the IDENTIFIER_TYPE_VALUE of its name.

	* decl2.c (finish_file): When processing the initializer for a
	static member, pretend that the dummy function is a member of the
	same class.

Fri Apr 15 15:56:35 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* class.c (build_vtable_entry): Revert Apr 4 change.
	* decl2.c (mark_vtable_entries): Replace pure virtual function
	decl with abort's.

Fri Apr 15 13:49:33 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_conditional_expr): Pedwarn on pointer/integer
	mismatch, and don't pedwarn on 0/function pointer mismatch.

	* typeck2.c (digest_init): Lose code for special handling of unions.
	(process_init_constructor): Since they're handled just fine here.
	Pedwarn on excess elements.

	* decl2.c (grokfield): Complain about local class method declaration
	without definition.

Fri Apr 15 13:19:40 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* method.c (emit_thunk):  Add extern declaration for
	current_call_is_indirect (needed for hppa).

Thu Apr 14 16:12:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Improve local class support; allow classes in different blocks to
	have the same name.
	* decl.c (pushtag): Support local classes better.
	(pushdecl_nonclass_level): New function for pushing mangled decls of
	nested types into the appropriate scope.
	(xref_defn_tag): Use pushdecl_nonclass_level instead of
	pushdecl_top_level.
	(grokfndecl): Don't mess with IDENTIFIER_GLOBAL_VALUE for local
	class methods.
	* method.c (do_inline_function_hair): Likewise.

	* class.c (finish_struct): It is legal for a class with no
	constructors to have nonstatic const and reference members.

Thu Apr 14 07:15:11 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (push_overloaded_decl): Avoid giving errors about
	built-ins, since duplicate_decls will have given warnings/errors
	for them.

Thu Apr 14 03:45:12 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): Warn about casting pointer type to
	reference type when this is probably not what they wanted.

Wed Apr 13 13:12:35 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (finish_decl):  Don't mindlessly set TREE_USED for
	static consts any more (toplev.c has now been modified to
	not emit warnings if they are unused).

Wed Apr 13 00:22:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_op_properties): If op new/delete get here with
	METHOD_TYPEs, do a revert_static_member_fn.

	* cp-tree.h (IDENTIFIER_CLASS_TYPE_VALUE): Lose.
	* init.c (is_aggr_typedef): Don't look at
	IDENTIFIER_CLASS_TYPE_VALUE.
	(get_aggr_from_typedef): Likewise.
	(get_type_value): Likewise.
	* call.c (build_scoped_method_call): Don't rely on overloaded
	template names having IDENTIFIER_CLASS_VALUE set.

	* parse.y (component_decl_1, fn.def2): Revert rules for
	constructors.
	(component_decl_1, fn.def2): Use $1 instead of $$, since $$ is being
	clobbered.

	* decl.c (start_function): Only warn about `void main()' if pedantic
	|| warn_return_type.

Tue Apr 12 02:14:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Clean up overloading of the template name.
	* class.c (pushclass): Overload the template name whenever pushing
	into the scope of a template class, not just if it is
	uninstantiated.
	(popclass): Correspondingly.
	* search.c (push_class_decls): Don't overload_template_name.
	* pt.c (overload_template_name): Don't set IDENTIFIER_LOCAL_VALUE or
	DECL_CONTEXT on things.
	* parse.y (left_curly): Don't overload_template_name.
	* class.c (finish_struct): Don't undo_template_name_overload.

	* method.c (build_opfncall): Only pass one argument to global op
	delete.

	* call.c (build_method_call): Use TYPE_VEC_DELETE_TAKES_SIZE to
	decide how many arguments to use for vec delete.

	* decl.c (grok_op_properties): Be consistent in modifying
	current_class_type.
	(grokdeclarator): Only complain about function decls with no return
	type if we're being pedantic.

Mon Apr 11 00:10:53 1994  Jason Merrill  <jason@deneb.cygnus.com>

	Add support for operator new [] and operator delete [].

	* tree.def: Add VEC_NEW_EXPR and VEC_DELETE_EXPR.
	* ptree.c (print_lang_type): Indicate vec new/delete.
	* parse.y: Support vec new/delete.
	* method.c (build_decl_overload): Deal with vec new/delete.
	(build_opfncall): Likewise.
	* lex.c (init_lex): Set up values of ansi_opname and opname_tab for
	vec new/delete.  vec new uses "__vn", and vec delete uses "__vd".
	* init.c (init_init_processing): Set up BIVN and BIVD.
	(do_friend): Don't clean up after mistaken setting of TREE_GETS_NEW,
	since it doesn't happen any more.
	(build_new): Support vec new.  Always call something.
	(build_x_delete): Support vec delete.
	(build_vec_delete): Lose dtor_dummy argument, add use_global_delete,
	and pass it to build_x_delete.
	* decl2.c (delete_sanity): Don't change behavior by whether or not
	the type has a destructor.  Pass use_global_delete to
	build_vec_delete.
	(coerce_delete_type): Make sure that the type returned has a first
	argument of ptr_type_node.
	* decl.c (init_decl_processing): Also declare the global vec
	new/delete.
	(grokdeclarator): Also force vec new/delete to be static.
	(grok_op_properties): Note presence of vec new/delete, and play with
	their args.  If vec delete takes the optional size_t argument, set
	TYPE_VEC_DELETE_TAKES_SIZE.
	* cp-tree.h (TYPE_GETS_{REG,VEC}_DELETE): New macros to simplify
	checking for one delete or the other.
	(lang_type): gets_new and gets_delete are now two bits long.  The
	low bit is for the non-array version.  Lose gets_placed_new.
	(TYPE_VEC_DELETE_TAKES_SIZE): New macro indicating that the vec
	delete defined by this class wants to know how much space it is
	deleting.
	(TYPE_VEC_NEW_USES_COOKIE): New macro to indicate when vec new must
	add a header containing the number of elements in the vector; i.e.
	when the elements need to be destroyed or vec delete wants to know
	the size.
	* class.c (finish_struct_methods): Also check for overloading vec
	delete.
	* call.c (build_method_call): Also delete second argument for vec
	delete.

	* decl.c (grokdeclarator): Correct complaints again.
	(grokdeclarator): Fix segfault on null declarator.
	(decls_match): Also accept redeclaration with no arguments if both
	declarations were in C context.  Bash TREE_TYPE (newdecl) here.
	(duplicate_decls): Instead of here.

	* parse.y (nested_name_specifier_1): Lose rules for dealing with
	syntax errors nicely, since they break parsing of 'const i;'.

	* decl.c (lookup_name): if (got_scope == current_class_type)
	val = IDENTIFIER_CLASS_VALUE (name).

	* search.c (lookup_nested_tag): Look in enclosing classes, too.

	* spew.c (yylex): Only look one character ahead when checking for a
	SCOPE.

	* lex.c (check_newline): Read first nonwhite char before
	incrementing lineno.

	* decl.c (grokdeclarator): Don't claim that typedefs are variables
	in warning.

	* parse.y: Divide up uses of unqualified_id into
	notype_unqualified_id and unqualified_id, so that TYPENAME can be
	used as an identifier after an object.

	* class.c (push_nested_class): Don't push into non-class scope.

	* decl.c (grokdeclarator): If an identifier could be a type
	conversion operator, but has no associated type, it's not a type
	conversion operator.

	* pt.c (unify): Check for equality of constants better.

	* decl.c (grokdeclarator): Don't complain about access decls.

Sun Apr 10 02:39:55 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): pedwarn about data definitions without
	types here.

	* parse.y (datadef): Don't pedwarn about decls without types here,
	since that is valid for functions.
	(fn.def2, component_decl): Support constructors with declmods again.
	(nomods_initdecls): For decls without any mods, so that we don't try
	to get declspecs from some arbitrary $0.

	* search.c (lookup_field): Use cp_error.

	* parse.y (nested_name_specifier_1): Don't check aggr/non-aggr type
	here; it breaks destructors for non-aggr types.

	* decl.c (lookup_name): Only look for TYPE_DECLs in base classes of
	a type being defined, like the comment says.
	If got_scope is not an aggregate, just return NULL_TREE.

	* pt.c (create_nested_upt): Kung's code for creating types nested
	within uninstantiated templates now lives here (it used to live in
	hack_more_ids).  It needs to be expanded.

	* parse.y: Stop calling see_typename so much.

	* decl.c (lookup_name): Deal with TTPs and UPTs.

	* lex.c (real_yylex): Don't set looking_for_typename just because we
	saw a 'new'.
	(dont_see_typename): #if 0 out.

	* spew.c (yylex): Increment looking_for_typename if the next
	character is SCOPE, rather than setting it to 1; this way, the value
	from seeing an aggr specifier will not be lost.  This kinda relies
	on looking_for_typename never being < 0, which is now true.

	* parse.y (nested_name_specifier_1): Accept TEMPLATE_TYPE_PARMs,
	too.
	(named_class_head_sans_basetype): Accept template types, too.  Oops.

Fri Apr  8 16:39:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (reparse_decl_as_expr1): Handle SCOPE_REFs.

	* parse.y: Lose START_DECLARATOR.

	* search.c (lookup_nested_tag): New function to scan CLASSTYPE_TAGS
	for a class.

	* parse.y: Simplify fn.def2 and component_decl.  Support 'enum
	A::foo' syntax.  Catch invalid scopes better.

	* parse.y, lex.c: Lose TYPENAME_COLON.

	* decl2.c (groktypefield): #if 0 out.

	* decl.c (lookup_name): If the type denoted by got_scope is
	currently being defined, look in CLASSTYPE_TAGS rather than FIELDS.

	* class.c (push_nested_class): Don't try to push into
	error_mark_node.

Fri Apr  8 07:26:36 1994  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Makefile.in (stamp-parse): Update count of conflicts to 33.

Thu Apr  7 17:47:53 1994  Jason Merrill  <jason@deneb.cygnus.com>

	A saner implementation of nested types that treats template types
	no differently from non-template types.  There are still some
	shortcomings of our system; most notably, it is difficult to look
	for a nested type that is hidden by another name, because of the way
	we keep track of hidden types.  But this shouldn't be a problem for
	just about anyone.  Perhaps lookup_field should be fixed up a bit.

	* spew.c: Moved handling of nested types/scoping from the lexer
	into the parser.  Removed variable template_type_seen_before_scope.
	Removed functions frob_identifier, hack_more_ids, and various cruft
	that was #if 0'd out in the past, reducing the size of the file from
	1146 lines to 450 lines.  We can't quite do away with spew.c yet,
	though; we still need it for do_aggr () and checking for SCOPE after
	the current identifier.  And setting lastiddecl.

	* parse.y: Moved handling of nested types/scoping from the lexer
	into the parser, using a new global variable `got_scope'.  Reduced
	the number of states by 53.  Implemented all uses of explicit global
	scope.  Removed terminals SCOPED_TYPENAME and SCOPED_NAME.  Removed
	nonterminals tmpl.1, scoped_base_class, id_scope, typename_scope,
	scoped_typename.  Added nonterminals nested_type,
	qualified_type_name, complete_type_name, qualified_id, ptr_to_mem,
	nested_name_specifier, global_scope, overqualified_id, type_name.
	Changed many others.  Added 9 new reduce/reduce conflicts, which are
	nested type parallels of 9 that were already in the grammar for
	non-nested types.  Eight of the now 33 conflicts should be removed
	in the process of resolving the late binding between variable and
	function decls.

	* gxxint.texi (Parser): Update.

	* cp-tree.h (IS_AGGR_TYPE_CODE): Add UNINSTANTIATED_P_TYPE.

	* lex.h: Add decl for got_scope.

	* lex.c (see_typename): Claim to be the lexer when calling
	lookup_name.

	* decl.c (lookup_name): When called from the lexer, look at
	got_scope and looking_at_typename; otherwise don't.

Thu Apr  7 22:05:47 1994  Mike Stump  <mrs@cygnus.com>

	31th Cygnus<->FSF merge.

Thu Apr  7 17:47:53 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (mark_vtable_entries): Call this to mark all the
	entries in the vtable addressable.
	(finish_decl_parsing): Handle SCOPE_REFs.

	* decl.c (decls_match): Always call compparms with strict == 1.
	Handle the special case of C function redecl here.
	(duplicate_decls): Only keep the old type if the new decl takes no
	arguments.

	* typeck.c (compparms): Also allow t1 to be ... if strict == 0.

Thu Apr  7 16:17:50 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vtable_entry): Fix breakage introduced Apr 5
	17:48:41.

Wed Apr  6 16:05:10 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* init.c (build_virtual_init), search.c (build_vbase_vtables_init),
	ch-tree.h:  Every place these functions were called, the result was
	immediately passed to expand_expr_stmt.  Reduce redundancy by
	calling expand_expr_init *inside* these functions.  These
	makes for a simpler interface, and we don't have to build
	compound expressions.  Hence, rename these function to:
	expand_virtual_init and expand_vbase_vtables_init respectively.
	* init.c, decl.c:  Change callers of these functions.
	* init.c, cp-tree.h (expand_virtual_init):  Make static.

	* decl2.c (finish_file): Check TREE_PUBLIC||TREE_ADDRESSABLE
	rather than DECL_SAVED_INSNS before emitting inlines.

Wed Apr  6 13:06:39 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* spew.c (init_spew): #if 0 out stuff used by arbitrate_lookup.

	* decl.c (duplicate_decls): If this is a new declaration of an
	extern "C" function, keep the type (for the argtypes).
	(redeclaration_error_message): Don't check DECL_LANGUAGE here.
	(decls_match): Call compparms with a value of strict dependent on
	the value of strict_prototypes for DECL_LANGUAGE (oldecl).

	* typeck.c (compparms): ... is only equivalent to non-promoting
	parms if we're not being strict.

	* parse.y (empty_parms): Don't check flag_ansi || pedantic here.

	* decl.c (init_decl_processing): if (flag_ansi || pedantic)
	strict_prototypes_lang_c = strict_prototypes_lang_cplusplus;

	* decl2.c (grok_function_init): Don't set DECL_INITIAL on pure
	virtuals.

Tue Apr  5 17:48:41 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	Support for implementing vtables with thunks.
	* tree.def (THUNK_DECL):  New TREE_CODE.
	* cp-tree.h (FNADDR_FROM_VTABLE_ENTRY), tree.c
	(fnaddr_from_vtable_entry):  Handle flag_vtable_thunks case.
	* cp-tree.h (memptr_type):  New variable.
	* class.c (build_vtable_entry):  Build thunk if necessary.
	* class.c (build_vfn_ref):  If using thunks, don't need
	to add delta field from vtable (there is none!).
	* decl.c: Add memptr_type as well as vtable_entry_type.
	If using thunks, the latter is just ptr_type_node.
	* gc.c, typeck.c:  Use memptr_typeChange, not vtable_entry_type.
	* decl2.c (finish_vtable_vardecl):  Handle thunks.
	* expr.c (cplus_expand_expr):  Support THUNK_DECL.

	* decl.c (grokdeclarator):  Set DECL_THIS_EXTERN if "extern".
	* decl.c (start_function):  Set current_extern_inline based on
	DECL_THIS_EXTERN, not TREE_PUBLIC.
	* decl.c (finish_function):  Call mark_inline_for_output if needed,

	Improve intelligence about when to emit inlines.
	* cp-tree.h (lang_decl_flags):  New field saved_inline.
	* cp-tree.h (DECL_SAVED_INLINE):  New macro.
	* class.c (add_virtual_function):  Don't set TREE_ADDRESSABLE.
	* decl.h, decl.c (pending_addressable_inlines):  Removed.
	* decl2.c (pending_addressable_inlines):  Renamed to saved_inlines.
	* decl2.c (mark_inline_for_output):  Do nothing if
	DECL_SAVED_INLINE;  otherwise set it (and add to saved_inlines list).
	* decl2.c (finish_vtable_vardecl):  SET_CLASSTYPE_INTERFACE_KNOWN
	and set CLASSTYPE_INTERFACE_ONLY if there is a non-inline virtual.
	* decl2.c (finish_file):  Writing out inlines later, so we can
	also handle the ones needed for vtbales.
	* decl2.c (write_vtable_entries, finish_vtable_typedecl):  Removed.

	* cp-tree.h, class.c, decl2.c, search.c:  Remove -fvtable-hack
	and flag_vtable_hack.  Use -fvtable-thunks and flag_vtable_thunks
	instead.  (The rationale is that these optimizations both break binary
	compatibility, but should become the default in a future release.)

Wed Apr  6 10:53:56 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (modify_vtable_entries): Never reset the DECL_CONTEXT
	of a fndecl, as we might not be from that vfield.

Tue Apr  5 17:43:35 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* class.c (add_virtual_function): Fix bug for pure virtual, so
	that DECL_VINDEX of the dummy decl copied won't be error.
	(see also Apr 4 change)

Tue Apr  5 17:23:45 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* typeck.c (c_expand_return):  Before checking that we're not
	returning the address of a local, make sure it's a VAR_DECL.
	(And don't worry about it being a TREE_LIST.)

Tue Apr  5 13:26:42 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (YYDEBUG): Always define.
	* lex.c (YYDEBUG): Likewise.

Mon Apr  4 11:28:17 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* class.c (finish_struct): Backup out the change below, put the
	new change for the same purpose.  The change below breaks code.

	* class.c (finish_struct): If pure virtual, copy node and make
	RTL point to abort, then put in virtual table.
	* decl2.c (grok_function_iit): Reinstate Mar 31 change.

Sat Apr  2 03:12:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_new): pedwarn about newing const and volatile
	types.

	* tree.c (get_identifier_list): Only do the special handling
	thing if we're dealing with the main variant of the record type.

	* cvt.c (convert_to_reference): When converting between
	compatible reference types, use the pointer conversion machinery.
	Don't just blindly overwrite the old type.

Fri Apr  1 17:14:42 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): When looking at global functions,
	be sure to use instance_ptr for the first argument, not some version
	of it that has been cast to a base class.  Also do this before
	comparing candidates.

Thu Mar 31 19:50:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Constructors can be called for
	const objects.

Thu Mar 31 16:20:16 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl2.c (grok_func_init): Do not abort as rtl for pur virtual
	functions.  They can be defined somewhere else.

Sat Jan 23 23:23:26 1994  Stephen R. van den Berg  <berg@pool.informatik.rwth-aachen.de>

	* decl.c (init_decl_processing): Declare __builtin_return_address
	and __builtin_frame_address for C++ as well.

Thu Mar 31 12:35:49 1994  Mike Stump  <mrs@cygnus.com>

	* typeck2.c (store_init_value): Integral constant variables are
	always constant, even when doing -fpic.

Sat Jan 23 23:23:26 1994  Stephen R. van den Berg  <berg@pool.informatik.rwth-aachen.de>

	* decl.c (redeclaration_error_message): Pass the types to
	comptypes.

Wed Mar 30 21:29:25 1994  Mike Stump  <mrs@cygnus.com>

	Cures incorrect errors about pure virtuals in a class, when they
	have been overridden in a derived class.

	* search.c (get_abstract_virtuals): Reimplement.
	* search.c (get_abstract_virtuals_1): New routine.

Wed Mar 30 14:10:04 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (push_template_decls): Make the pushed level pseudo
	global.

	* parse.y (extdefs): Don't pop everything if the current binding
	level is pseudo_global.

	* decl.c (pop_everything): Stop on reaching a pseudo-global
	binding level.

	* cp-tree.h (DECL_FUNCTION_MEMBER_P): Change to more reliable test.

	* decl.c (duplicate_decls): Only copy DECL_SOURCE_{FILE_LINE} if
	the old decl actually had an initializer.

	* {various}: Clean up gcc -W complaints.

	* cp-tree.h (DECL_FUNCTION_MEMBER_P): Currently defined to be
	(DECL_CONTEXT (NODE) != NULL_TREE).

	* parse.y (lang_extdef): Call pop_everything if necessary.

	* decl.c (pop_everything): New function for popping binding
	levels left over after a syntax error.
	(pushdecl): Use DECL_FUNCTION_MEMBER_P to decide whether or not
	a function is a member.

Wed Mar 30 14:20:50 1994  Mike Stump  <mrs@cygnus.com>

	Cures calling a more base base class function, when a more derived
	base class member should be called in some MI situations.

	* search.c (make_binfo): Use more the more specialized base
	binfos from the binfo given as the second argument to make_binfo,
	instead of the unspecialized ones from the TYPE_BINFO.
	* class.c (finish_base_struct): Likewise, update callers.
	* search.c (dfs_get_vbase_types): Likewise.
	* tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.
	* decl.c (xref_tag): Use NULL_TREE instead of 0.
	* lex.c (make_lang_type): Likewise.

Wed Mar 30 14:10:04 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (pushdecl): If pushing a C-linkage function, only do a
	push_overloaded_decl.
	(duplicate_decls): Standard overloading does not shadow built-ins.

Tue Mar 29 00:54:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (end_template_decl): Don't call push_overloaded_decl.

	* init.c (do_friend): Don't call push_overloaded_decl.

	* decl.c (pushdecl): Call push_overloaded_decl for functions and
	function templates.
	(duplicate_decls): Functions and function templates are not
	duplicates, but don't complain about calling this function to
	compare them.
	(push_overloaded_decl): Don't deal with linkage.  Call
	duplicate_decls.
	(redeclaration_error_message): Deal with linkage.

	* decl.c (start_function): If push_overloaded_decl returns an
	older version of the function, deal with it.

	* decl.c (start_function): Be sure only to push_overloaded_decl
	for non-members.

	* decl.c (grokfndecl): Put back clearing of DECL_CHAIN for
	methods.
	(start_function): Lose broken and redundant code for checking old
	decl.

	* init.c (add_friend): Give line numbers of both friend decls
	when warning about re-friending.

	* pt.c (tsubst): Use comptypes rather than == to compare the
	types of the method as declared and as defined, since default
	parameters may be different.

	* call.c (build_method_call): Use brendan's candidate printing
	routine.

	* decl.c (start_method): Methods defined in the class body are
	inline whether or not it's a template class.

Mon Mar 28 16:39:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (initdcl0): Add "extern" to current_declspecs if
	have_extern_spec && ! used_extern_spcec.

	* tree.c (really_overloaded_fn): A fn with more than one
	overload.

	* pt.c (end_template_decl): Use really_overloaded_fn.

	* decl.c (duplicate_decls): When smashing a decl into a previous
	definition, keep the old file and line.
	Don't deal with overloaded functions.
	Lose old code for checking arg types of functions.
	Check for overloaded C functions.
	(pushdecl): Deal with overloaded functions.
	(start_decl): Expect pushdecl to return an appropriate function decl.
	(start_function): Likewise.
	(push_overloaded_decl): Don't check for overloaded C functions.

	* *.c: Stop using DECL_OVERLOADED, it being archaic.
	TREE_OVERLOADED should probably go, too.

Mon Mar 28 14:00:45 1994  Ron Guilmette  <rfg@netcom.com>

	* typeck.c (comp_target_types): Call comp_target_parms with
	strict == 1.

Sun Mar 27 00:07:45 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (empty_parms): Don't parse () as (...) in extern "C"
	sections if we're compiling with -ansi or -pedantic.

	* decl.c (decls_match): Don't treat (int) and (int&) as matching.

	* decl2.c (grokfield): Don't pedwarn twice about initializing
	field.

	* decl.c (push_overloaded_decl): Warn about shadowing
	constructor.
	(redeclaration_error_message): Don't allow 'int a; int a;'

	* cvt.c (build_up_reference): Only check for valid upcast if
	LOOKUP_PROTECT is set, not just any flag.

Fri Mar 25 01:22:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (check_newline): When we see a #pragma implementation,
	also set it for the main input file.

	* init.c (build_new): Convert array size argument to size_t.

	* parse.y (primary): If we're doing a parenthesized type-id, call
	groktypename before passing it to build_new.

	* call.c (build_method_call): Deal properly with const and
	volatile for instances of reference type.

	* decl.c (store_return_init): Change 'if (pedantic) error' to 'if
	(pedantic) pedwarn'.

	* decl.c (grokdeclarator): Don't complain about putting `static'
	and `inline' on template function decls.

Thu Mar 24 23:18:19 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Preserve const & volatile on
	`this'.

Thu Mar 24 16:21:52 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_new, build_vec_delete): Use global new and delete
	for arrays.
	* decl2.c (delete_sanity): Likewise.

Thu Mar 24 02:10:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): If i is an lvalue,
	(int &)i -> *(int*)&i, as per 5.2.8p9 of the latest WP.
	(convert_force): Call convert_to_reference with LOOKUP_COMPLAIN.

Wed Mar 23 17:45:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): Also propagate DECL_TEMPLATE_MEMBERS
	and DECL_TEMPLATE_INSTANTIATIONS.

	* init.c (build_new): Handle array typedefs properly.

Wed Mar 23 18:23:33 1994  Mike Stump  <mrs@cygnus.com>

	30th Cygnus<->FSF merge.

Wed Mar 23 00:46:24 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (modify_vtable_entries): Avoid running off the end of the
	virtuals list when processing a virtual destructor.
	* class.c (get_vtable_entry): Likewise.

Wed Mar 23 00:23:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): If two template decls don't match,
	just return 0.

Tue Mar 22 23:49:41 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (convert_for_assignment): Don't pedwarn about
	converting function pointer to void *.

Tue Mar 22 22:23:19 1994  Mike Stump  <mrs@cygnus.com>

	Major revamp of pointer to member functions.  Cures major
	nonfunctionality when used in casts, and MI situations.

	* cvt.c (convert_force): Update call site of build_ptrmemfunc.
	* typeck.c (convert_for_assignment): Likewise.
	* typeck2.c (digest_init): Likewise.
	* typeck2.c (process_init_constructor): Simplify by moving code into
	digest_init.
	* typeck2.c (digest_init): Do default_conversions on init value, if
	we are processing pointer to member functions.
	* class.c (get_vfield_offset): Now non-static.  Convert bit offset
	into byte offset.
	* cp-tree.h (get_vfield_offset): Likewise.
	* typeck.c (get_member_function_from_ptrfunc): Convert down to right
	instance, before fetching vtable pointer.
	* typeck.c (get_delta_difference): New routine.
	* typeck.c (build_ptrmemfunc): Revamp to handle casting better, also
	get vtable pointer out of right subobject.

Tue Mar 22 17:56:48 1994  Mike Stump  <mrs@cygnus.com>

	* search.c (get_binfo): Return NULL instead of aborting, when
	passed a UNION_TYPE.

Tue Mar 22 12:44:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	These patches implement handling of redefinition/redeclaration of
	templates.

	* typeck.c (comptypes): Simplify.  All TEMPLATE_TYPE_PARMs are
	considered compatible.

	* parse.y (template_def): Pass defn argument to end_template_decl.

	* pt.c (end_template_decl): Add defn argument.  Check for
	redefinition.  Simplify.

	* error.c (OB_UNPUT): New macro, to remove mistakes.
	(aggr_variety): Subroutine of dump_aggr_type.

	* decl.c (decls_match): Support templates.
	(duplicate_decls): No longer static.  Don't try to lay out template
	decls.
	(pushdecl): Simplify.

	* cp-tree.h (DECL_TEMPLATE_MEMBERS): Use DECL_SIZE instead of
	DECL_INITIAL.

Mon Mar 21 11:46:55 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_decl): Support class template decls.
	(dump_type): Don't adorn template type parms.

	* decl.c (duplicate_decls): Save DECL_TEMPLATE_INFO from old decl
	if it was a definition.
	(redeclaration_error_message): Do the cp_error thang, and reject
	redefinition of templates.

Mon Mar 21 19:36:06 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (grokdeclarator):  Set TREE_PUBLIC for METHOD_TYPE
	in FIELD context, when appropriate.  Also,
	CLASSTYPE_INTERFACE_ONLY is irrelevant to setting TREE_PUBLIC.
	Also, simplify check for bogus return specifiers.

Mon Mar 21 11:46:55 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (after_type_declarator1): Expand type_quals.
	(notype_declarator1): Likewise.
	(absdcl1): Likewise.

Sat Mar 19 01:05:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Treat class-local typedefs like static
	members; i.e. 'typedef int f();' means that f is a function type,
	not a method type.

	* parse.y (decl): Change direct_* back to *.
	(type_id): Change direct_abstract_declarator to absdcl.
	(direct_declarator, direct_initdecls, direct_initdcl0): Remove again.

Fri Mar 18 12:47:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	These two patches fix crashes on instantiating a template inside a
	function with C linkage or containing labels.

	* class.c (current_lang_stacksize): No longer static.

	* decl.c (struct saved_scope): Add lang_base, lang_stack,
	lang_name, lang_stacksize, and named_labels.
	(push_to_top_level): Save them.
	(pop_from_top_level): Restore them.

	* gxxint.texi (Parser): Update.

	These two patches finish moving the task of expr/declarator
	ambiguity resolution from the lexer to the parser, and add one more
	r/r conflict.  START_DECLARATOR can now be nuked.

	* parse.y (decl): Add "direct_" in typespec X rules.
	(direct_declarator): New nonterminal for
	direct_after_type_declarator and direct_notype_declarator.
	(direct_initdecls): Like initdecls, but uses direct_initdcl0.
	(direct_initdcl0): Like initdcl0, but uses direct_declarator.
	(named_parm): Add typespec direct_declarator rule.

	* spew.c (yylex): #if 0 out START_DECLARATOR insertion.

	These two patches disable some excessive cleverness on the part of
	g++; a non-class declaration always hides a class declaration in the
	same scope, and g++ was trying to unhide it depending on the
	enclosing expression.

	* spew.c (arbitrate_lookup): #if 0 out.

	* decl.c (lookup_name): Never call arbitrate_lookup.

	* parse.y (complex_notype_declarator1): Add '*'
	complex_notype_declarator1 and '&' complex_notype_declarator1 rules.

	* parse.y (complex_direct_notype_declarator): Restore id_scope
	see_typename TYPENAME rule, remove all other rules beginning with
	those tokens.
	(notype_unqualified_id): Add '~' see_typename IDENTIFIER rule.

Thu Mar 17 17:30:01 1994  Jason Merrill  <jason@deneb.cygnus.com>

	These changes fix the compiler's handling of the functional cast/
	object declaration ambiguities in section 6.8 of the ARM.  They also
	add 11 reduce/reduce conflicts.  Sigh.

	* parse.y: Add precedence decls for OPERATOR and '~'.
	(notype_unqualified_id): New nonterminal, encompasses all of the
	ANSI unqualified-id nonterminal except TYPENAMEs.
	(expr_or_declarator): New nonterminal to delay parsing of code like
	`int (*a)'.
	(primary): Use notype_unqualified_id.
	(decl): Add typespec initdecls ';' and typespec declarator ';'
	rules.
	(initdcl0): Deal with the above.
	(complex_notype_declarator1): A notype_declarator that is not also
	an expr_or_declarator.
	(complex_direct_notype_declarator): A direct_notype_declarator that
	doesn't conflict with expr_or_declarator.  Use
	notype_unqualified_id.  Remove id_scope see_typename TYPENAME rule.
	(functional_cast): New nonterminal, for the three functional cast
	rules.  So that they can be moved after
	complex_direct_notype_declarator.
	(see_typename): Don't accept type_quals any more.

	* decl2.c (reparse_decl_as_expr): New function to deal with parse
	nodes for code like `int (*a)++;'.
	(reparse_decl_as_expr1): Recursive subroutine of the above.
	(finish_decl_parsing): New function to deal with parse nodes for
	code like `int (*a);'.  See the difference?

Thu Mar 17 12:16:10 1994  Mike Stump  <mrs@cygnus.com>

	These changes break binary compatibility in code with classes
	that use virtual bases.

	* search.c (dfs_get_vbase_types): Simplify and correct to make
	sure virtual bases are initialized in dfs ordering.
	* search.c (get_vbase_types): Simplify and make readable.

Thu Mar 17 12:01:10 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y: s/ typename / type_id /g

Wed Mar 16 17:42:52 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* parse.y (typespec): Add SCOPE TYPENAME for global scoped
	type. e.g. ::B x.

	* decl.c (complete_array_type): Fix a bug that in -pendantic
	mode even there's no initializer, it will continue to build
	default index.

Wed Mar 16 17:43:07 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (direct_notype_declarator): Add PTYPENAME rule, remove
	all of the scoped PTYPENAME rules.

Wed Mar 16 16:39:02 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_offset_ref): The value of A::typedef_name is
	always the TYPE_DECL, and never an error.

Tue Mar 15 20:02:35 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (get_base_distance_recursive): Two binfos can only
	represent the same object if they are both via_virtual.

	* class.c (finish_base_struct): Check vbases for ambiguity, too.

	* search.c (get_vbase_types): Accept binfo argument, too.

Tue Mar 15 19:22:05 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl.c (complete_array_type): Complete TYPE_DOMAIN of the
	initializer also, because back-end requires it.

Tue Mar 15 15:33:31 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_expr): Support member functions (which show up as
	OFFSET_REFs).

Mon Mar 14 16:24:36 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_new): Set the return type of multidimensional
	news correctly.

Fri Mar 11 15:35:39 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* call.c (build_method_call): If basetype not equal to type
	of the instance, use the type of the instance in building
	destructor.

Thu Mar 10 17:07:10 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* parse.y (direct_notype_declarator): Add push_nested_type for
	'template_type SCOPED_NAME' rule.

Tue Mar  8 00:19:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (parm): Add typed_declspec1 {absdcl, epsilon} rules.

Sat Mar  5 04:47:48 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (regcast_or_absdcl): New nonterminal to implement late
	reduction of constructs like `int ((int)(int)(int))'.
	(cast_expr): Use it.
	(sub_cast_expr): Everything that can come after a cast.
	(typed_declspecs1): typed_declspecs that are not typed_typespecs.
	(direct_after_type_declarator): Lose PAREN_STAR_PAREN rule.
	(direct_abstract_declarator): Replace '(' parmlist ')' rule with
	'(' complex_parmlist ')' and regcast_or_absdcl.
	(parmlist): Split
	(complex_parmlist): Parmlists that are not also typenames.
	(parms_comma): Enabler.
	(named_parm): A parm that is not also a typename.  Use declarator
	rather than dont_see_typename abs_or_notype_decl.  Expand
	typed_declspecs inline.
	(abs_or_notype_decl): Lose.
	(dont_see_typename): Comment out.
	(bad_parm): Break out abs_or_notype_decl into two rules.

Fri Mar  4 18:22:39 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (reparse_decl_as_casts): New function to change parse
	nodes for `(int)(int)(int)' from "function taking int and returning
	function taking int and returning function taking int" to "... cast
	to int, cast to int, cast to int".

	* decl2.c (reparse_decl_as_expr): Recursive function to change
	parse nodes for `A()()' from "function returning function returning
	A" to "A().operator()".

	* parse.y (primary): Replace `typespec LEFT_RIGHT' rule with
	`typespec fcast_or_absdcl' rule.
	(fcast_or_absdcl): New nonterminal to implement late reduction of
	constructs like `A()()()()'.
	(typename): Replace `typespec absdcl1' rule with
	`typespec direct_abstract_declarator' rule.
	(direct_abstract_declarator): Replace `LEFT_RIGHT type_quals' rule
	with `fcast_or_absdcl type_quals' rule.

Fri Mar  4 16:18:03 1994  Mike Stump  <mrs@cygnus.com>

	* tree.c (lvalue_p): Improve OFFSET_REF handling, so that it
	matches Section 5.5.

Fri Mar  4 14:01:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* error.c (dump_type_prefix): Don't print basetype twice for
	pmfs.

Fri Mar  4 13:24:33 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (convert_arguments): Handle setHandler(A::handlerFn)
	so that it is like setHandler(&A::handlerFn).  Cures an `invalid
	lvalue in unary `&''.

Fri Mar  4 11:15:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* gxxint.texi (Copying Objects): New section discussing default
	op= problems with virtual inheritance.

	* decl2.c (grokoptypename): Just does grokdeclarator and
	build_typename_overload, since the parser can't call grokdeclarator
	directly.

	* method.c (build_typename_overload): Set IDENTIFIER_GLOBAL_VALUE
	and TREE_TYPE on generated identifiers.

	* decl.c (grokdeclarator): Don't deal with TYPE_EXPRs anymore.

	* parse.y (parm): Convert `const char *' to `__opPCc' here.

	* error.c (dump_decl): Say sorry rather than my_friendly_aborting
	if we can't figure out what to do.
	(dump_type*): Likewise.

	* typeck2.c (build_m_component_ref): 'component' is an expr, not
	a decl.  Also move the IS_AGGR_TYPE check after the stripping of
	REFERENCE_TYPE.

Fri Mar  4 04:46:05 1994  Mike Stump  <mrs@cygnus.com>

	* call.c (build_method_call): Handle b->setHandler(A::handlerFn)
	so that it is like b->setHandler(&A::handlerFn).  Cures an `invalid
	lvalue in unary `&''.

Thu Mar  3 12:38:15 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y: Add precedence specification for START_DECLARATOR.
	(type_quals): Move before primary.
	(typename): Move before typed_declspecs, add 'typespec absdcl1' rule.

	* decl2.c (grokoptypename): Lose.

	* decl.c (grokdeclarator): Parse TYPE_EXPRs in the initial scan,
	rather than waiting until later.

Wed Mar  2 14:12:23 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (unary_expr): Use 'typename' in 'new' rules, rather
	than expanding it inline.
	(typename): Expand empty option of (former) absdcl inline.
	(abs_or_notype_decl): Likewise.
	(absdcl): Lose empty rule.
	(conversion_declarator): New nonterminal for 'typename' of 'operator
	typename'.
	(operator_name): Use it instead of absdcl.

	* parse.y: Add precedence declarations for SCOPED_TYPENAME,
	TYPEOF, and SIGOF.
	(typed_declspecs): Accept typed_typespecs, rather than typespec
	directly.  Add rules with reserved_typespecquals.
	(reserved_declspecs): Don't accept typespecqual_reserved at the
	beginning of the list.  The typed_declspecs rule will deal with this
	omission.
	(declmods): Accept nonempty_type_quals, rather than TYPE_QUAL
	directly.

	* parse.y (direct_notype_declarator,
	direct_after_type_declarator, direct_abstract_declarator): Split up
	the declarator1 nonterminals to match the draft standard and avoid
	ambiguities.
	(new_type_id, new_declarator, direct_new_declarator,
	new_member_declarator): New nonterminals to implement the subset of
	'typename' allowed in new expressions.
	(unary_expr): Use new_type_id instead of typename.
	(after_type_declarator1, absdcl1): Fix semantics of member pointers.
	(abs_member_declarator, after_type_member_declarator): Lose.

	* parse.y (absdcl1): Don't require parens around
	abs_member_declarator.
	(abs_member_declarator): Lose see_typename from rules.
	(after_type_member_declarator): Likewise.

	* tree.c (get_identifier_list): New function, containing code
	previously duplicated in get_decl_list and list_hash_lookup_or_cons.
	(get_decl_list): Use it.
	(list_hash_lookup_or_cons): Likewise.

	* parse.y (typed_declspecs, declmods): It's not necessary to hash
	the declspecs on class_obstack, so don't.  This way typed_typespecs
	can reduce to typed_declspecs.

Wed Mar  2 14:29:18 1994  Jason Merrill  <jason@cygnus.com>

	* cvt.c (build_up_reference): If we aren't checking visibility,
	also allow base->derived conversions.

Mon Feb 28 15:14:29 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* typeck.c (build_c_cast): Remove bogus hack when converting
	to a reference type.

	* cp-tree.h (lang_decl::vbase_init_list, DECL_VBASE_INIT_LIST):
	Removed, not used.
	(lang_stype::methods, lang_decl::next_method): New fields.
	(CLASSTYPE_METHODS, DECL_NEXT_METHOD):  New macros.
	* decl.c (duplicate_decls):  Preserve DECL_NEXT_METHOD.

	* cp-tree.h, decl2.c (flag_vtable_hack):  New flag.
	* decl2.c (finish_vtable_vardecl):  If flag_vtable_hack,
	and  !CLASSTYPE_INTERFACE_KNOWN, try to use the presence of
	a non-inline virtual function to control emitting of vtables.
	* class.c (finish_struct):  Build CLASSTYPE_METHODS list.
	* search.c (build_vbase_vtables_init):  Don't assemble_external
	(yet) if flag_vtable_hack.
	* class.c (build_vfn_ref):  Likewise.

Mon Feb 28 14:54:13 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (component_decl): Don't include "typed_declspecs
	declarator ';'" speedup, since it breaks enums.

Fri Feb 25 15:43:44 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* class.c (finish_struct):  Minor optimization for building
	fn_fields list.

Fri Feb 25 15:23:42 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (start_function): Fix detection of function overloading.

Thu Feb 24 22:26:19 1994  Mike Stump  <mrs@cygnus.com>

	* lex.c (check_newline): #pragma interface can take a string
	argument, just like #pragma implementation.  #pragma implementation
	checks for garbage on the line, line #pragma interface does.  Main
	input files do not auto implement like named files, #pragma
	implementation must be used explicitly.

Thu Feb 24 17:09:01 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y (components): Handle list of one again.
	(notype_components): Likewise.
	(after_type_declarator1): Take maybe_raises out again.

	* gxxint.texi (Parser): Document additional r/r conflict.

Wed Feb 23 14:42:55 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* gxxint.texi (Parser): Add node.

	* Makefile.in (stamp-parse): Update expected conflict count.

	* parse.y (various): Replace "declmods declarator" with "declmods
	notype_declarator".  The comment saying that "declmods declarator ';'"
	corresponds to "int i;" was wrong; it corresponds to "const i;".
	(component_decl): Add "typed_declspecs declarator ';'" rule; this
	*does* correspond to "int i;".  Change "declmods components" to
	"declmods notype_components".
	(components): Don't deal with a list of one anymore.
	(notype_components): New nonterminal, corresponds to notype_declarator.
	({after_,no}type_component_decl{,0}): More new nonterminals.
	({after_,no}type_declarator): Fold in START_DECLARATOR token.
	Eliminates four reduce/reduce conflicts.

	(expr): Depend on nontrivial_exprlist instead of nonnull_exprlist.
	(nontrivial_exprlist): New nonterminal: A list of at least two
	expr_no_commas's.
	(nonnull_exprlist): Depend on nontrival_exprlist.
	Eliminates four reduce/reduce conflicts.

	(named_class_head): Move intermediate code block into separate
	nonterminal so that we can stick %prec EMPTY on it.

	Add more %prec EMPTY's to eliminate remaining shift/reduce
	conflicts.

	(after_type_declarator): Add maybe_raises to fndecl rules.
	(after_type_declarator_no_typename): Remove.
	For correctness.

	Document remaining reduce/reduce conflicts.

Tue Feb 22 12:10:32 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (get_base_distance): Only bash BINFO_INHERITANCE_CHAIN
	(TYPE_BINFO (type)) if we care about the path.

	* tree.c (lvalue_p): A COND_EXPR is an lvalue if both of the
	options are.

Mon Feb 21 19:59:40 1994  Mike Stump  <mrs@cygnus.com>

	* Makefile.in (mostlyclean): lex.c is a source file, don't
	remove.

Sat Feb 19 01:27:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* parse.y: Eliminate 20 shift/reduce conflicts.

Fri Feb 18 11:49:42 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (type_unification): Add subr argument; if set, it means
	that we are calling ourselves recursively, so a partial match is OK.
	(unify): Support pointers to methods and functions.
	(tsubst): Support method pointers.
	* decl.c (build_ptrmemfunc_type): No longer static, so that
	tsubst can get at it.

	* init.c (is_aggr_typedef): Pretend template type parms are
	aggregates.
	* decl2.c (build_push_scope): If cname refers to a template type
	parm, just grin and nod.

	* call.c (build_overload_call_real): Pass subr argument to
	type_unification.
	* pt.c (do_function_instantiation): Likewise.
	* class.c (instantiate_type): Likewise.

	* search.c (get_base_distance): If BINFO is a binfo, use it and
	don't mess with its BINFO_INHERITANCE_CHAIN.

	* cvt.c (convert_to_reference): Fix temporary generation.
	If ambiguous, return error_mark_node.

	* init.c (build_new): Put back some necessary code.

Thu Feb 17 15:39:47 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_new): Deal with array types properly.

	* search.c (get_binfo): Become a shell for get_base_distance.
	(get_binfo_recursive): Lose.
	(get_base_distance_recursive): Find the path to the via_virtual base
	that provides the most access.
	(get_base_distance): Likewise.

	* parse.y (explicit_instantiation): Syntax is 'template class
	A<int>', not 'template A<int>'.

	* typeck.c (convert_for_initialization): Remove bogus warning.

	* parse.y (datadef): Revert patch of Oct 27.

Thu Feb 17 15:12:29 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* class.c (build_vfn_ref):  Cast delta field to ptrdiff_type_node,
	rather than integer_type_node.  Does wonders for the Alpha.

Thu Feb 17 13:36:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (build_ptrmemfunc_type): Make sure that the pmf type
	goes onto the same obstack as its target type.

Wed Feb 16 00:34:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cvt.c (convert_to_reference): If converting via constructor
	on local level, go back to build_cplus_new approach.

	* tree.c (build_cplus_new): If with_cleanup_p, set cleanup slot
	to error_mark_node to prevent expand_expr from building a cleanup
	for this variable.

	* lex.c (default_assign_ref_body): Return *this from the memcpy
	version, too.

	* decl.c (grok_reference_init): Just return if called with
	error_mark_node, don't worry about initializing non-const reference
	with temporary.

	* cvt.c (convert_to_reference): Do the right thing for
	non-aggregate reference conversions, pedwarn when generating a
	non-const reference to a temporary.

	* class.c (finish_struct): TYPE_HAS_COMPLEX_{INIT,ASSIGN}_REF and
	TYPE_NEEDS_CONSTRUCTING all depend on TYPE_USES_VIRTUAL_BASECLASSES
	again.

Tue Feb 15 19:47:19 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_reference_init): Pawn off a lot of the work on
	convert_to_reference.  Generally do the right thing.

	* cvt.c (convert_to_reference): Conform to the initial comment;
	i.e. don't create temps if decl != error_mark_node.  Handle
	cleanups better for temps that do get created.  Don't pretend
	that we can use an 'A' to initialize a 'const double &' just by
	tacking on a NOP_EXPR.  Support LOOKUP_SPECULATIVELY.

	* call.c (build_method_call): Set TREE_HAS_CONSTRUCTOR on
	constructor calls.

Mon Feb 14 14:50:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grok_reference_init): Make a temporary for initializing
	const reference from constant expression.

Mon Feb 14 11:31:31 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* cp-tree.h, decl.c (set_identifier_local_value):  Deleted function.
	* decl.c (pushdecl):  Define decl in correct binding_level
	(which isn't always the inner_binding_level).

	* cvt.c (build_up_reference):  Don't ever call expand_aggr_init.
	It's ugly, and I don't think it's the right thing to do.

	* cp-tree.h, class.c, decl.c, decl2.c, sp/search.c:
	Remove NEW_CLASS_SCOPING, assuming it is always 1.
	* decl.c (pop_decl_level):  Removed; manually inlined.

Sun Feb 13 19:04:56 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.h (candidate): Add basetypes field.

	* call.c (build_method_call): Do access checking after choosing a
	function, not before.

	* Makefile.in (cvt.o, call.o, method.o): Depend on class.h.
	(mostlyclean): Remove ../cc1plus.

Fri Feb 11 11:52:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't allow adjusting access to a field
	of a base class if a local field has the same name.

	* error.c (dump_type_prefix): Output basetype for METHOD_TYPEs.

Thu Jan 13 17:55:51 1994  Gnanasekaran Swaminathan  <gs4t@virginia.edu>

	* cp-tree.h (DESTRUCTOR_NAME_P): Do not confuse AUTO_TEMP names
	with destructor names when either NO_DOLLAR_IN_LABEL or
	NO_DOT_IN_LABEL are not defined.

	Now `template <class T, T f(T&), const T*> class A {...}' works.

	* pt.c (grok_template_type): Substitute template parm types
	with actual types in complex type as well.
	(coerce_template_parms): Update the grok_template_type ()
	function call.

	* pt.c (tsubst): Traverse method list using DECL_CHAIN.

	* decl.c (grok_op_properties): Allow operator++/-- to have
	default arguments.

	* typeck2.c (store_init_value): Don't abort when called to
	initialize a type that needs constructing with a CONSTRUCTOR.

	* init.c (expand_aggr_init_1, CONSTRUCTOR case): If
	store_init_value fails, build and expand an INIT_EXPR.  If
	store_init_value succeeds, call expand_decl_init.

Fri Feb 11 02:49:23 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Use complete_type_p instead of
	resolves_to_fixed_type_p to determine if the virtual bases are in
	their right place for the type of expr.  Cures problem of thinking a
	virtual base class is one place, when it is in fact someplace else.

Fri Feb 11 00:26:46 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (resolve_offset_ref): Make sure we first convert to
	intermediate type, if given, when dealing with members off `this'.
	Solves an incorrrect `type `foo' is not a base type for type
	`multiple'' when it is infact, a base type.

Thu Feb 10 21:49:35 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (modify_other_vtable_entries): Use get_binfo, instead
	of binfo_value.  Solves problem with compiler giving a `base class
	`B' ambiguous in binfo_value (compiler error)' on complex MI
	herarchies, when a virtual function is first defied in a virtual
	base class.

Thu Feb 10 17:19:32 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Don't complain about ambiguous
	intermediate conversion when converting down to a virtual base
	class, even if they might seem to be ambiguous.

Thu Feb 10 12:18:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (build_functional_cast): #if 0 out constructor
	inheritance code, improve error messages.

	* class.c (finish_base_struct): Complain about base with only
	non-default constructors in derived class with no constructors.

	* decl.c (grokdeclarator): Fix detection of virtual new/delete.

Wed Feb  9 22:02:32 1994  Mike Stump  <mrs@cygnus.com>

	* search.c (build_mi_virtuals, add_mi_virtuals,
	report_ambiguous_mi_virtuals): Removed unneeded code.
	* class.c (finish_struct_bits): Likewise.

Wed Feb  9 11:27:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (end_template_instantiation): Push decl before
	pop_from_top_level.

	* typeck2.c (build_m_component_ref): Make sure datum is of
	aggregate type.

	* init.c (get_type_value): New function, returns
	IDENTIFIER_TYPE_VALUE or IDENTIFIER_CLASS_TYPE_VALUE or NULL_TREE.

	* call.c (build_method_call): Don't die on call to destructor for
	non-type.

	* decl.c (grokdeclarator): Complain about virtual op new and op
	delete, make static virtuals unvirtual instead of unstatic.

	* typeck.c (build_c_cast): Also call default_conversion on
	methods.

	* decl.c (grokdeclarator): Don't complain about anonymous
	bitfields.

	* parse.y (simple_stmt, for loops): Move the continue point after
	the cleanups.

	* class.c (finish_struct): Fix setting of
	TYPE_HAS_COMPLEX_INIT_REF.

Tue Feb  8 13:21:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_new): Deal with `new double (1)'.

	* class.c (finish_struct): TYPE_HAS_COMPLEX_*_REF are supersets of
	TYPE_HAS_REAL_*_REF, but TYPE_HAS_COMPLEX_INIT_REF is independent of
	TYPE_NEEDS_CONSTRUCTING.

	* decl.c (duplicate_decls): Propagate access decls.

	* typeck2.c (process_init_constructor): Accept empty_init_node
	for initializing unions.

	* class.c, lex.c, cp-tree.h: Use
	TYPE_HAS_COMPLEX_ASSIGN_REF where TYPE_HAS_REAL_ASSIGN_REF was used
	before, use TYPE_HAS_COMPLEX_INIT_REF for TYPE_NEEDS_CONSTRUCTING in
	some places.

	* decl.c (finish_decl): Don't complain about uninitialized const
	if it was initialized before.

Mon Feb  7 18:12:34 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (default_assign_ref_body): Don't deal with vbases for
	now.

	* decl.c (finish_decl): Fix reversed logic for objects and other
	things that need to be constructed but have no initializer.

	* class.c (finish_struct): Don't set TYPE_HAS_* flags that are
	set by grok_op_properties or finish_decl.

	* decl.c: Don't warn about extern redeclared inline unless
	-Wextern-inline is given.
	* decl2.c (lang_decode_option): Likewise.
	* cp-tree.h: Likewise.

Mon Feb  7 17:29:24 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (pushdecl_with_scope): Fix thinko.  Add forward
	declaration.

	* decl.c (pushdecl_with_scope):  New function.
	* decl.c (pushdecl_top_level):  Use new function.
	* decl.c (pushtag):  Initialize newdecl.
	* decl.c (pushtag):  Push new type decl into correct scope.

Mon Feb  7 14:42:03 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c, cvt.c, init.c, search.c, cp-tree.h:
	Eradicate LOOKUP_PROTECTED_OK.

Mon Feb  7 13:57:19 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (pushtag, xref_tag), cp-tree.h:  Add extra parameter
	'globalize' to signify implicit declarations.
	* decl.c (globalize_nested_type, maybe_globalize_type):  Removed.
	* decl.c (set_identifier_type_value_with_scope):  New function.
	* decl.c (set_identifier_local_value):  Simplify.
	* spew.c (yylex, do_addr):  Modify to return a _DEFN if a
	forward declaration (followed by ';' and not preceded by 'friend').
	* class.c, decl.c, except.c, init.c, parse.y,
	pt.c, search.c: Add new argument to calls to xref_tag and
	pushtag.

Mon Feb  7 00:22:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (ACCESSIBLY_UNIQUELY_DERIVED_P): New macro, means what
	ACCESSIBLY_DERIVED_FROM_P meant before.
	(ACCESSIBLY_DERIVED_FROM_P): Now disregards ambiguity.

	* cvt.c (build_up_reference): Call get_binfo with PROTECT == 1.

	* search.c (get_base_distance_recursive): Members and friends of
	a class X can implicitly convert an X* to a pointer to a private or
	protected immediate base class of X.
	(get_binfo_recursive): Likewise.
	(get_base_distance): Ignore ambiguity if PROTECT < 0.
	(get_binfo): Lose multiple values of PROTECT.
	(compute_access): Protected is OK if the start of the
	search is an accessible base class of current_class_type.

	* method.c (build_opfncall): Do check access on operator new here.

	* decl.c (finish_function): Don't check access on operator new
	here.

Sun Feb  6 14:06:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (xref_tag): The base of a derived struct is NOT always
	public.  Duh.

	* pt.c (do_explicit_instantiation): New function, called from
	parser to do explicit function instantiation.
	(type_unification): Allow the args list to be terminated with
	void_list_node.
	(do_pending_expansions): Look at i->interface for non-member
	templates.

	* parse.y (datadef): Move explicit_instantiation here.
	(structsp): From here.
	(datadef): Complain about `int;'.

Sun Feb  6 12:33:18 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* pt.c (end_template_instantiation), cp-tree.h:  Remove unused
	second parameter, and simplify first from a TREE_LIST where
	we only care about its TREE_VALUE to just the value (an IDENTIFIER).
	* pt.c (instantiate_member_templates):  Simplify argument list
	from a TREE_LIST to just an IDENTIFIER.
	* lex.c (yyprint):  PRE_PARSED_CLASS_DECL is now just an IDENTIFIER.
	* parse.y (template_instantiate_once):  Simplify accordingly.
	* decl.c (inner_binding_level): New.  Use various places to
	simplify.

Sun Feb  6 02:49:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (build_functional_cast): int() -> int(0).

Sat Feb  5 00:53:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't do a bitwise copy for op= if the
	class has a virtual function table.

	* typeck.c (convert_for_initialization): Restore warnings about
	not using defined op=.  Should really be my_friendly_aborts, I
	s'pose.

Fri Feb  4 14:21:00 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Tidy up conditions for doing bitwise
	copies of objects.

	* decl.c (build_default_constructor): #if 0 out.

	* *: Eradicate TYPE_GETS_{ASSIGNMENT,ASSIGN_REF,CONST_ASSIGN_REF,
	CONST_INIT_REF}, TYPE_HAS_REAL_CONSTRUCTOR.

	* decl.c (grokdeclarator): Don't return void_type_node for
	friends being defined here.

	* init.c (perform_member_init): Only do the init if it's useful.

	* lex.c (default_copy_constructor_body): If we don't need to do
	memberwise init, just call __builtin_memcpy.
	(default_assign_ref_body): Likewise.

	* decl.c (grokdeclarator): If friendp && virtualp, friendp = 0.

Fri Feb  4 13:02:56 1994  Mike Stump  <mrs@cygnus.com>

	* lex.c (reinit_parse_for_method, cons_up_default_function):
	Don't give warn_if_unknown_interface warning when it came from a
	system header file.
	* pt.c (end_template_decl, instantiate_template): Likewise.
	* decl.c (start_decl): Likewise.

Fri Feb  4 00:41:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Don't try to set TYPE_WAS_ANONYMOUS on
	enums.

	* decl2.c (constructor_name_full): Use IS_AGGR_TYPE_CODE instead of
	IS_AGGR_TYPE, since we don't know it's a type.

Thu Feb  3 11:36:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Don't complain about anonymous unions.

	* cp-tree.h (TYPE_WAS_ANONYMOUS): This struct was originally
	anonymous, but had a name given to it by a typedef.

	* decl.c (grokdeclarator): When renaming an anonymous struct, set
	TYPE_WAS_ANONYMOUS.

	* decl2.c (constructor_name_full): Use TYPE_WAS_ANONYMOUS.

	* cp-tree.h (DECL_UNDEFINED_FRIENDS): #if 0 out.

	* init.c (xref_friend): Don't set up DECL_UNDEFINED_FRIENDS.
	(embrace_waiting_friends): Don't use DECL_UNDEFINED_FRIENDS.

	* decl.c (grokdeclarator): Set TYPE_NESTED_NAME properly on nested
	anonymous structs that get typedef'd.

	* decl.c (grokdeclarator): Always return void_type_node for
	friends.

	* error.c (dump_function_decl): Don't use DECL_CLASS_CONTEXT for
	friends.
	(dump_function_decl): Don't print out default args for
	a function used in an expression.

	* decl.c (grokdeclarator): Give error on abstract declarator used
	in an invalid context (i.e. `void (*)();').

	* error.c (cp_line_of): Support _TYPE nodes.
	(cp_file_of): Likewise.

	* cvt.c (build_up_reference): Don't abort if passed a SAVE_EXPR;
	it can happen for the RHS of an assignment stmt where the LHS is
	a COND_EXPR.

	* init.c (expand_aggr_init_1): Deal with bracketed initializer
	lists properly.

	* class.c (finish_struct): Deal with enumerators and typedefs
	again.

Wed Feb  2 11:30:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Tidy up loop over fields.

	* errfn.c (cp_thing): Don't advance twice after a format.

	* class.c (finish_struct): Complain about needing a constructor
	if a member has only non-default constructors, and don't try to
	generate a default constructor.

	* decl.c (finish_decl): Also do the constructor thing if
	TYPE_NEEDS_CONSTRUCTING is set (for arrays).

	* search.c (unuse_fields): New function: mark all fields in this
	type unused.
	(dfs_unuse_fields): Helper function.

	* class.c (pushclass): If the new class is the same as the old
	class, still unuse the fields.
	(unuse_fields): Move to search.c.

	* decl.c (grok_op_properties): Add friendp argument.
	(grokfndecl): Pass it.
	(start_method): Likewise.

	* decl2.c (delete_sanity): Add use_global_delete parameter to catch
	::delete calls.

	* parse.y (unary_expr): Pass new parameter to delete_sanity.

	* lex.c (default_copy_constructor_body): Don't choke if the union
	has no fields.
	(default_assign_ref_body): Likewise.

	* call.c (compute_conversion_costs_ansi): Do the right thing for
	ellipsis matches.

	* decl.c (push_to_top_level): Optimize.

	* decl.c (start_function): Look for the lexical scope of a friend
	in DECL_CLASS_CONTEXT.

	* init.c (do_friend): Set DECL_CLASS_CONTEXT on global friends.

Tue Feb  1 15:59:24 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (TREE_GETS_PLACED_NEW): New macro.

	* init.c (init_init_processing): Don't assign BIN/BID to the
	IDENTIFIER_GLOBAL_VALUEs of their respective operators.
	(build_new): Check TREE_GETS_PLACED_NEW.

	* decl.c (grok_op_properties): Don't set TREE_GETS_NEW for a decl of
	op new with placement, set TREE_GETS_PLACED_NEW.

	* cp-tree.h (ANON_UNION_P): New macro.  Applies to decls.

	* class.c (finish_struct): Don't treat anonymous unions like
	other aggregate members.  Do synthesize methods for unions without
	a name, since they may or may not be "anonymous unions".

	* decl2.c (grok_x_components): Wipe out memory of synthesized methods
	in anonymous unions.

	* lex.c (default_copy_constructor_body): Support unions.
	(default_assign_ref_body): Likewise.

Mon Jan 31 12:07:30 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h: Fix documentation of LOOKUP_GLOBAL, add prototypes.

	* error.c (args_as_string): New function (%A), like type_as_string
	except NULL_TREE -> "..."

	* call.c (build_overload_call_real): Fix for new overloading.

	* decl.c (grok_op_properties): Set all of the TYPE_OVERLOADS_* flags
	here.

	* parse.y (operator_name): Instead of here.

	* typeck2.c (build_functional_cast): Treat a TREE_LIST as a list
	of functions.

	* call.c (build_overload_call_real): Support LOOKUP_SPECULATIVELY.

	* method.c (build_opfncall): Don't need to massage return value
	any more, call build_overload_call with all flags.

	* typeck.c (build_x_binary_op): Put back speculative call to
	build_opfncall.
	(build_x_unary_op): Likewise.
	(build_x_conditional_expr): Likewise.

Mon Jan 31 10:00:30 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_type_conversion_1): Change call to pedwarn into
	warning, and conditionalize upon warn_cast_qual.

Fri Jan 28 11:48:15 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (lookup_field): If xbasetype is a binfo, copy it to
	avoid clobbering its inheritance info.

	* call.c (build_method_call): Don't overwrite basetype_path with
	TYPE_BINFO (inst_ptr_basetype) if they have the same type.

	* search.c (compute_access): Fix handling of protected inheritance
	and friendship with the enclosing class.

	* typeck2.c (store_init_value): Allow passing of TREE_CHAIN for
	initialization of arbitrary variable.

	* typeck2.c (build_functional_cast): Only try calling a method if
	one exists.

	* decl.c (grokdeclarator): Move handling of constructor syntax
	initialization into first loop for generality.
	(parmlist_is_random): Lose.

	* lex.c (cons_up_default_function): Set TREE_PARMLIST on arguments
	to default function.

Thu Jan 27 19:26:51 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokparms): Abort if we get called with something we don't
	expect.

Thu Jan 27 17:37:25 1994  Mike Stump  <mrs@cygnus.com>

	* call.c (build_overload_call_real): Change argument complain to
	flags to match style of rest of code.  Pass it down to
	build_function_call_real as necessary.
	* call.c (build_overload_call, build_overload_call_maybe): Change
	argument complain to flags to match style of rest of code.
	* cp-tree.h (build_function_call_real): Added fourth flags
	argument.
	* cvt.c (convert_to_reference): Only give warning messages, if
	LOOKUP_COMPLAIN is set.
	* typeck.c (build_x_function_call): Change simple complain
	argument to build_overload_call_maybe and build_overload_call, to
	LOOKUP_COMPLAIN to match style of rest of code.
	* typeck2.c (build_functional_cast): Likewise.
	* typeck.c (build_function_call_real): Add flags, so that we can
	not complain, if we don't want to complain.  Complain about
	arguments, if we are complaining, otherwise don't.
	* typeck.c (build_function_call, build_function_call_maybe):
	Stick in flags argument.
	* typeck.c (build_x_binary_op, build_x_unary_op,
	build_x_conditional_expr, build_x_compound_expr): Follow style of
	build_x_indirect_ref, as it is more correct and more common.

Thu Jan 27 14:36:20 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Don't check for being called with
	a pointer.

	* decl2.c (finish_file): Don't play with DECL_CLASS_CONTEXT for the
	static initializer function.

	* init.c (build_member_call): Use convert_force here, too.

	* search.c (compute_access): Only treat static members specially
	if they are referenced directly.

Wed Jan 26 18:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* gxxint.texi (Access Control): New node.

	* search.c (current_scope): New function; returns whichever of
	current_class_type and current_function_decl is the most nested.
	(compute_access): Total overhaul to make it clearer and more
	correct.  Don't use the cache for now; in the only situation where
	it was used before, it gained nothing.  This frees up three of the
	DECL_LANG_FLAGs for possible other use!

	* cp-tree.h: #if 0 out DECL_PUBLIC & friends.

	* typeck.c (build_component_ref_1): Don't check DECL_PUBLIC.

	* call.c (build_method_call): Use convert_force to cast `this' --
	rely on the access checking for the method itself.

	* init.c (is_friend): Do the nesting thing, handle types.  I am
	my own friend.
	(is_friend_type): Become a shell for is_friend.
	(add_friend): Never stick in ctype.
	Why are the friendship functions in init.c, anyway?

Wed Jan 26 17:50:00 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_type_conversion_1): Don't conditionalize call to
	pedwarn upon pedantic.

Wed Jan 26 17:20:46 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (convert_to_reference): Add 8.4.3 checking so that one
	gets a warning if one tries to initialize a non-const & from a
	non-lvalue.
	* cvt.c (convert_to_reference): Use %P format for argument
	numbers in warnings.

Wed Jan 26 14:35:06 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_delete): Follow style in call.c to construct the
	virtual call to the desctructor, as that code is right.  Fixes a
	problem of the compiler saying a pointer conversion is ambiguous.

Wed Jan 26 11:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (VTABLE_NAME_P): Change other occurrence of
	VTABLE_NAME_FORMAT to VTABLE_NAME.

	* *: s/visibility/access/g

Tue Jan 25 18:39:12 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Don't smash references if INIT_EXPR.

Tue Jan 25 13:54:29 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_delete): Back out Jan 17th & 18th pacthes, as
	they break libg++.

Tue Jan 25 13:11:45 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): Fix pointer arithmetic.

Mon Jan 24 15:50:06 1994  Chip Salzenberg  <chip@fin.uucp>

	[ cp-* changes propagated from c-* changes in 940114 snapshot ]
	* cp-parse.y (maybe_attribute): Allow multiple __attribute__
	clauses on a declaration.

Mon Jan 24 17:06:23 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Do synthesize methods for anon
	structs, just not unions.

Mon Jan 24 13:50:13 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl.c (xref_tag): Handle anonymous nested type.
	* decl.c (globalize_nested_type): Add no globalize bit check.
	* spew.c (hack_more_ids): Templated nested decl not push top
	level.

	* parse.y: Get rid of 'goto do_components'. It is much better
	for debugging.

	* decl.c (is_anon_name): Get rid of the function and use the
	macro ANON_AGGRNAME_P.
	* pt.c: Ditto.

Fri Jan 21 14:06:02 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't synthesize any methods for
	anonymous structs/unions.

	* typeck.c (build_modify_expr): Don't treat pmf's as class objects.

Thu Jan 20 18:56:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (build_opfncall): Call build_indirect_ref on
	synthesized instance for operator delete.

	* pt.c (type_unification): Don't abort if called with a list of
	types in ARGS.

	* class.c (instantiate_type): Deal with function templates.

Thu Jan 20 16:55:35 1994  Jim Wilson  <wilson@sphagnum.cygnus.com>

	* Makefile.in (CC): Default to cc not gcc.

Thu Jan 20 13:47:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Call constructor if appropriate.

	* decl.c (push_to_top_level): Clear out class-level bindings cache.

Wed Jan 19 13:51:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (resolve_scope_to_name): Work recursively (previously only
	looked down one level).

	* lex.c (do_pending_inlines): If we're still dealing with the last
	batch of inlines, don't start working on a new one.

	* Makefile.in (stamp-parse): Update conflict count.
	(TAGS): Fix.

	* parse.y (explicit_instantiation): New rule; implements
	'template A<int>' syntax (though not 'template foo(int)' yet).
	(structsp): Add explicit_instantiation.

Tue Jan 18 13:53:05 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct, etc.): Simplify decision to synthesize
	a destructor.

	* call.c, class.c, cp-tree.h, decl.c, init.c,
	ptree.c, search.c, typeck.c, typeck2.c: Nuke
	TYPE_NEEDS_CONSTRUCTOR (change all calls to TYPE_NEEDS_CONSTRUCTING).
	* init.c (expand_aggr_init_1): Don't try non-constructor methods
	of initializing objects.
	(build_new): Don't try other methods if the constructor lookup fails.

	* class.c (finish_base_struct): Set cant_have_default_ctor and
	cant_synth_copy_ctor properly.
	(finish_struct): Likewise.

Mon Jan 17 13:58:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr_1): #if 0 out again.
	(build_modify_expr): #if 0 out memberwise init code again.

	* lex.c (default_copy_constructor_body): Be const-correct.
	(default_assign_ref_body): Likewise.

	* init.c (perform_member_init): Use TYPE_HAS_CONSTRUCTOR to decide
	whether or not to use it, rather than TYPE_NEEDS_CONSTRUCTING.
	(expand_aggr_init): Disable silent conversion from initializer list
	to list of args for a constructor.

	* class.c (base_info): Lose needs_default_ctor.
	(finish_base_struct): Likewise.
	(finish_struct): Likewise.

	* decl.c (init_decl_processing): Don't turn off flag_default_inline
	just because flag_no_inline is on.
	(finish_decl): Use TYPE_HAS_CONSTRUCTOR to decide to use
	constructor.

	* class.c (finish_struct): Synthesize default ctor whenever
	allowed.

	* Makefile.in (TAGS): Don't try to run etags on cp-parse.y.

Sat Jan 15 18:34:33 1994  Mike Stump  <mrs@cygnus.com>

	* Makefile.in, configure: Handle the C++ front-end in a
	subdirectory.
	* cp-*: Move C++ front-end to cp/*.

Fri Jan 14 14:09:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_function_call_real): Modify to match other
	instances of taking the address of the function.

	* cp-class.c (finish_struct): Set TYPE_HAS_REAL_CONSTRUCTOR to 1 if
	there are non-synthesized constructors.
	Only set TYPE_NEEDS_CONSTRUCTOR if TYPE_HAS_REAL_CONSTRUCTOR.
	Always generate copy constructor if possible.

	* cp-tree.h (lang_type): Add has_real_constructor bitfield.
	(TYPE_HAS_REAL_CONSTRUCTOR): Define.

	* cp-lex.c (default_copy_constructor_body): Use init syntax
	for all bases.

	* cp-type2.c (store_init_value): Only give error for initializer list
	if TYPE_HAS_REAL_CONSTRUCTOR.

Thu Jan 13 15:38:29 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (DECL_SYNTHESIZED): Add defn.
	(lang_decl): Add synthesized bitfield to decl_flags.

	* cp-lex.c (cons_up_default_function): Use DECL_SYNTHESIZED to mark
	artificial methods, rather than a line # of 0.

Fri Jan 14 18:25:29 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl (xref_tag): Fix a bug in conflict type.
	* cp-parse.y: Add SCOPED_NAME for uninstantiated template nested
	type reference.
	* cp-spew.c (yylex): Generated SCOPED_NAME token.
	* cp-lex.c (yyprint): Handle SCOPED_NAME.

Fri Jan 14 17:00:29 1994  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (pushdecl): Revert patch from Jan 11 19:33:03, as it is
	not right.

Thu Jan 13 14:00:35 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl2.c (grok_x_components): Fix a bug that enum type does not
	have type_flags.

Thu Jan 13 11:39:34 1994  Mike Stump  <mrs@cygnus.com>

	Ensure that all vtable pointers are initialized with all the right
	values.

	* cp-class.c (is_normal): Changed to reflect new meaning of
	CLASSTYPE_VFIELD_PARENT.
	* cp-class.c (maybe_fixup_vptrs): Use of
	CLASSTYPE_NEEDS_VIRTUAL_REINIT here is misguided.  Use
	BINFO_MODIFIED instead.
	* cp-class.c (finish_struct): Changed to reflect new meaning of
	CLASSTYPE_VFIELD_PARENT.
	* cp-decl.c (get_binfo_from_vfield): Removed, unneeded now.
	* cp-decl.c (finish_function): Use init_vtbl_ptrs, instead of open
	coding it here.
	* cp-init.c (init_vfields): Changed name to init_vtbl_ptrs, and
	re-implement.
	* cp-init.c (emit_base_init): Use new name init_vtbl_ptrs.
	* cp-tree.h (vfield_parent): Changed to integer.
	* cp-tree.h (CLASSTYPE_VFIELD_PARENT): Changed docs to reflect new
	meaning.
	* cp-tree.h (init_vtbl_ptrs): Added init_vtbl_ptrs.

Wed Jan 12 18:24:16 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl.c (xref_tag): Re-implement globalize nested type.
	* cp-decl2.c (grok_x_components): Ditto.
	* cp-parse.y: Ditto.
	* cp-tree.h (lang_type): Add no_globalize bit in type_flags.

Wed Jan 12 14:08:09 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC on friend
	decls with a definition attached.

	* cp-typeck.c (build_modify_expr): Undo previous change in the case
	of INIT_EXPRs.

Tue Jan 11 19:33:03 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_modify_expr): Replace code for generating
	assignment semantics for classes with an error.
	(build_modify_expr_1): #if 0 out.

	* cp-decl.c (pushdecl): Patch bogus design of pushdecl
	behavior for overloaded functions (it doesn't push anything).

	* cp-class.c (finish_struct): When generating default op=,
	set TYPE_HAS_ASSIGNMENT.

Mon Jan 10 18:48:06 1994  Mike Stump  <mrs@cygnus.com>

	* cp-cvt.c (convert): Make {double, clashing enum} -> enum
	invalid.
	* cp-typeck.c (convert_for_assignment): Simplify.
	* cp-decl2.c (warn_enum_clash): Removed.
	* invoke.texi (-Wenum-clash): Removed.
	* toplev.c (-Wenum-clash): Removed.

Mon Jan 10 17:48:37 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl.c (finish_decl): Fix incorrect popclass call.

	* cp-decl.c (is_anon_name): New function, check whether the name
	is anonymous name generated by compiler.
	* cp-decl.c (grokdeclarator): Allow nested SCOPE_REF
	* cp-spew.c (hack_more_ids): Handle nested type in template.
	* cp-parse.y: Handle nested type reference in uninstantiated
	template.
	* cp-call.c (build_method_call): Handle uninstantiated template
	case.
	* cp-pt.c (search_nested_type_in_tmpl): New function, search nested
	type in template.
	* cp-pt.c (lookup_nested_type_by_name): New function, lookup nested
	type by name.
	* cp-pt.c (tsubst): Handle nested type search by name.

Mon Jan 10 14:32:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (build_member_call): Propagate qualifiers to new type.

	* cp-call.c (build_method_call): Count functions the new way.

Fri Jan  7 19:03:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for nested classes,
	too.

Tue Jan  4 16:45:51 1994  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-parse.y: Change to handle whether to globalize nested class.
	* cp-decl.c (xref_tag, maybe_globalize_type): Likewise.

Mon Jan  3 22:22:32 1994  Gerald Baumgartner  <gb@cygnus.com>

	* Makefile.in cp-call.c cp-class.c cp-cvt.c cp-decl.c cp-decl2.c
	cp-error.c cp-init.c cp-lex.c cp-lex.h cp-method.c cp-parse.y
	cp-spew.c cp-tree.c cp-tree.h cp-type2.c cp-typeck.c cp-xref.c
	gplus.gperf toplev.c: Incorporated C++ signature extension.
	* cp-sig.c: New file, contains most of signature processing.
	* cp-hash.h: Regenerated from gplus.gperf.

	* gcc.1 g++.1: Added explanation for  the `-fhandle-signatures'
	and `-fno-handle-signatures' command line flags.

	* gcc.texi: Changed the last-modification date.
	* invoke.texi: Added `-fhandle-signatures' in the list of
	C++ language options.  Added explanation for this option.

Tue Dec 28 21:10:03 1993  Mike Stump  <mrs@cygnus.com>

	* cp-init.c (expand_vec_init): Remove comptypes test, as it is too
	harsh here.

Tue Dec 28 13:42:22 1993  Mike Stump  <mrs@cygnus.com>

	* cp-pt.c (do_pending_expansions): Decide to expand a template
	member function, based upon it's class type, not the class type of
	the first place it was declared.

Tue Dec 28 05:42:31 1993  Mike Stump  <mrs@cygnus.com>

	* cp-class.c (is_normal): New routine, use to determine when the
	given binfo is the normal one.  (The one that should have the simple
	vtable name.)
	* cp-class.c (modify_other_vtable_entries): Use DECL_ASSEMBLER_NAME
	to check if two fndecls are `the same'.  Sometimes this routine can
	modify the main vtable, and normal should be 1, in that case, so use
	is_normal() to determine if this is the main vtable for the class.
	Don't recurse down virtual bases, as they are shared, and we take
	care of them elsewhere.
	* cp-class.c (modify_vtable_entries): If we have already updated the
	vtable with the new virtual, don't do it again.
	* cp-class.c (finish_struct): Set CLASSTYPE_VFIELD_PARENT as
	appropriate.  Do virtual function overriding in virtual bases, after
	normal overriding, so that the base function list in DECL_VINDEX is
	not overridden, before we have a chance to run through the list.
	Use DECL_ASSEMBLER_NAME to check if two fndecls are `the same'.
	Make sure we pass the right address into modify_vtable_entries.
	* cp-tree.h (CLASSTYPE_VFIELD_PARENT): New field to indicate which
	binfo is the one that has the vtable that we based our vtable on.

Fri Dec 24 09:40:52 1993  Michael Tiemann  <tiemann@blues.cygnus.com>

	* cp-typeck.c (c_expand_start_case): Use default_conversion to
	convert expression from reference type if necessary.

Wed Dec 22 17:58:43 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_unary_op): Make sure that it's a TREE_LIST before
	trying to read its TREE_VALUE.

	* cp-class.c (finish_struct_methods): Clear DECL_IN_AGGR_P here.
	(finish_struct): Instead of here.

Tue Dec 21 14:34:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
	have TYPE_PTRMEMFUNC_P set before we try to build its
	CLASSTYPE_ID_AS_LIST.
	(get_decl_list): Likewise, when trying to read it.

	* cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
	(VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.

Mon Dec 20 13:35:03 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-typeck.c (rationalize_conditional_expr): New function.
	(unary_complex_lvalue): Use it.
	(build_modify_expr): Use it, since trying to do an ADDR_EXPR of it
	with build_unary_op won't cut it.  Don't wrap the COND_EXPR with a
	SAVE_EXPR either.

	* cp-decl2.c (explicit_warn_return_type): Deleted variable.
	(lang_decode_option): Set warn_return_type, not explicit_*, for
	-Wreturn-type and -Wall.  This is what rest_of_compilation uses to
	decide if it should go into jump_optimize or not.
	* cp-tree.h (explicit_warn_return_type): Deleted.
	* cp-decl.c (grokdeclarator): Use warn_return_type, not explicit_*.
	(finish_function): Also complain about no return in a non-void fn if
	we're being pedantic (don't rely on use of -Wreturn-type).

Fri Dec 17 15:45:46 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-decl.c (grokdeclarator): Forbid declaration of a function as
	static if it's being done inside another function.

	* cp-search.c (compute_visibility): Check for friendship both ways.

Fri Dec 17 14:28:25 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-cvt.c (build_default_binary_type_conversion): Make error
	messages more helpful.

	* cp-error.c (op_as_string): New function, returns "operator =="
	given EQ_EXPR or suchlike.

Fri Dec 17 13:28:11 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (print_n_candidates): New function.
	(build_overload_call_real): Use it when we complain about a call
	being ambiguous.

Fri Dec 17 12:41:17 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-call.c (build_method_call): Fix checking for static call
	context.

	* cp-method.c (build_opfncall): Call build_indirect_ref on argument
	to operator new.

	* cp-init.c (build_new): Don't mess with rval when building
	indirect ref.

Thu Dec 16 16:48:05 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-lex.c (default_assign_ref_body): Add check when TYPE_NESTED_
	NAME(type) may not be exist.  It's not a problem for old compiler.

Thu Dec 16 14:46:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (CLASSTYPE_ALTERS_VISIBILITIES_P): Delete macro, it's
	never used for anything.
	(struct lang_type, member type_flags): Delete field
	`alters_visibility', and up `dummy' by 1.
	* cp-class.c (finish_base_struct): Delete code that copies the
	setting of CLASSTYPE_ALTERS_VISIBILITIES_P.
	(finish_struct): Delete code that sets it.

Thu Dec 16 14:44:39 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c, cp-init.c, cp-typeck.c: Fix arguments to
	build_method_call that I messed up before.

	* cp-search.c (get_base_distance): If protect > 1, allow immediate
	private base.

	* cp-class.c (finish_base_struct): Set cant_synth_* correctly.
	(finish_struct): Likewise.  Well, nigh-correctly; it won't deal
	properly with the case where a class contains an object of an
	ambiguous base class which has a protected op=.  Should be fixed
	when the access control code gets overhauled.
	(finish_struct_methods): Set TYPE_HAS_NONPUBLIC_* correctly.

Thu Dec 16 12:17:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-lex.c (real_yylex): Turn the code back on that deals with
	__FUNCTION__ and __PRETTY_FUNCTION__.  Don't use lookup_name, to
	avoid the ambiguity problems that led to it being turned off in the
	first place.

	* cp-method.c (hack_identifier): Also check for a TYPE_PTRMEMFUNC_P
	to see if something is a method.

Wed Dec 15 18:35:58 1993  Mike Stump  <mrs@cygnus.com>

	* cp-typeck.c (build_modify_expr): Avoid error messages on small
	enum bit fields.
	* cp-typeck.c (convert_for_assignment): Add missing argument to
	cp_warning and cp_pedwarn calls.

Wed Dec 15 18:25:32 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-parse.y (member_init): ANSI C++ doesn't forbid old-style base
	initializers; it's just anachronistic.

	* cp-decl.c (finish_decl): Don't require external-linkage arrays
	to have a complete type at declaration time when pedantic.

Tue Dec 14 11:37:23 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (pushdecl): Don't set DECL_CONTEXT if it's already set.

	* cp-call.c (build_method_call): Don't dereference pointer given
	as instance.

	* cp-decl.c (finish_function): Don't pass pointer to
	build_method_call.
	(finish_function): Likewise.

	* cp-typeck.c (build_x_function_call): Likewise.

	* cp-method.c (build_component_type_expr): Likewise.

	* cp-init.c (build_member_call): Likewise.
	(build_new): Likewise.

Mon Dec 13 18:04:33 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-decl.c (xref_tag): Fix regression created by changes made
	in Dec. 7 1993.
	* cp-decl.c (xref_defn_tag): Fix parallel nested class problem.

Fri Dec 10 12:40:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print
	out the final evaluation of the function, so we can see if ELLIPSIS,
	USER, and EVIL were set at the end.

	* cp-call.c (convert_harshness_ansi): When the parm isn't an lvalue,
	only go for setting TRIVIAL_CODE if we are dealing with types that
	are compatible.

Thu Dec  9 18:27:22 1993  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (flag_huge_objects): New flag to allow large objects.
	* toplev.c (lang_options): Likewise.
	* cp-decl2.c (flag_huge_objects, lang_f_options): Likewise.
	* cp-decl.c (delta_type_node): New type for delta entries.
	* cp-tree.h (delta_type_node): Likewise.
	* cp-decl.c (init_decl_processing): Setup delta_type_node.
	* cp-decl.c (init_decl_processing, build_ptrmemfunc_type): Use
	delta_type_node instead of short_integer_type_node.
	* cp-class.c (build_vtable_entry): Likewise.

Thu Dec  9 16:19:05 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
	NO_{DOLLAR,DOT} macro checks, so it always gets defined.
	(VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.

Wed Dec  8 17:38:06 1993  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (finish_decl): Make sure things that can go into
	"common", do go into common, if -fcommon is given.

Wed Dec  8 13:01:54 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (print_harshness) [DEBUG_MATCHING]: New function.
	(compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print out
	argument matching diagnostics to make instantly clear what the
	compiler is doing.

	* cp-call.c (convert_harshness_ansi): If the parm isn't an lvalue,
	then check to see if the penalty was increased due to
	signed/unsigned mismatch, and use a TRIVIAL_CODE if it wasn't.

Tue Dec  7 18:29:14 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-decl.c (xref_tag, pushtag): Fix nested class search/resolution
	problem.

Tue Dec  7 16:09:34 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Before synthesizing methods, if no
	methods have yet been declared then set nonprivate_method.  Don't
	set non_private method after synthesizing a method.

	* cp-lex.c (extract_interface_info): If flag_alt_external_templates
	is set, tie emitted code to the location of template instantiation,
	rather than definition.

	* cp-tree.h: Declare flag_alt_external_templates.

	* cp-decl2.c (lang_decode_option): Support -falt-external-templates.

	* toplev.c (lang_options): Likewise.

Mon Oct  4 12:50:02 1993  Chip Salzenberg  <chip@fin.uucp>

	[changes propagated from 930810 snapshot]
	* cp-decl.c (init_decl_processing): Make long long available for use
	as SIZE_TYPE and PTRDIFF_TYPE.
	(finish_decl): Allow file-scope static incomplete array.
	(grokdeclarator): Don't pass on const and volatile fron function
	value type to function type.
	Warn here for volatile fn returning non-void type.
	* cp-parse.y (attrib): Accept attributes `volatile' with alias
	`noreturn', and `const'.
	* cp-typeck.c (default_conversion): Don't lose const and volatile.
	(build_binary_op_nodefault): Generate pedantic warning for comparison
	of complete pointer type with incomplete pointer type.
	(build_c_cast): Be careful that null pointer constant be INTEGER_CST.

Tue Dec  7 10:46:48 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (expand_vec_init): When creating a temporary for copying
	arrays, use the type of the source, not the target.

	* cp-cvt.c (convert): Pass an argument for errtype to
	convert_to_reference.

	* cp-error.c (dump_expr, COMPONENT_REF & CALL_EXPR): Deal with
	methods, -> and `this'.

Mon Dec  6 17:12:33 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-error.c (parm_as_string): New function; returns `this' or arg
	number.  Corresponds to %P.
	(dump_expr): Deal with method calls.

	* cp-cvt.c (convert_to_reference): Stop using warn_for_assignment.
	* cp-typeck.c (convert_for_assignment): Likewise.
	(warn_for_assignment): Lose.

Mon Dec  6 11:33:35 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (ideal_candidate_ansi): Delete code that was never
	doing anything useful.  Instead, sort once, and DO NOT wipe
	out any codes with EVIL_CODE, since that's what we use as a
	marker for the end of the list of candidates.

	* cp-cvt.c (convert_to_aggr): Make sure to always set H_LEN.

Mon Dec  6 12:49:17 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (get_aggr_from_typedef): New function, like
	is_aggr_typedef but returns the _TYPE.

	* cp-call.c, cp-init.c, cp-method.c: Eradicate err_name.

Sun Dec  5 18:12:48 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-lex.c (readescape): Pedwarn when a hex escape is out of range.

Thu Nov 25 23:50:19 1993  Chip Salzenberg  <chip@fin.uucp>

	Delay language context change until beginning of next decl.

	* cp-lex.h (c_header_level): Removed.
	(pending_lang_change): Declared.
	* cp-lex.c (c_header_level): Renamed from in_c_header, made static.
	(pending_lang_change): Defined.
	(check_newline): Rework code that recognizes line number and
	filename changes.  Instead of pushing and popping lang context,
	increment and decrement pending_lang_change.
	(do_pending_lang_change):  Push and pop lang context according
	to value of pending_lang_change.
	* cp-parse.y (extdefs): Use lang_extdef instead of extdef.
	(extdef): Same as extdef, but call do_pending_lang_change() first.

Mon Nov 15 15:39:15 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-typeck.c (build_binary_op_nodefault): Warn for ordered
	compare of ptr with 0 only if pedantic in both cases.

Thu Nov 25 13:31:37 1993  Chip Salzenberg  <chip@fin.uucp>

	Reinstate the below patch, which got lost in the Cygnus merge:
	Tue Nov 23 13:59:24 1993  Hallvard B Furuseth  (hbf@durin.uio.no)
	* cp-parse.y (maybe_type_qual): Don't fail to set $$.

Wed Nov 17 19:03:30 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-parse.y (attrib): Allow "ident(ident)" like the C front end.

Fri Oct 22 20:43:37 1993  Paul Eggert  <eggert@twinsun.com>

	* cp-lex.c (real_yylex): Diagnose floating point constants
	that are too large.

Wed Nov 17 19:10:37 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-type2.c (build_functional_cast): ARM page 16: When a class
	and an object, function or enumerator are declared in the same
	scope with the same name, the class name is hidden.

Wed Nov 17 19:07:18 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-call.c (convert_harshness_ansi): Distinguish float, double,
	and long double from each other when overloading.
	(compute_conversion_costs_{ansi,old}, build_method_call,
	build_overlay_call_real, convert_to_aggr): Always set and
	always use H_LEN member of candidate structure.

Mon Oct 11 23:10:53 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (duplicate_decls): Note redeclarations of library
	functions, and generate distinct warnings for them.

Mon Oct  4 12:26:49 1993  Chip Salzenberg  <chip@fin.uucp>

	Support format warnings in G++.

	* cp-tree.h: Protect against multiple inclusion.
	Declare all public functions in c-common.c (copy from c-tree.h).
	(STDIO_PROTO): Define.
	(warn_format): Declare.
	(record_format_info): Remove declaration.
	* cp-decl.c (init_decl_processing): Call init_function_format_info.
	* cp-decl2.c (lang_decode_option): Make "-Wall" include warn_format.
	* cp-typeck.c (build_function_call_real): Call check_function_format.
	(record_format_info): Remove -- obsolete stub.

Sat Jul 24 12:04:29 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (duplicate_decls): Don't warn for non-extern var decl
	following an extern one (for -Wredundant-decls).
	* cp-parse.y (primary): In statement expression case, if compstmt
	returns something other than a BLOCK, return it unchanged.

Thu Dec  2 20:44:58 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (warn_extern_redeclared_static): New function made
	from code extracted from pushdecl.
	(duplicate_decls, pushdecl): Call new function.
	(lookup_name_current_level): Allow for IDENTIFIER_GLOBAL_VALUE
	to be a TREE_LIST when function is declared in 'extern "C" {}'.

Fri Dec  3 16:01:10 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (duplicate_tag_error): Use cp_error.
	(finish_base_struct): Check for ambiguity with direct base, and don't
	generate op= or copy ctor if it exists.

Fri Dec  3 15:32:34 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-init.c (expand_member_init): When initializer name is null,
	don't try to build it now because emit_base_init will handle it.

Fri Dec  3 12:28:59 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-lex.c (init_lex): Initialize input_filename to "<internal>" for
	code such as ExceptionHandler::operator=.

Fri Dec  3 10:32:08 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Don't try to print out dname when
	complaining about arrays of references if decl_context==TYPENAME,
	since it will be null.

	* cp-decl2.c: Default to flag_ansi_overloading.

Thu Dec  2 18:05:56 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-call.c (build_method_call): Use binfo from instance if it's
	different from binfo (basetype_path) passed from above.

Wed Nov 17 19:14:29 1993  Chip Salzenberg  <chip@fin.uucp>

	cp-error.c (dump_expr): Use unsigned chars to output a
	TREE_REAL_CST in hex.

Thu Dec  2 11:05:48 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Fix typo in setting
	cant_synth_asn_ref.

	* cp-tree.h (TYPE_NESTED_NAME): New macro, does
	DECL_NESTED_TYPENAME (TYPE_NAME (NODE)).

	* cp-lex.c (default_copy_constructor_body): Change
	DECL_NAME (TYPE_NAME (btype)) to TYPE_NESTED_NAME (btype).
	(default_assign_ref_body): Likewise.
	(default_copy_constructor_body): Call operator= explicitly for
	base classes that have no constructor.

Thu Dec  2 10:47:15 1993  Michael Tiemann  <tiemann@blues.cygnus.com>

	* cp-call.c (build_method_call): If the instance variable is
	converted to error_mark_node when we're trying to convert it to the
	base type of a method we're looking up, return error_mark_node.

Thu Dec  2 10:41:16 1993  Torbjorn Granlund  <tege@cygnus.com>

	* cp-typeck.c (build_binary_op_nodefault): In *_DIV_EXPR *_MOD_EXPR
	cases, tests for unsigned operands by peeking inside a NOP_EXPR.

Wed Dec  1 13:33:34 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (compute_conversion_costs_ansi): Use the size of struct
	harshness_code, not the size of short, for clearing out the
	ansi_harshness.

	* cp-call.c (print_candidates): New function.
	(build_method_call): When we had some candidates, but didn't get a
	usable match, don't report that we got an error with the first
	candidate.  Instead, say there were no matches, and list the
	candidates with print_candidates.  In the second pass, make sure we
	clear out ever_seen, so we can accurately count the number of
	functions that qualified.

Wed Dec  1 09:53:59 1993  Torbjorn Granlund  <tege@cygnus.com>

	* cp-typeck.c (build_binary_op_nodefault): Shorten for *_MOD_EXPR
	only if op1 is known to be != -1.
	(build_binary_op_nodefault): Handle *_DIV_EXPR likewise.

Tue Nov 30 14:07:26 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-method.c (hack_identifier): If the field itself is private, and
	not from a private base class, say so.

Mon Nov 29 03:00:56 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Always warn on initialization of
	const member.

Wed Nov 24 00:49:35 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Set TYPE_GETS_CONST_* properly.
	(finish_base_struct): Set cant_synth_asn_ref properly.

	* cp-lex.c (cons_up_default_function): Add section for operator=.
	(default_assign_ref_body): New function, mostly cribbed from
	default_copy_constructor_body.

	* cp-class.c (base_info): Add members cant_synth_copy_ctor,
	cant_synth_asn_ref, no_const_asn_ref.
	(finish_base_struct): Update no_const_asn_ref, note that you should
	update cant_synth_*, propagate TYPE_GETS_ASSIGN_REF.
	(finish_struct): Add decls for cant_synth_*, no_const_asn_ref, and
	initialize them properly.  Set no_const_asn_ref properly.  Set
	cant_synth_* in some of the situations where they should be set.
	Propagate TYPE_GETS_ASSIGN_REF.  Use cant_synth_copy_ctor.  Add call
	to cons_up_default_function for operator=.

Tue Nov 23 20:24:58 1993  Mike Stump  <mrs@cygnus.com>

	* cp-cvt.c (convert_force): Add code to perform casting of pointer
	to member function types.
	* cp-typeck.c (build_ptrmemfunc): Add FORCE parameter to indicate
	when the conversion should be done, regardless.
	* cp-tree.h (build_ptrmemfunc): Likewise.
	* cp-type2.c (digest_init): Likewise.
	* cp-typeck.c (convert_for_assignment): Likewise.

Tue Nov 23 18:06:58 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-error.c (dump_expr): Do the right thing for variables of
	reference type.

	* cp-decl.c (grok_op_properties): Set TYPE_HAS_ASSIGN_REF
	and its kin properly.
	(xref_tag): Propagate TYPE_GETS_ASSIGN_REF.

Tue Nov 23 12:26:13 1993  Mike Stump  <mrs@cygnus.com>

	* cp-method.c (build_opfncall): Don't count pointer to member
	functions as aggregates here, as we don't want to look up methods in
	them.  The compiler would core dump if we did, as they don't have
	normal names.
	* cp-typeck.c (build_indirect_ref): Improve wording on error
	message.

Mon Nov 22 14:22:23 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grok_op_properties): Allow operator?: with pedwarn
	(since it's supported in other compiler bits).

	* cp-method.c (report_type_mismatch): Use cp_error; ignore err_name
	argument.

	* cp-error.c (dump_function_decl): Don't print return type for
	constructors and destructors.

	* cp-cvt.c (cp_convert_to_pointer): Import code from
	convert_to_pointer so we can return error_mark_node in the case of an
	error, and to allow more meaningful error messages.
	(build_type_conversion): Don't go through void* when trying
	to convert to a pointer type.

	* cp-decl.c (grokfndecl): Move call to grok_op_properties back
	after grokclassfn so that it's dealing with the right decl.
	(grok_op_properties): Don't assert !methodp for op new and op delete.

	* cp-init.c (build_delete): Don't use TYPE_BUILT_IN (there are now
	no uses of it in the compiler).

	* cp-call.c (build_scoped_method_call): Fix for destructors of simple
	types.
	(build_method_call): Likewise.

Fri Nov 19 12:59:38 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.c (count_functions): Abstraction function.

	* cp-call.c (build_overload_call_real): Deal with new overloading
	properly, remove dead code.

	* gcc.c (default_compilers): Generate and use .ii files in the
	intermediate stage of compiling C++ source.

Fri Nov 19 11:26:09 1993  Jim Wilson  <wilson@sphagnum.cygnus.com>

	* cp-expr.c (cplus_expand_expr): Make call_target a valid memory
	address before using it, so it can be later safely compared.

Fri Nov 12 15:30:27 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-pt.c (tsubst): Deal with new overloading.

	* cp-typeck.c (fntype_p): Is the arg function type?
	(comp_target_parms): pedwarn on conversion from (anything) to (...).
	(build_x_function_call): Deal with new overloading.

	* cp-tree.c (decl_list_length): Deal with new overloading.
	(decl_value_member): Like value_member, but for DECL_CHAINs.

	* cp-decl.c (duplicate_decls): Deal with new overloading.
	(start_decl): Likewise.

	* cp-class.c (instantiate_type): Deal with new overloading.

	* cp-call.c (convert_harshness_ansi): Deal with new overloading.
	(convert_harshness_old): Deal with new overloading.
	(build_overload_call_real): Likewise.

Mon Nov  8 13:50:49 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.c (get_unique_fn): New function; returns FUNCTION_DECL
	if unambiguous, NULL_TREE otherwise.
	(get_first_fn): Returns the first appropriate FUNCTION_DECL.
	(is_overloaded_fn): Returns whether or not the passed tree is
	a function or list of functions.

	* cp-init.c (init_init_processing): Use `get_first_fn' to find
	the FUNCTION_DEFN for new and delete.

	* cp-decl.c (push_overloaded_decl): Use new overloading strategy, cut
	code size in half (I spit on special cases).

Tue Sep  7 20:03:33 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c: Allow references and template type parameters as well
