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.



Copyright (C) 1994 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
