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

	* parse.y: Break out eat_saved_input, handle errors.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* pt.c (unify): Handle BOOLEAN_TYPE.

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

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

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

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

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

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

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

Wed Jul 16 15:57:42 1997  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

	* parse.y (empty_parms): Only use VOID_LIST_NODE for the PARMS if
	we're in a C++ struct/class, not if we're doing `extern "C"'.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* cvt.c (convert): Remove bogosity.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* pt.c (instantiate_class_template): Oops.

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

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

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

	* decl.c (store_parm_decls): Set last_parm_cleanup_insn here.
	(finish_function): Put the base init code for constructors just
	after the parm cleanup insns.
	(struct cp_function): Add last_parm_cleanup_insn.
	(push_cp_function_context): Likewise.
	(pop_cp_function_context): Likewise.
	
Tue May 13 15:51:20 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst_copy): Handle BIT_NOT_EXPR.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* init.c (perform_member_init): Use new method of expr level
	cleanups, instead of cleanups_this_call and friends.
	(emit_base_init): Likewise.
	(expand_aggr_vbase_init_1): Likewise.
	(expand_vec_init): Likewise.
	* decl.c (cp_finish_decl): Likewise.
	(expand_static_init): Likewise.
	(store_parm_decls): Likewise.
	(cplus_expand_expr_stmt): Likewise.
	* decl2.c (finish_file): Likewise.
	
	* Make-lang.in (exception.o): Ok to compile with -O now.

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

	* decl2.c (lang_f_options): Remove support for short temps.
	* lang-options.h: Likewise.
	
Wed Apr 23 04:12:06 1997  Jason Merrill  <jason@yorick.cygnus.com>

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

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

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

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

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

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

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

	* call.c (build_over_call): Move setting of conv into the loop.

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

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

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

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

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

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

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

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

	* call.c (implicit_conversion): Oops.

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

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

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

	* exception.cc (__default_unexpected): Call terminate by default,
	so that if the user overrides terminate, the correct function will
	be called.
	
Wed Mar 19 14:14:45 1997  Mike Stump  <mrs@cygnus.com>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* decl.c (grok_op_properties): More warnings.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tue Dec 31 20:25:50 1996  Mike Stump  <mrs@cygnus.com>

	* search.c (expand_upcast_fixups): Fix bogus code generation
	problem where the generated code uses the wrong index into the
	runtime built vtable on the stack.  Old code could clobber random
	stack values.

Tue Dec 31 15:16:56 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (perform_member_init): Make sure the partial EH cleanups
	live on the function_obstack.

Fri Dec 27 10:31:40 1996  Paul Eggert  <eggert@twinsun.com>

	* Make-lang.in (g++spec.o): Don't use $< with an explicit target;
	this isn't portable to some versions of `make' (e.g. Solaris 2.5.1).

Tue Dec 24 10:24:03 1996  Jeffrey A Law  (law@cygnus.com)

	* decl.c (grokvardecl): Avoid ANSI style initialization.

Sun Dec 22 04:22:06 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst): Tweak arg types for a FUNCTION_TYPE.

Fri Dec 20 17:09:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Call grok_{ctor,op}_properties.

Fri Dec 20 12:17:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++spec.c (lang_specific_driver): Put missing hyphen in front of
	arguments we compare against.  Start the count of I at 1, not 0,
	since argv[0] is still the command.

Thu Dec 19 11:53:57 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* lang-specs.h: Accept .cp as an C++ extension.

Mon Dec 16 22:43:31 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

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

Thu Dec 12 15:00:35 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokvardecl): Change SPECBITS parm to be the SPECBITS_IN
	pointer.  New local SPECBITS with the parm's value.
	(grokdeclarator): Pass &specbits down.

	* parse.y (expr_no_commas): Make sure $$ is not an error_mark_node
	before we try to do C_SET_EXP_ORIGINAL_CODE on it.

	* search.c (envelope_add_decl): Check that the CLASSTYPE_CID of
	CONTEXT is not 0 before we try to use TYPE_DERIVES_FROM.

	* decl.c (cplus_expand_expr_stmt): Only expand the expr if EXP is
	not an error_mark_node.

Sat Dec  7 17:20:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h (TYPE_MAIN_DECL): Use TYPE_STUB_DECL.
	* *.c: Use TYPE_MAIN_DECL instead of TYPE_NAME where appropriate.
	
Fri Dec  6 14:40:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): When giving an anonymous struct a name,
	replace TYPE_NAME instead of TYPE_IDENTIFIER (so TYPE_STUB_DECL is
	not affected).

	* typeck2.c (build_m_component_ref): If component is a pointer
	to data member, resolve the OFFSET_REF now.

	* call.c (convert_like): Don't go into infinite recursion.

	* pt.c (coerce_template_parms): Use tsubst_expr for non-type args.

	* class.c (finish_struct_1): Set DECL_ARTIFICIAL on the vptr.
	* tree.c (layout_basetypes): And on the vbase ptr.

Thu Dec  5 02:11:28 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): Define in terms of POINTER_SIZE or
	CHAR_TYPE_SIZE so bool is always the same size as another type.

	* decl.c (pushtag): Set DECL_IGNORED_P for DWARF, too.

Tue Dec  3 23:18:37 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (grok_x_components): Remove synthesized methods from
	TYPE_METHODS of an anonymous union, complain about member
	functions.
	* decl.c (shadow_tag): Wipe out memory of synthesized methods in
	anonymous unions.
	(finish_function): Just clear the DECL_RTL of our arguments.

Fri Nov 29 21:54:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Emit DWARF debugging info for static data
	members.

	* pt.c (tsubst): If t is a stub decl, return the stub decl for type.

Wed Nov 27 14:47:15 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (build_component_ref): Don't die if COMPONENT isn't a
	IDENTIFIER_NODE.

Wed Nov 27 16:05:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Make-lang.in (g++-cross$(exeext)): Fix typo.

Wed Nov 27 08:14:00 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Make the g++ driver now be a standalone program, rather than one
	that tries to run the gcc driver after munging up the options.
	* Make-lang.in (g++.c, g++spec.o): New rules.
	(g++.o): New rule, based on gcc.o with -DLANG_SPECIFIC_DRIVER
	added.
	(g++$(exeext)): New rule, based on xgcc rule.
	(g++-cross$(exeext)): Now just copies g++$(exeext) over.
	* g++spec.c: New file.
	* g++.c: Removed file.

Tue Nov 26 19:01:09 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Arrange for any temporary values
	that have been keep in registers until now to be put into memory.

Mon Nov 25 15:16:41 1996  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Make-lang.in (c++.stage[1234]): Depend upon stage[1-4]-start, so
	that make -j3 bootstrap works better.

Sun Nov 24 02:09:39 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (pushtag): Do pushdecl for anon tags.

Thu Nov 21 16:30:24 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (c_expand_return): Fix logic.
	(unary_complex_lvalue): Avoid unused warning on address of INIT_EXPR.

Wed Nov 20 18:47:31 1996  Bob Manson  <manson@charmed.cygnus.com>

	* g++.c (main): Make sure arglist has a final NULL entry.  Add
	PEXECUTE_LAST to the flags passed to pexecute, as otherwise
	stdin/stdout of the invoked program are redirected to
	nowheresville.

Tue Nov 19 16:12:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (implicitly_declare): Set DECL_ARTIFICIAL.

Tue Nov 19 15:48:19 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (resolve_offset_ref): Handle obj.vfn better.
	* typeck.c (build_component_ref): Set TREE_TYPE on result from
	build_vfn_ref.

Tue Nov 19 13:14:33 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (convert_for_assignment): Also handle anachronistic
	implicit conversions from (::*)() to cv void*.
	* cvt.c (cp_convert_to_pointer): Likewise.

Mon Nov 18 17:05:26 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (handle_cp_pragma): Fix bogus warning.

Mon Nov 18 16:10:43 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert_to_pointer): Avoid thinking a POINTER_TYPE
	(METHOD_TYPE) is a TYPE_PTRMEMFUNC_P.

Thu Nov 14 23:18:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_1): Support DWARF2_DEBUG.
	* search.c (dfs_debug_mark): Likewise.
	* decl2.c (finish_vtable_vardecl): Likewise.
	* decl.c (pushtag, finish_enum): Likewise.
	* lex.c (check_newline): Use debug_* instead of calling *out
	functions directly.

Thu Nov 14 15:21:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Make-lang.in (cplib2.ready): Add else clause to avoid problems
	on some picky hosts.

Wed Nov 13 12:32:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_1): A class has a non-trivial copy
	constructor if it has virtual functions.

	* cvt.c (cp_convert): Always call a constructor.

	* call.c (reference_binding): Still tack on a REF_BIND
	for bad conversions.
	(build_user_type_conversion_1): Propagate ICS_BAD_FLAG.

	* typeck.c (convert_arguments): Pass LOOKUP_ONLYCONVERTING.
	(c_expand_return): Likewise.
	* typeck2.c (digest_init): Likewise for { }.
	* init.c (expand_aggr_init_1): Keep the CONSTRUCTOR handling.
	* cvt.c (cp_convert): Handle failure better.

Wed Nov 13 11:51:20 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++.c (main): Also set PEXECUTE_SEARCH, to make the invocation
	of GCC be path-relative. 

Wed Nov 13 11:27:16 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Make-lang.in (g++-cross): G++-cross doesn't need version.o, but
	it does need choose-temp.o and pexecute.o.

Wed Nov 13 07:53:38 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++.c (error) [!HAVE_VPRINTF]: Put error back for the only time
	that we still use it.
	(P_tmpdir, R_OK, W_OK, X_OK) [__MSDOS__]: Delete unnecessary macros.

Wed Nov 13 02:00:26 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (expand_default_init): Avoid calling constructors to 
	initialize reference temps.

	* cvt.c (convert_to_reference): Fix.

Tue Nov 12 19:10:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert): Simplify for flag_ansi_overloading.
	(convert_to_reference): Likewise.
	* typeck.c (convert_for_initialization): Likewise.
	* init.c (expand_default_init): Likewise.
	(expand_aggr_init_1): Likewise.
	* cp-tree.h (CONV_NONCONVERTING): Lose.
	* typeck.c (build_c_cast): Lose allow_nonconverting parm.
	* *.c: Adjust.
	* call.c (build_user_type_conversion_1): Assume LOOKUP_ONLYCONVERTING.

Tue Nov 12 16:29:04 1996  Brendan Kehoe  <brendan@canuck.cygnus.com>

	* pt.c (tsubst_expr): Reverse args to expand_start_catch_block.

Tue Nov 12 15:26:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (expand_aggr_init_1): Don't crash on non-constructor
	TARGET_EXPR.

Tue Nov 12 14:00:50 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++.c: Include gansidecl.h.
	(VPROTO, PVPROTO, VA_START): Delete.
	(choose_temp_base_try, choose_temp_base, perror_exec,
	run_dos) [__MSDOS__]: Delete fns.
	(pfatal_with_name): Delete fn.
	(temp_filename): Declare like in gcc.c.
	(pexecute, pwait, choose_temp_base): Declare from gcc.c.
	(error_count, signal_count): Define.
	(error): Delete both definitions.
	(PEXECUTE_{FIRST,LAST,SEARCH,VERBOSE}): Define from gcc.c.
	(pfatal_pexecute): Add fn from gcc.c.
	(main): Rename local VERBOSE var to VERBOSE_FLAG.  Rewrite the
	code to use the pexecute stuff also used by gcc.c.
	(MIN_FATAL_STATUS): Define.
	* Make-lang.in (g++): Add dependency on and linking with
	choose-temp.o and pexecute.o.

	* cp-tree.h: Include gansidecl.h.
	(STDIO_PROTO): Delete #undef/#define.
	* cvt.c (NULL): Delete #undef/#define.
	* expr.c (NULL): Likewise.
	* init.c (NULL): Likewise.
	* rtti.c (NULL): Likewise.
	* xref.c (NULL): Likewise.

	* cp-tree.h (build_user_type_conversion): Add prototype.
	* call.c (build_user_type_conversion): Delete prototype.  Correct
	decl of FLAGS arg to be an int.
	* cvt.c (build_user_type_conversion): Likewise.

Tue Nov 12 12:16:20 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.def: Add TRY_BLOCK and HANDLER.
	* except.c (expand_start_catch_block): Support templates.
	* parse.y (try_block, handler_seq): Likewise.
	* pt.c (tsubst_expr): Support TRY_BLOCK and HANDLER.

Mon Nov 11 13:57:31 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (current_template_args): New fn.
	(push_template_decl): Use it.
	* decl.c (grokdeclarator): Use it.

	* decl2.c (build_expr_from_tree): Dereference ref vars.

	* decl.c (grokdeclarator): Generalize handling of TYPENAME_TYPEs in
	the decl-specifier-seq.

	* decl.c (grok_op_properties): Don't force the type of a conversion
	op to be complete.  Don't warn about converting to the same type
	for template instantiations.

	* decl2.c (finish_file): Don't call instantiate_decl on synthesized
	methods.

Mon Nov 11 13:20:34 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (get_delta_difference): Remove previous bogusness.
	Don't give errors if force is set.

Fri Nov  8 17:38:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Don't emit debug info.
	* decl.c (pushdecl): Lose obsolete code.
	(grokdeclarator): Still do the long long thing after complaining.
	* search.c (note_debug_info_needed): Don't do anything if we're in a 
	template.
	* method.c (synthesize_method): For non-local classes,
	push_to_top_level first.

Fri Nov  8 11:52:28 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (get_delta_difference): Add no_error parameter.
	(build_ptrmemfunc): Call get_delta_difference with no_error set;
	we don't want error messages when converting unrelated
	pointer-to-member functions.

Thu Nov  7 11:16:24 1996  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_expr): Improve the wording on error messages that
	involve pointer to member functions.

Tue Nov  5 17:12:05 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (cp_convert_to_pointer): Move code for conversions from
	(::*)() to void* or (*)() up a bit, so that we can convert from
	METHOD_TYPEs as well.

Tue Nov  5 14:54:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (get_tinfo_fn): Make sure 'type' is permanent.
	There are no 'member' types.
	(get_tinfo_fn_dynamic): Diagnose typeid of overloaded fn.
	(build_x_typeid): Handle errors.

Mon Nov  4 17:43:12 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (convert_for_assignment): Handle anachronistic implicit
	conversions from (::*)() to void* or (*)().
	* cvt.c (cp_convert_to_pointer): Likewise.
	(cp_convert_to_pointer_force): Remove cp_convert_to_pointer
	conversions from here.
	* decl2.c (lang_decode_option): Add -W{no-,}pmf-conversions.
	* lang-options.h: Likewise.
	* decl2.c (warn_pmf2ptr): Define.
	* cp-tree.h: Declare it.
	* typeck2.c (digest_init): Allow pmfs down into
	convert_for_initialization.

Sun Nov  3 09:43:00 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (c_expand_return): Fix for returning overloaded fn.

Fri Nov  1 08:53:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h (DIRECT_BIND): Change from INDIRECT_BIND.
	* decl.c (grok_reference_init): Pass DIRECT_BIND.
	* cvt.c (build_up_reference): Don't mark 'this' addressable.  Use
	DIRECT_BIND.
	* call.c (convert_like): Don't pass INDIRECT_BIND.
	* typeck.c (convert_arguments): Likewise.
	* typeck.c (mark_addressable): Allow &this if flag_this_is_variable.

Thu Oct 31 17:08:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (mark_addressable): Support TARGET_EXPR, unify with
	similar code in build_up_ref.
	* cvt.c (build_up_reference): Drastically simplify.

Mon Oct 28 12:45:05 1996  Jeffrey A Law  (law@cygnus.com)

	* typeck.c (signed_or_unsigned_type): If the given type already
	as the correct signedness, then just return it.

	* typeck.c ({un,}signed_type): If can't do anything, call
	signed_or_unsigned_type.

Thu Oct 24 14:21:59 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl2.c (copy_assignment_arg_p): Don't buy the farm if
	current_class_type is NULL.

Wed Oct 23 00:43:10 1996  Jason Merrill  <jason@gerbil.cygnus.com>

	* class.c (finish_struct_1): Avoid empty structs by adding a field
	so layout_type gets the mode right.

	* typeck.c (c_expand_return): Drastically simplify.

Mon Oct 21 22:34:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

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

Fri Oct 18 16:03:48 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): A TARGET_EXPR has side-effects.

Thu Oct 17 11:31:59 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (convert_to_pointer_force): Add code to support pointer to
	member function to pointer to function conversions.
	* init.c (resolve_offset_ref): Add code to allow faked up objects,
	ignoring them if they are not used, and giving an error, if they
	are needed.
	* typeck.c (get_member_function_from_ptrfunc): Fold e1 to improve
	code, and so that we can give an error, if we needed an object,
	and one was not provided.
	(build_c_cast): Don't call default_conversion when we want to
	convert to pointer to function from a METHOD_TYPE.

Mon Oct 14 00:28:51 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Make-lang.in (cplib2.ready): Fix logic.

	* decl.c (shadow_tag): Only complain about non-artificial function
	members.

	* class.c (finish_struct_1): Add synthesized methods to TYPE_METHODS.

Fri Oct 11 16:12:40 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* expr.c (cplus_expand_expr): Pre-tweak call_target like
	expand_inline_function would.

	* pt.c (mark_decl_instantiated): If extern_p, call
	mark_inline_for_output.

Thu Oct 10 15:58:08 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (unary_complex_lvalue): Add code to handle intermediate
	pmd conversions.

	* typeck.c (get_delta_difference): Fix wording, as we can be used
	for pointer to data members.

Tue Oct  8 12:43:51 1996  Bob Manson  <manson@charmed.cygnus.com>

	* pt.c (tsubst): If the function decl isn't a member of this
	template, return a copy of the decl (including copying the
	lang-specific part) so we don't hose ourselves later.

Thu Oct  3 16:24:28 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct): Remove DWARF-specific tag handling.
	* decl.c (pushtag): Likewise.
	(finish_function): Always clear DECL_ARGUMENTS on function decls with
	no saved RTX.
	* decl2.c (finish_file): Emit DWARF debugging info for static data
	members.

Wed Oct  2 21:58:01 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl.c (duplicate_decls): Make sure the old DECL_LANG_SPECIFIC
	isn't the same as the new one before we whack it.

Mon Sep 30 13:38:24 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c, cp-tree.h, cvt.c, decl.c, decl2.c, gxx.gperf, hash.h,
	lex.c, method.c, parse.y, typeck.c, typeck2.c: Remove
	warn_traditional and warn_strict_prototypes; remove ancient
	'overload' code; remove references to flag_traditional.

Mon Sep 30 12:58:40 1996  Mike Stump  <mrs@cygnus.com>

	* input.c (sub_getch): Handle 8-bit characters in string literals.

Sun Sep 29 03:12:01 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (mapcar): Handle CONSTRUCTORs.
	(copy_to_permanent): Handle expression_obstack properly.

	* Make-lang.in (cplib2.txt): Also depend on the headers.

	* rtti.c (get_tinfo_var): Don't assume that POINTER_SIZE ==
	INT_TYPE_SIZE.
	(expand_class_desc): Use USItype for offset field.
	* tinfo.h (struct __class_type_info): Likewise.

	* method.c (build_overload_int): TYPE_PRECISION should be applied
	to types.

Sat Sep 28 14:44:50 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_op): A COND_EXPR involving void must be a
	builtin.

Fri Sep 27 16:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_x_component_ref): New fn.
	(build_object_ref): Use it.
	* parse.y (primary): Use it.
	* decl2.c (build_expr_from_tree): Use it.
	* cp-tree.h: Declare it.

	* decl.c (start_decl): variable-sized arrays cannot be initialized.
	* error.c (dump_type_suffix): Handle variable arrays.

Fri Sep 27 13:14:05 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Make-lang.in (exception.o): Put back compiling it with -fPIC.

Fri Sep 27 03:00:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (lookup_name_real): Don't try to look up anything in a
	TYPENAME_TYPE.

	* tinfo2.cc (__throw_type_match_rtti): Oops.

Thu Sep 26 22:11:05 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* Make-lang.in (exception.o): Use -fno-PIC for now.

Thu Sep 26 10:59:00 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (build_dynamic_cast): Pass tinfo fns rather than
	calling them.
	(get_tinfo_fn_dynamic): Extracted from build_typeid.
	* tinfo2.cc (__dynamic_cast): Adjust.
	
	* rtti.c (build_typeid): Use resolves_to_fixed_type_p.
	(build_x_typeid): Likewise.

	* parse.y: Call build_x_typeid instead of build_typeid.
	* cp-tree.def: Add TYPEID_EXPR.
	* pt.c (tsubst_copy): Handle typeid.
	* decl2.c (build_expr_from_tree): Likewise.
	* rtti.c (build_x_typeid): Throw bad_typeid from here.
	(build_typeid): Not here.
	* cp-tree.h: Declare build_x_typeid.

Wed Sep 25 17:26:16 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (convert_like): Pull out constant values.

	* tree.c (mapcar): Use build_cplus_array_type, not build_array_type.

Wed Sep 25 17:28:53 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* decl.c (init_decl_processing): Create short int types before
	creating size_t in case a machine description needs to use
	unsigned short for size_t.

Tue Sep 24 18:18:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Make-lang.in (exception.o): Turn off pic.

	* tinfo2.cc (__throw_type_match_rtti): Fix cv-variants of the same
	type, multi-level ptr conversions.

	* rtti.c (call_void_fn): Renamed and genericized from throw_bad_cast.
	(throw_bad_cast): Use it.
	(throw_bad_typeid): New fn.
	(build_typeid): Throw bad_typeid as needed.
	Use build_call.
	(synthesize_tinfo_fn): Handle functions and arrays before checking
	for cv-quals.

	* Remove .h from standard C++ headers, add new.h, move into inc
	subdirectory.

	* exception*: Remove pointer from object, constructors.  Add
	default exception::what that uses type_info::name.  Add
	__throw_bad_typeid.

	* init.c (build_new): Don't add a cookie to new (void *) T[2].

Mon Sep 23 15:21:53 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Make-lang.in: Building C++ code depends on cc1plus.

Mon Sep 23 12:38:40 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (struct saved_scope): Declare PROCESSING_TEMPLATE_DECL as
	a HOST_WIDE_INT, not a tree.

Mon Sep 23 12:36:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* exception.cc: Don't include <stdlib.h>.

	* Make-lang.in (c++.clean): Remove cplib2.*.

Mon Sep 23 09:42:19 1996  Doug Evans  <dje@canuck.cygnus.com>

	* parse.y (component_decl_1, component_costructor_declarator case):
	Pass attributes/prefix_attributes in tree list.

Mon Sep 23 01:18:50 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tinfo{,2}.cc: #include <stddef.h> instead of <stdlib.h>.

Sun Sep 22 05:31:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (do_identifier): Don't do deferred lookup in a template
	header.

	* typeck2.c (store_init_value): Oops.

	* new.{h,cc}, exception.{h,cc}, typeinfo.h, tinfo{2.cc,.cc,.h}: 
	New files for C++ lang-support library.
	* Make-lang.in (CXX_EXTRA_HEADERS): Define.
	(CXX_LIB2FUNCS): Define.
	And rules for building the C++ lang-support code.
	* config-lang.in (headers): Define.
	(lib2funcs): Define.

Sat Sep 21 19:17:28 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (build_expr_from_tree): If CONSTRUCTOR has a type, call
	digest_init.
	* pt.c (tsubst_copy): Compute type for CONSTRUCTOR.
	* typeck2.c (store_init_value): Check for initializing pmf with { }
	here.
	(process_init_constructor): Not here.

Thu Sep 19 16:41:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (begin_template_parm_list): Increment
	processing_template_decl here.
	(end_template_parm_list): Not here.
	(process_template_parm): No need to add 1 to it now.
	* *.c: Use processing_template_decl instead of current_template_parms
	to check for being in a template.

	* pt.c (uses_template_parms): Handle SCOPE_REF.  Fix CONSTRUCTOR.
	(tsubst_copy): Handle CONSTRUCTOR.
	(instantiate_decl): Set up context properly for variables.
	* decl2.c (build_expr_from_tree): Handle CONSTRUCTOR.
	* class.c (finish_struct): Reverse CLASSTYPE_TAGS.

Wed Sep 18 13:30:20 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (enum tree_node_kind) [GATHER_STATISTICS]: Put the enum back.

Wed Sep 18 04:24:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (make_thunk): Call comdat_linkage before setting the
	TREE_CODE.

	* decl2.c (comdat_linkage): Use make_decl_one_only.
	(import_export_decl): Likewise.
	* decl.c (init_decl_processing): Check supports_one_only instead of
	SUPPORTS_WEAK.

Sat Sep 14 08:34:41 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (grokfield): Tighten checking for access decls.

	* decl.c (make_typename_type): Resolve references to
	current_class_type.  Set CLASSTYPE_GOT_SEMICOLON.
	(lookup_name_real): Types that depend on a template parameter get
	an implicit 'typename' unless they're in the current scope.
	(start_decl_1): We don't care about incomplete types that depend
	on a template parm.
	(grokdeclarator): Resolve 'typename's in the type specifier that
	refer to members of the current scope.

	* call.c (build_over_call): Remove 'inline called before
	definition' diagnostic.
	(build_method_call): Likewise.
	* decl.c (duplicate_decls): Downgrade 'used before declared
	inline' to a warning, only with -Winline.

Fri Sep 13 17:31:40 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Fix include paths, add @DASH_C_FLAG@ to compile.

Wed Sep 11 22:38:13 1996  Gerald Baumgartner  <gb@cs.purdue.edu>

	* call.c (build_method_call): When calling a signature
	default implementation, as in other cases, let instance_ptr simply
	be instance.

Wed Sep 11 22:14:44 1996  Mike Stump  <mrs@cygnus.com>

	* parse.y (simple_stmt): Cleanup and use do_poplevel ().

Wed Sep 11 22:10:48 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Add a pushlevel so that -g
	works on hppa and SPARC.

Wed Sep 11 10:18:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (build_indirect_ref): Catch PTR being an error_mark_node.

Mon Sep  9 19:51:14 1996  Gerald Baumgartner  <gb@cs.purdue.edu>

	* call.c (build_over_call): Check first whether DECL_CONTEXT exists
	before testing whether it's a signature.

Sun Sep  8 16:06:57 1996  Gerald Baumgartner  <gb@cs.purdue.edu>

	* call.c (build_new_method_call): Don't complain about signature
	pointers and references not being an aggr type.
	(build_this): If a signature pointer or reference was passed in,
	just return it.
	(build_new_method_call): If instance is a signature pointer, set
	basetype to the signature type of instance.
	* sig.c (build_signature_method_call): Deleted basetype and
	instance parameters, they can be found as the DECL_CONTEXT of
	function and as the first argument passed in.
	* cp-tree.h: Changed declaration of build_signature_method_call.
	* call.c (build_method_call): Deleted first two arguments in call
	of build_signature_method_call.
	(build_over_call): Added call to build_signature_method_call.

Thu Sep  5 16:51:28 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_c_cast): Don't tack a non_lvalue_expr onto a
	target_expr.

Thu Sep  5 10:05:38 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cvt.c (convert_to_reference): Use %#T, not %#D, for error.

Wed Sep  4 17:16:09 1996  Bob Manson  <manson@charmed.cygnus.com>

	* except.c (expand_start_try_stmts): Move to except.c in the backend.
	(expand_end_try_stmts): Remove.

	* init.c (perform_member_init): Use add_partial_entry () instead
	of directly manipulating lists.
	(emit_base_init): Ditto.

Wed Sep  4 12:14:36 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_exception_blocks): Always make sure USE and
	CLOBBER insns that came at the end still do, the backend relies
	upon this.

Wed Sep  4 07:44:48 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): We can only use a TARGET_EXPR of the
	right type.

Tue Sep  3 19:26:05 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (convert_to_reference): Revert last change, don't complain
	about temp without target decl.

Tue Sep  3 10:22:56 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Don't core dump when void() is given.

Tue Sep  3 02:38:56 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (copy_args_p): Don't crash.

Fri Aug 30 14:26:57 1996  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): And support template args inside the exception
	specification.

	* pt.c (tsubst): Add support for exception specifications in
	template functions.

Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.def (DECL_STMT): Eliminate the throw spec field, only 3
	fields now.
	* cp-tree.h (start_decl): Eliminate the throw spec parameter.
	(start_function): Likewise.
	(start_method): Likewise.
	(grokfield): Likewise.
	(make_call_declarator): Add throw spec parameter.
	(set_quals_and_spec): Add routine.
	* lex.c (set_quals_and_spec): Likewise.
	* decl.h (grokdeclarator): Eliminate the throw spec parameter.
	* decl.c (shadow_tag): Eliminate the throw spec parameter to
	grokdeclarator.
	(groktypename): Likewise.
	(start_decl): Eliminate the throw spec parameter.  Eliminate the
	throw spec parameter to grokdeclarator.  Eliminate the throw spec
	field in DECL_STMT.
	(cp_finish_decl): Eliminate the throw spec field in DECL_STMT.
	(grokfndecl): Remove useless set of raises.
	(grokdeclarator): Eliminate the throw spec parameter.  Eliminate
	the throw spec parameter to start_decl.  Pull the throw spec out
	of the call declarator.
	(grokparms): Eliminate the throw spec parameter to grokdeclarator.
	(start_function): Eliminate the throw spec parameter.  Eliminate
	the throw spec parameter to grokdeclarator.
	(start_method): Likewise.
	* decl2.c (grokfield): Likewise.
	(grokbitfield): Eliminate the throw spec parameter to grokdeclarator.
	(grokoptypename): Likewise.
	(finish_file): Eliminate the throw spec parameter to
	start_function.  Add throw spec to make_call_declarator.
	* except.c (init_exception_processing): Add throw spec to
	make_call_declarator.  Eliminate the throw spec parameter to
	start_decl.
	(expand_start_catch_block): Eliminate the throw spec parameter to
	grokdeclarator.
	(expand_builtin_throw): Add throw spec to make_call_declarator.
	Eliminate the throw spec parameter to start_function.
	(start_anon_func): Likewise.
	* lex.c (make_call_declarator): Add throw spec parameter.
	(set_quals_and_spec): New routine.
	(cons_up_default_function): Add throw spec to make_call_declarator.
	Eliminate the throw spec parameter to grokfield.
	* method.c (synthesize_method): Eliminate the throw spec parameter
	to start_function.
	* pt.c (process_template_parm): Eliminate the throw spec parameter
	to grokdeclarator.
	(tsubst): Add throw spec to make_call_declarator.
	(tsubst_expr): Eliminate the throw spec parameter to start_decl.
	(do_function_instantiation): Eliminate the throw spec parameter to
	grokdeclarator.  Eliminate the throw spec parameter to
	start_function.
	* rtti.c (synthesize_tinfo_fn): Eliminate the throw spec parameter
	to start_function.
	* parse.y (datadef): Remove non-winning optimization.
	(decl): Likewise.
	(fndef): Remove ambiguous error productions uncovered by grammer
	fixing.
	(constructor_declarator): Add exception_specification_opt here.
	(component_constructor_declarator): Likewise.
	(direct_after_type_declarator): Likewise.
	(complex_direct_notype_declarator): Likewise.
	(direct_abstract_declarator): Likewise.
	(fn.def1): Remove exception_specification_opt.
	(fn.def2): Likewise.
	(condition): Likewise.
	(initdcl0): Likewise.
	(initdcl): Likewise.
	(notype_initdcl0): Likewise.
	(nomods_initdcl0): Likewise.
	(component_decl_1): Likewise.
	(component_declarator): Likewise.
	(after_type_component_declarator0): Likewise.
	(after_type_component_declarator): Likewise.
	(notype_component_declarator): Likewise.

Wed Aug 28 01:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): Also use an INIT_EXPR when
	initializing anything from an rvalue.

	* call.c (build_over_call): Call stabilize_reference when building
	an INIT_EXPR instead of calling the copy ctor.

	* call.c (joust): Extend the previous change to all comparisons.

	* decl2.c, method.c, lex.c: Use MAKE_DECL_ONE_ONLY and 
	NO_LINKAGE_HEURISTICS.

	* decl2.c (finish_file): Emit any statics that weren't already.

	* typeck.c (build_static_cast): Implement.
	* tree.c (build_cplus_new): Handle getting a TARGET_EXPR.
	* decl.c (grokparms): Use can_convert_arg instead of
	implicit_conversion directly.
	(copy_args_p): New fn.
	* cvt.c (convert_to_reference): Don't complain about temp with
	static_cast.
	(build_up_reference): Handle TARGET_EXPRs.
	* call.c (build_over_call): Elide unnecessary temps.
	(can_convert*): Use new overloading code.

Tue Aug 27 13:12:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c: Move TYPE_PTR*_MACROS ...
	* cp-tree.h: To here.
	* typeck.c (build_reinterpret_cast): Implement.

	* call.c (add_builtin_candidate): Use TYPE_PTROB_P instead of
	ptr_complete_ob.
	(joust): If we're comparing a function to a builtin and the worst
	conversion for the builtin is worse than the worst conversion for the
	function, take the function.

	* typeck.c (build_const_cast): Implement.
	(comp_ptr_ttypes_const): Like comp_ptr_ttypes, for const_cast.
	(comp_ptr_ttypes_reinterpret): Like cpt, for reinterpret_cast.

Tue Aug 27 13:14:58 1996  Bob Manson  <manson@charmed.cygnus.com>

	* rtti.c (build_dynamic_cast): Don't try to dereference exprtype
	too early. Make sure we explode if exprtype turns out to be a
	NULL_TREE when it shouldn't be.

Tue Aug 27 10:56:21 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h: New routine make_call_declarator.
	* lex.c (make_call_declarator): Define it.
	* except.c (init_exception_processing): Use it.
	(expand_builtin_throw): Likewise.
	(start_anon_func): Likewise.
	* decl2.c (finish_file): Likewise.
	* lex.c (cons_up_default_function): Likewise.
	* parse.y: Likewise.
	* pt.c (tsubst): Likewise.
	
Mon Aug 26 17:40:03 1996  Mike Stump  <mrs@cygnus.com>

	* decl2.c (groktypefield): Remove unused code.

Mon Aug 26 17:00:33 1996  Mike Stump  <mrs@cygnus.com>

	* gxx.gperf: Change TYPE_QUAL into CV_QUALIFIER.
	* parse.y: Likewise.  Change maybe_type_qual into maybe_cv_qualifier.
	Change type_quals into cv_qualifiers.  Change nonempty_type_quals into
	nonempty_cv_qualifiers.
	* hash.h: Rebuild.
	
	* lex.c (make_pointer_declarator): Change type_quals into
	cv_qualifiers.
	(make_reference_declarator): Likewise.
	
Thu Aug 22 01:09:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (start_function): Only check interface_* for templates
	with flag_alt_external_templates.

	* call.c (build_new_op): Check for comparison of different enum types.
	(build_over_call): Fix arg # output.

	* typeck.c (build_component_ref): Handle pre-found TYPE_DECL.

Wed Aug 21 00:13:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_new_op): Check for erroneous args.

	* call.c (build_new_method_call): Add missing args to cp_error.

	* tree.c (error_type): Dont print reference-to-array.

	* typeck.c (convert_for_assignment): Don't say contravariance for
	removing const.

Tue Aug 20 13:23:00 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_over_call): Diagnose bad convs for `this'.

	* lex.c (cons_up_default_function): Set DECL_ARTIFICIAL
	on _ctor_arg.

	* call.c (convert_like): Handle bad convs.
	(build_over_call): Handle bad convs better.

	* decl2.c: -fansi-overloading is now the default.

	* call.c (build_new_method_call): Check for erroneous args.

	* pt.c (instantiate_class_template): Propagate
	TYPE_USES_MULTIPLE_INHERITANCE.

Tue Aug 20 13:09:57 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (enforce_access): Add static to routine.

Sun Aug 18 14:35:54 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_user_type_conversion_1): Fix bad handling.
	(compare_ics): Likewise.

Sat Aug 17 21:54:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (standard_conversion): Oops.

Sat Aug 17 16:28:11 1996  Geoffrey Noer  <noer@cygnus.com>

	* g++.c: Update test for win32 (&& ! cygwin32).

Sat Aug 17 03:45:31 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (comp_ptr_ttypes_real): Handle OFFSET_TYPEs properly.
	(ptr_reasonably_similar): New fn.
	* call.c (BAD_RANK): New rank.
	(ICS_BAD_FLAG): New macro.
	(standard_conversion): Handle almost-right pointer conversions.
	(reference_binding): Handle bad rvalue bindings.
	(add_*_candidate): Stuff.
	(build_over_call): Pass bad conversions to convert_for_initialization.
	(compare_ics): Handle bad convs.
	(joust): Likewise.

Fri Aug 16 15:02:19 1996  Bob Manson  <manson@charmed.cygnus.com>

	* init.c (expand_vec_init): Use ptrdiff_type_node instead of
	integer_type_node when computing pointer offsets.

Fri Aug 16 01:28:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (lvalue_type): New fn.
	(error_type): New fn.
	* call.c (op_error): Use error_type.
	(add_conv_candidate): Use lvalue_type.
	(add_builtin_candidates): Likewise.
	* error.c (args_as_string): Use error_type.

Thu Aug 15 17:27:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): Evaluate DECL_INITIAL of a VAR_DECL here.
	(tsubst): Not here.

	* decl.c (init_decl_processing): With -ansi, __null's type is the
	signed integral type with the same number of bits as a pointer.
	Introduce a new variable null_node for it.
	* cp-tree.h: Adjust.
	* call.c (null_ptr_cst_p): Adjust.

Thu Aug 15 17:09:54 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (do_unwind): Mark %i7 as used on the SPARC so we can
	optimize.

Thu Aug 15 01:36:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (import_export_decl): Ignore #pragma interface for tinfo
	fns of classes without virtual functions.

	* call.c (add_function_candidate): Handle `this' specially.
	(compare_ics): Likewise.

Tue Aug 13 12:16:10 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_conditional_expr): Fix handling of __null.

	* decl2.c (comdat_linkage): New fn.
	(import_export_vtable): Use it.
	(import_export_decl): Use it.
	* method.c (make_thunk): Use it.

Mon Aug 12 00:09:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (end_template_decl): If we don't actually have parms, return.
	* parse.y (template_header): Accept 'template <>'.

	* errfn.c: Allow 5 args.

Sun Aug 11 15:20:58 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (make_temp_vec): New fn.
	* pt.c (push_template_decl): Handle partial specs.
	(instantiate_class_template): Likewise.
	(more_specialized): Use get_bindings.
	(more_specialized_class): New fn.
	(get_class_bindings): New fn.
	(most_specialized_class): New fn.
	(do_function_instantiation): List candidates for ambiguous case.
	* decl.c (duplicate_decls): Lose reference to DECL_TEMPLATE_MEMBERS.
	(shadow_tag): Call push_template_decl for partial specializations.
	* parse.y: Likewise.
	* cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Replaces
	DECL_TEMPLATE_MEMBERS.
	* call.c (print_z_candidates): Reduce duplication.

Fri Aug  9 14:36:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (lang_decode_option): Allow -fansi-overloading.

Thu Aug  8 17:04:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (get_bindings): New fn.
	(most_specialized): Likewise.
	(do_function_instantiation): Use them.
	(add_maybe_template): New fn.
	* cp-tree.h (DECL_MAYBE_TEMPLATE): New macro.
	* call.c (build_new_op): Handle guiding decls.
	(build_new_function_call): Likewise.
	* decl2.c (finish_file): Likewise.

	* decl2.c (mark_used): Do synthesis here.
	* call.c (build_method_call): Not here.
	(build_over_call): Or here.
	* typeck.c (build_function_call_real): Or here.
	* tree.c (bot_manip): Call mark_used on functions used in default
	args.

Thu Aug  8 17:48:16 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* decl2.c (import_export_vtable): Delete code that disabled vtable
	heuristic on systems with ASM_OUTPUT_EXTERNAL.

Wed Aug  7 12:44:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_x_function_call): Handle static call context
	better.

	* decl.c (finish_function): Set the DECL_CONTEXT of the result to
	the function, not its outer block.

	* call.c (build_field_call): Pass fields on to build_opfncall
	regardless of TYPE_OVERLOADS_CALL_EXPR.
	(build_method_call): Pass on to build_new_method_call sooner.

	* typeck.c (build_ptrmemfunc): Just return what instantiate_type
	gives us.
	* class.c (instantiate_type): Don't put a POINTER_TYPE to
	METHOD_TYPE on an expression.  Also make a copy of rhs instead of
	modifying it.

Tue Aug  6 12:58:46 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (compare_ics): Handle qual_conv after lvalue_conv.
	(add_builtin_candidate): Don't take enums for ++.
	(build_new_method_call): Handle non-aggregates and field calls.
	Move new overloading code from...
	* cvt.c: Here.

	* decl.c (grokparms): Don't check default args in templates.

Mon Aug  5 17:17:06 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_new_op): Fix args to build_unary_op.
	(add_builtin_candidates): Don't call type_promotes_to on float.

	* decl.c (grokparms): Check the type of the default arg.

	* cvt.c (build_new_op): Pass non-overloaded cases on rather than
	returning NULL_TREE.

	* typeck.c (build_x_binary_op): Avoid doing extra work.
	(build_x_unary_op): Likewise.
	(build_x_conditional_expr): Likewise.
	* cvt.c (build_over_call): Return.
	(add_builtin_candidate): Fix MEMBER_REF.
	(build_new_op): Likewise.

Mon Aug  5 17:07:47 1996  Mike Stump  <mrs@cygnus.com>

	* method.c (build_overload_name): Put bug fix into code but leave
	disabled for now so we can be bug compatible with older releases
	that do repeats incorrectly.  In the future, we can enable it.

Mon Aug  5 13:46:28 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (convert_like): Don't call build_cplus_new twice.

	* call.c, cp-tree.h, cvt.c, decl2.c, init.c, method.c, pt.c, typeck.c:
	Control new overloading code with -fansi-overloading.

Sun Aug  4 15:29:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_over_call): Call build_cplus_new.
	* call.c (build_method_call): Likewise.
	* typeck.c (build_function_call_real): Likewise.
	(build_conditional_expr): If both operands are TARGET_EXPRs, wrap
	the COND_EXPR in a TARGET_EXPR so they use the same slot.

	* cvt.c (build_up_reference): Propagate INDIRECT_BIND to 
	recursive calls.
	* typeck.c (complete_type): Propagate
	TYPE_NEEDS_{CONSTRUCTING,DESTRUCTOR}.

Sat Aug  3 14:05:07 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (joust): More ?: kludging.  Sigh.
	(build_over_call): Don't try to synthesize global fns.

	* search.c (lookup_conversions): Use binfo marking.

Sat Aug  3 12:33:42 1996  Bob Manson  <manson@charmed.cygnus.com>

	* search.c (build_mi_matrix): Use the correct value of cid
	when determining the new mi_size.

Sat Aug  3 01:27:41 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (add_builtin_candidates): Do consider type conversion ops
	for the first parms of += et al.
	(strip_top_quals): New fn.
	(reference_binding): Use it instead of TYPE_MAIN_VARIANT.
	(implicit_conversion): Likewise.
	(add_builtin_candidates): Be careful about arrays.
	(build_new_method_call): Handle vtable optimization.

Fri Aug  2 01:26:59 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h (LOOKUP_NO_TEMP_BIND): New flag.
	* cvt.c (reference_binding): Use it.
	(implicit_conversion): Use it.
	(add_builtin_candidate, COND_EXPR): Use it.

	* cvt.c (build_new_function_call): Check for error args.

	* typeck.c (comptypes): Just check DERIVED_FROM_P, not UNIQUELY.

	* gxx.gperf: Add __null.
	* hash.h: Regenerate.
	* lex.h: Add RID_NULL.
	* lex.c (init_lex): Create null_pointer_node here, stick it in
	RID_NULL.
	* decl.c (init_decl_processing): Still set its type here.
	* cvt.c (cp_convert_to_pointer): Don't produce null_pointer_node.
	(convert_to_pointer_force): Likewise.
	(null_ptr_cst_p): Check for null_pointer_node; only accept (void*)0
	if (! pedantic).
	* call.c (convert_harshness): Use null_ptr_cst_p.
	* typeck.c (convert_for_assignment): Likewise.  Don't produce
	null_pointer_node.

	* error.c (args_as_string): Handle lists of actual args, too.
	* cvt.c (null_ptr_cst): Support (void*)0 for now.
	(build_user_type_conversion_1): Improve diagnostics.
	(build_new_function_call): Likewise.
	(build_object_call): Likewise.
	(build_new_method_call): Likewise.  Move call before def diagnostic...
	(build_over_call): Here.

	* cvt.c (build_new_method_call): Don't complain about no match if
	LOOKUP_SPECULATIVELY.
	(build_over_call): Fix 'this' for virtual fn.
	(build_new_method_call): Add diagnostic.

Thu Aug  1 16:45:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (add_function_candidate): Expect 'this' and 'in_chrg' for
	constructors to be passed in.
	(build_over_call): Likewise.
	(build_user_type_conversion_1): Pass them in.
	(convert_like): Likewise.
	(build_object_call): Handle overloaded conversions.
	(build_over_call): Pass the right args to build_vfn_ref.
	(standard_conversion): Fix pmf convs.
	(joust): Handle comparing statics and non-statics.
	(build_new_method_call): New fn.
	* call.c (build_method_call): Call it if NEW_OVER.

Thu Aug  1 16:06:14 1996  Mike Stump  <mrs@cygnus.com>

	* lex.c (do_identifier): Don't use %O on IDENTIFIER_OPNAME_Ps, use
	%D instead.

Thu Aug  1 15:24:02 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Use maybe_build_cleanup_and_delete
	instead of just maybe_build_cleanup so that we deallocate the
	thrown object.

Thu Aug  1 15:18:00 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (finish_prevtable_vardecl): Make non-static for pt.c's use.
	* cp-tree.h (finish_prevtable_vardecl): Add decl.

Thu Aug  1 11:53:51 1996  Bob Manson  <manson@charmed.cygnus.com>

	* pt.c (instantiate_class_template): Call complete_type. Also, if
	we're at the end of the file and we just instantiated a template
	class with a vtable, call finish_prevtable_vardecl.

	* error.c (dump_decl): Don't explode (or explode more gracefully
	as appropriate) if the object being dumped has a null type.
	(dump_expr): Likewise.

	* search.c (build_mi_matrix): Ensure that mi_size is large enough,
	by counting the number of nodes that we'll need before allocating
	the array.
	(lookup_fnfields): Fix comment.
	(breadth_first_search): Fix comment.

Wed Jul 31 09:57:05 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Propagate TYPE_PACKED and
	TYPE_ALIGN.
	* class.c (finish_struct): Call cplus_decl_attributes here.
	(finish_struct_1): Not here.
	* cp-tree.h: Adjust.

	* pt.c (type_unification): New parameter STRICT.
	(unify): If STRICT, don't allow cv addition or base deduction.
	* call.c, class.c, cvt.c, cp-tree.h: Adjust.

Tue Jul 30 13:06:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* search.c (get_template_base{_recursive}): New fns.
	* pt.c (more_specialized): New fn.
	(do_function_instantiation): Use it.
	(unify): Handle base deduction.
	* cvt.c (joust): Use more_specialized.
	Don't arbitrarily choose between non-builtin candidates.
	(build_over_call): Call require_complete_type.

	* decl.c (start_function): Statics are static even in a #pragma
	interface file.

	* decl2.c (import_export_vtable): Disable vtable heuristic on
	systems with ASM_OUTPUT_EXTERNAL.

	* cvt.c (compare_ics): Fix comparison of PMEM_CONV and BASE_CONV.
	(standard_conversion): No std conv to enum type.

	* cvt.c (standard_conversion): Fix order of args to DERIVED_FROM_P
	for ptm's.

	* cvt.c (reference_binding): Bind directly to a base subobject of
	a class rvalue.

	* cvt.c (build_new_op): Enforce access control.

Tue Jul 30 09:22:53 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck2.c (process_init_constructor): When scanning the
	union for a named field, skip things that aren't FIELD_DECLs.

	* method.c (synthesize_method): Don't scan fndecl's rtl if
	we're at the end of the file; just assume the function can't
	be inlined.

Mon Jul 29 15:48:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_builtin_candidate): Stick a dummy conversion in if
	it failed.

	* cvt.c (build_user_type_conversion_1): Handle overloaded
	conversion ops.

	* cvt.c (add_builtin_candidates): Don't consider type conversion
	operators for the first parameter of operator=.

Mon Jul 29 15:33:55 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (complete_type): Only call layout_type if we're not
	expanding a template.

Mon Jul 29 14:40:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (compare_ics): Oops.

	* cvt.c (op_error): Oops.

	* cp-tree.def: Add RVALUE_CONV, rename EXACT_CONV to IDENTITY_CONV.
	* cvt.c: Add IDENTITY_RANK before others.  Use real_lvalue_p.
	(build_conv): Use them.
	(implicit_conversion): Use them.
	(convert_like): Handle them.
	(build_new_op): Handle builtin COND_EXPR again.
	(add_builtin_candidates): Strip cv-quals.  Fix oops.  Include enums
	in lists of types for COND_EXPR.
	(add_builtin_candidate): Add enum candidates for COND_EXPR.

Mon Jul 29 12:05:40 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (build_modify_expr): Always attempt to build a call to
	the assignment operator, even if we're using a default one.
	(convert_for_initialization): Call complete_type.

Mon Jul 29 11:25:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (reference_binding): A REF_BIND gets the reference type.
	(implicit_conversion): Likewise.
	(convert_like): Likewise.
	(compare_ics): Likewise.
	(compare_qual): Likewise.
	(print_z_candidates): Handle no candidates.
	(build_new_op): Don't handle builtin COND_EXPR for now.

Sat Jul 27 11:27:47 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* cvt.c (build_builtin_candidate): Init local var in an ANSI way.

Fri Jul 26 01:07:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (joust): If the candidates are the same, arbitrarily pick one.

	* cvt.c (build_builtin_candidate): Oops.
	(build_new_op): Oops.

	* method.c (build_opfncall): Pass COND_EXPR on.
	* cvt.c (build_builtin_candidate): Reorganize, support COND_EXPR.
	(add_builtin_candidate{,s}): Likewise.
	(add_builtin_candidates): Likewise.
	(print_z_candidates, op_error, build_new_op): Likewise.
	(type_decays_to): New fn.
	* lex.c (init_lex): Just say ?: for COND_EXPR.

Thu Jul 25 09:33:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (complete_type): Call layout_type rather than building
	a new array type.

	* cvt.c (add_builtin_candidate): Pointer arithmetic candidates
	only use ptrdiff_t.

Wed Jul 24 12:45:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c: Always compile the new overloading code (but don't use it).
	(implicit_conversion): Add a BASE_CONV when converting to
	the same class type.
	(convert_like): Handle BASE_CONV.

Tue Jul 23 12:46:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_new_op): Support {MAX,MIN}_EXPR.
	(add_builtin_candidate): Likewise.

	NEW_OVER changes:
	* typeck.c (build_x_function_call): Try an operator function
	whenever we call an object of class type.
	* method.c (build_opfncall): Pass CALL_EXPRs through.
	* cvt.c (implicit_conversion): Do const-ref case first.
	(add_conv_candidate, build_object_call, op_error): New fns.
	(ptr_complete_ob, TYPE_PTROB_P): void is not an object type.
	({add,build}_builtin_candidate{,s}, print_z_candidates): Display 
	builtin candidates.
	(build_new_op): Handle CALL_EXPR.  Don't try to decay void.
	Fall back on preincrement handling.  Use op_error.  
	Handle warn_synth.
	(convert_like): Pass INDIRECT_BIND.  Don't try to do anything with 
	an error_mark_node.
	(build_over_call): Handle PROMOTE_PROTOTYPES and ellipsis promotions
	properly.

Mon Jul 22 16:21:55 1996  Bob Manson  <manson@charmed.cygnus.com>

	* pt.c (tsubst_expr): Handle CONTINUE_STMT.

Mon Jul 22 15:38:58 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_component_ref_1): Use build_component_ref
	instead of open coding it here.

Mon Jul 22 12:18:54 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* g++.c (main): Don't link with -lg++.

	NEW_OVER changes:
	* cvt.c (convert_to_reference): Don't use convert_from_refeence on
	result of build_type_conversion.
	(cp_convert): Only call build_method_call for ctors if
	build_type_conversion failed.
	(ptr_complete_ob): New function.
	(TYPE_PTR{,OB,MEM}_P): New macros.
	({add,build}_builtin_candidate{,s}): New functions.
	(print_z_candidates): Handle builtins.
	(build_user_type_conversion_1): Don't use conversion fns for 
	converting to a base type.
	(build_user_type_conversion_1): Set ICS_USER_FLAG on AMBIG_CONVs.
	(build_user_type_conversion): Use convert_from_reference.
	(build_new_op): New function.
	(build_over_call): Fix handling of methods.
	(compare_ics): Handle AMBIG_CONV properly.
	* typeck2.c: Increment abort count.
	* method.c (build_opfncall): Forward most requests to build_new_op.
	* cp-tree.h (IS_OVERLOAD_TYPE): Tweak.

Fri Jul 19 17:59:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* error.c (dump_expr, case CONSTRUCTOR, case CAST_EXPR): Take out
	invalid second argument to dump_expr_list.

Fri Jul 19 14:04:05 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (lookup_name_real): Make sure we do obj->X::i correctly.

Thu Jul 18 14:48:23 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl2.c (import_export_vtable): ASM_OUTPUT_EXTERNAL, not
	ASSEMBLE_EXTERNAL.

Mon Jul 15 17:48:43 1996  Mike Stump  <mrs@cygnus.com>

	* typeck2.c (process_init_constructor): New pedwarn for using { }
	to initialize a pointer to member function.
	* typeck.c (build_ptrmemfunc1): Avoid use of digest_init so that
	we can avoid the new error.

Mon Jul 15 15:42:03 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_ptrmemfunc1): New function to hide details of
	pointer to member functions better.

Mon Jul 15 14:23:02 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (resolve_offset_ref): Resolve OFFSET_REFs that are
	methods into the actual method, as we know the implied object is
	not used.

Mon Jul 15 13:08:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (maybecomma_warn): Only emit the pedwarn if we're not
	inside a system header.

Fri Jul 12 16:30:05 1996  Bob Manson  <manson@charmed.cygnus.com>

	* call.c (build_method_call): Call complete_type on the
	instance type.

Thu Jul 11 17:16:40 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_component_ref): Always build up an OFFSET_REF
	for obj_ptr->func so that we can know which object to use in a
	method call.

Wed Jul 10 19:36:37 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_ptrmemfunc): Remove sorry, now we can cast
	around things.  Also improve maintainability.

Wed Jul 10 18:20:11 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl.c (grokdeclarator): Check for overflow when evaluating an
	array dimension.

Wed Jul 10 17:26:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert): Don't check for ambiguity with constructor
	if NEW_OVER.

	* typeck.c (build_x_function_call): Pass function overload
	questions to new overloading code if NEW_OVER.
	* init.c (expand_aggr_init_1): Only check for type conversion ops
	if we're doing copy-initialization (i.e. LOOKUP_ONLYCONVERTING).
	Don't check for ambiguity with constructor if NEW_OVER.
	* cvt.c (convert_to_reference): Dereference the result of a type
	conversion operator.
	(build_conv): Propagate ICS_USER_FLAG.
	(implicit_conversion): Call instantiate_type.
	Pass LOOKUP_ONLYCONVERTING instead of LOOKUP_NORMAL.
	(add_function_candidate): Fix cv-quals on argtype.
	(print_z_candidates): New function.
	(build_new_function_call): Call it.
	(build_user_type_conversion_1): If LOOKUP_ONLYCONVERTING, don't
	consider non-converting constructors.
	Call print_z_candidates.
	Return an AMBIG_CONV for an ambiguous conversion.
	(build_user_type_conversion): Handle AMBIG_CONV.
	(convert_like): Fix test for building TARGET_EXPR.
	Call instantiate_type.
	Handle AMBIG_CONV and LVALUE_CONV.
	(build_over_call): Handle 0 args and ellipsis.
	* cp-tree.def: Add AMBIG_CONV.

Tue Jul  9 17:48:48 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (lookup_name_real): If we find mem in obj when parsing
	`obj->mem', make sure we return the right value.

Tue Jul  9 16:11:28 1996  Bob Manson  <manson@charmed.cygnus.com>

	* search.c (get_base_distance): Call complete_type.

Tue Jul  9 12:46:34 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (store_bindings): Make static.

Mon Jul  8 16:42:31 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (expand_aggr_init_1): Don't check type conversions if
	NEW_OVER.

	* cvt.c (z_candidate): Put back template field.
	(add_function_candidate): Set it.
	(add_template_candidate): Likewise.
	(joust): Use it.
	(compare_qual): Handle references and pointers to members.
	(compare_ics): Handle reference bindings.

	* decl.c (duplicate_decls): Propagate DECL_ONE_ONLY.

Mon Jul  8 16:18:56 1996  Bob Manson  <manson@charmed.cygnus.com>

	* call.c (compute_conversion_costs): Call complete_type.

	* tree.c (vec_binfo_member): Use comptypes instead of comparing
	pointers, so we can handle template parameters.

Fri Jul  5 16:51:53 1996  Bob Manson  <manson@charmed.cygnus.com>

	* cvt.c (cp_convert_to_pointer): We have to call complete_type
	here; let's make it explicit instead of a side effect of an
	error check.

Wed Jul  3 16:29:51 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (z_candidate): Remove template field.
	(reference_binding): Handle binding to temporary.
	(implicit_conversion): Likewise.
	(add_function_candidate): Handle artificial constructor parms.
	Handle functions with too few parms.
	(add_template_candidate): New function.
	(build_user_type_conversion_1): Handle constructors.
	(convert_like): Likewise.
	(build_over_call): Likewise.
	(build_new_function_call): Support templates.
	(compare_ics): Fix reference, inheritance handling.

Mon Jul  1 22:58:18 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl.c: Add signed_size_zero_node.
	(init_decl_processing): Build it.
	* class.c (prepare_fresh_vtable): Use it instead of size_zero_node
	when we're trying to make a negative delta.

Mon Jul  1 17:56:19 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Stop doing this damn index==strchr variable name confusion.
	* class.c (add_virtual_function): Change local var INDEX to be
	named IDX.
	(add_method): Likewise.
	* lex.c (print_parse_statistics): Likewise.
	* search.c (make_memoized_table_entry): Likewise.
	(lookup_fnfields_here): Likewise.
	(lookup_field): Likewise.
	(lookup_fnfields): Likewise.
	(get_baselinks): Likewise.
	* sig.c (build_signature_table_constructor): Likewise.
	(build_signature_method_call): Likewise.
	* typeck.c (build_x_array_ref): Change INDEX parm to be named IDX.
	(get_member_function_from_ptrfunc): Likewise.
	(build_ptrmemfunc): Change local var INDEX to be IDX.
	(c_expand_start_case): Likewise.

Sat Jun 29 14:05:46 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert_to_pointer): Move user-defined type conversion
	handling to before extraction of TYPE_PTRMEMFUNC_FN_TYPE.
	(convert_to_reference): Use build_type_conversion to convert to
	the reference type directly.
	(standard_conversion): Fix void* case, non-conversions.
	(reference_binding): Fix expr == 0 case, non-conversions.
	(convert_like): Support REF_BIND.
	(compare_qual): Split out from compare_ics.
	(compare_ics): Use it, handle icses with only a qual_conv.

	* init.c (expand_vec_init): Don't crash if decl is NULL.

Fri Jun 28 11:52:51 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: New file, configury for Mac MPW.
	* mpw-make.sed: New file, makefile editing for MPW.

Thu Jun 27 15:18:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Call repo_template_used.

	* search.c (lookup_conversions): Only lookup conversions in
	complete types.

Thu Jun 27 12:59:53 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.def: Renamed from tree.def, to avoid confusion with
	gcc's tree.def.
	* cp-tree.h, lex.c: Include cp-tree.def.
	* Makefile.in (CXX_TREE_H): Reference cp-tree.def.

Wed Jun 26 18:29:47 1996  Bob Manson  <manson@charmed.cygnus.com>

	* init.c (build_vec_delete_1): Call complete_type.

Mon Jun 24 17:17:32 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (start_anon_func): Make sure anonymous functions are
	never external.

Fri Jun 21 15:10:58 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (finish_function): If function_depth > 1, set nested.

	* decl2.c (grokbitfield): Revert Bob's change.
	* class.c (finish_struct_1): Fix handling of named bitfield widths.

Thu Jun 20 23:35:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (add_pending_template): Handle types.
	(lookup_template_class): With -fexternal-templates, just add the class
	to pending_templates instead of instantiating it now.
	* decl2.c (finish_file): Handle types in pending_templates.

Thu Jun 20 14:08:40 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl2.c (grokbitfield): Handle constant decls appropriately.
	Give an appropriate error message now instead of spewing core
	later.

Thu Jun 20 13:01:51 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c: Don't turn on thunks by default for now.

Wed Jun 19 11:37:04 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (complete_type): Handle error_mark_node.
	(common_type, OFFSET_TYPE): Handle template_type_parms.

Tue Jun 18 10:02:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): If at_eof, call import_export_decl
	regardless of DECL_INLINE.

	* typeck.c (mark_addressable): Set TREE_ADDRESSABLE on CONSTRUCTORs.

	* class.c (finish_struct_bits): Copy TYPE_SIZE.

	* rtti.c (build_dynamic_cast): Support templates.
	* tree.def: Support DYNAMIC_CAST_EXPR.
	* pt.c (tsubst_copy): Likewise.
	* decl2.c (build_expr_from_tree): Likewise.

Mon Jun 17 15:23:36 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_static_cast): Support templates.
	(build_const_cast): Likewise.
	* tree.def: Support CONST/STATIC_CAST_EXPR.
	* pt.c (tsubst_copy): Likewise.
	* decl2.c (build_expr_from_tree): Likewise.

Sun Jun 16 12:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Don't trust
	TREE_SYMBOL_REFERENCED for vtables of local classes.

Fri Jun 14 18:13:36 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst_copy): Handle operator T.

Wed Jun 12 17:52:40 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_delete): Move creation of PARMS inside test of
	TYPE_HAS_DESTRUCTOR, since it's never used outside of that block.

Tue Jun 11 15:09:18 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (build_conditional_expr): Don't assume that
	the arguments to ?: are always pointers or records.

Tue Jun 11 13:56:23 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (import_export_decl): Still emit static/weak/comdat
	copies of inline template functions with -fno-implicit-templates.

Tue Jun 11 11:42:13 1996  Bob Manson  <manson@charmed.cygnus.com>

	* init.c (build_delete): Determine the complete basetype
	path to the destructor we're calling.

Fri Jun  7 15:30:10 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl.c (build_enumerator): Always copy the INTEGER_CST used to
	initialize the enum, because we really and truly don't know where
	it came from.
	(start_enum): Don't copy integer_zero_node because
	build_enumerator will do it.

Fri Jun  7 11:11:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (finish_function): Do access control on base destructors.

	* pt.c (tsubst, case FUNCTION_DECL): Set up
	IDENTIFIER_GLOBAL_VALUE for member functions so pushdecl doesn't
	hose us.

Fri Jun  7 10:37:33 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): If we have already extended the
	lifetime of the temporary, don't try it again.
	* typeck.c (c_expand_return): Don't try and convert the return
	value twice when we want a reference, once is enough.
	
Tue Jun  4 15:41:45 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst_expr, case DECL_STMT): Don't pass
	LOOKUP_ONLYCONVERTING at all for now.

	* search.c (add_conversions): Put the conversion function in
	TREE_VALUE, the basetype in TREE_PURPOSE.
	* cvt.c (build_type_conversion): Adjust.
	* cvt.c (build_expr_type_conversion): Adjust.
	* call.c (user_harshness): Adjust.

Mon Jun  3 15:30:52 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (emit_thunk): Pretend this is a FUNCTION_DECL for the
	backend's benefit.

Mon Jun 10 18:58:19 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Add a dummy region, if we
	get an error, so that we can avoid core dumping later.

Fri May 31 14:56:13 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (OFFSET_REF): Remove.
	* tree.def (CP_OFFSET_REF): Rename to OFFSET_REF.
	* expr.c (cplus_expand_expr): Cleanup callers of expand_expr.
	* init.c (expand_aggr_init_1): Likewise.
	(build_new): Likewise.
	* typeck.c (expand_target_expr): Likewise.

Fri May 31 14:22:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_modify_expr): Don't use TREE_VALUE on a
	TARGET_EXPR.

Wed May 29 17:04:33 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Redo how and when temporaries are
	created.
	* decl.c (grok_reference_init): Don't try and be smart about
	running cleanups.

Wed May 29 16:02:08 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Add NULL_TREE to all calls to build
	(TARGET_EXPR...), now that it has 4 arguments.
	* tree.c (build_cplus_new): Likewise.

Thu May 23 16:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* error.c (dump_expr, case CAST_EXPR): Handle T() properly.

	* pt.c (instantiate_decl): Don't call push/pop_cp_function_context.
	* decl.c (struct saved_scope): Remove named_labels,
	{base,member}_init_list.
	(maybe_push_to_top_level): Don't set them.  Call
	push_cp_function_context if appropriate.
	(pop_from_top_level): Likewise.

	* method.c (do_build_assign_ref): Remove obsolete check of
	TYPE_HAS_ASSIGN_REF (basetype).

	* decl.c (grokfndecl): Diagnose user definition of
	implicitly-declared methods.

Thu May 23 12:13:08 1996  Bob Manson  <manson@charmed.cygnus.com>

	* method.c (do_build_copy_constructor): Add code to give
	meaningful error messages instead of crashing.
	(do_build_assign_ref): Don't synthesize assignment operators for
	classes containing reference or const members.

	* class.c (struct base_info): Remove cant_synth_copy_ctor
	and cant_synth_asn_ref.
	(finish_base_struct): Remove the code that tries to conditionalize
	synthesis of copy constructors & assignment operators based on
	access permissions. Instead, let it fail when it tries to
	synthesize the copy constructor. This will give meaningful error
	messages instead of silently generating code to perform a bitcopy.

Wed May 22 11:45:19 1996  Bob Manson  <manson@charmed.cygnus.com>

	* lex.c (real_yylex): Remove old-n-crufty #if 0 code for
	determining types for constant values.

	* decl.c (struct named_label_list): Use instead of stuffing
	random items into a TREE_LIST node.
	(named_label_uses): Use the new struct.
	(poplevel): Likewise.
	(lookup_label): Likewise.
	(define_label): Add an error message to tell the user the line
	where the goto is located in addition to the destination of the
	goto.
	(init_decl_processing): Use NULL instead of NULL_TREE to initialize
	named_label_uses.
	(finish_function): Likewise.
	
	(start_decl): Complain about defining a static data member
	in a different type from which it was declared.

Wed May 22 09:33:23 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_expr_type_conversion): Adjust.

Tue May 21 11:21:56 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (build_method_call): Always convert 'this' to the
	appropriate type.

	* search.c (add_conversions): Put the conversion function in
	TREE_VALUE, the type in TREE_PURPOSE.
	* cvt.c (build_type_conversion): Adjust.
	* call.c (user_harshness): Adjust.

	* method.c (emit_thunk): Call temporary_allocation and
	permanent_allocation around the ASM_OUTPUT_MI_THUNK case, too.

	* tree.c (build_cplus_array_type): Handle tweaking of
	TYPE_MAIN_VARIANT here.
	* typeck.c (common_type): Not here.

	* typeck.c (complete_type): Only try to complete an array type if
	it has a domain.

Mon May 20 14:55:59 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokvardecl): Call complete_type.
	(grokdeclarator): Call complete_type for PARM_DECLs.

Fri May 17 16:41:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Re-set
	CLASSTYPE_GOT_SEMICOLON after calling finish_struct_1.

Fri May 17 14:56:55 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (cp_expand_decl_cleanup): Remove, the backend is now
	smart enough to do it right.
	* tree.c (cp_expand_decl_cleanup): Likewise.
	* decl.c (cp_finish_decl): Use expand_decl_cleanup instead of
	cp_expand_decl_cleanup.
	(store_parm_decls): Likewise.
	(hack_incomplete_structures): Likewise.
	* except.c (push_eh_cleanup): Likewise.

Fri May 17 13:13:51 1996  Mike Stump  <mrs@cygnus.com>

	* expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++
	frontend to the backend where it belongs.
	* tree.c (unsave_expr): Likewise.
	(unsave_expr_now): Likewise.
	* tree.def (UNSAVE_EXPR): Likewise.
	* cp-tree.h (unsave_expr): Likewise.
	(unsave_expr_now): Likewise.

Fri May 17 11:02:41 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (emit_base_init): Make sure the partial EH cleanups live
	on the function_obstack.

Thu May 16 15:29:33 1996  Bob Manson  <manson@charmed.cygnus.com>

	* expr.c (do_case): Don't try to dereference null TREE_TYPEs
	when checking for pointer types.

Thu May 16 13:38:58 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Remove obsolete check for
	access declarations.

Thu May 16 13:34:15 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (build_overload_call): Simplify calls to
	build_overload_call by removing last parameter.
	(build_method_call): Likewise.
	* cp-tree.h: Likewise.
	* method.c (build_opfncall): Likewise.
	* typeck.c (build_x_function_call): Likewise.

Thu May 16 13:15:43 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (default_parm_conversions): Factor out common code.
	(build_method_call): Use it.
	(build_overload_call_real): Use it.

Wed May 15 14:46:14 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (build_method_call): Allow implicit & on METHOD_TYPEs,
	but pedwarn as the code is bogus.
	* typeck.c (decay_conversion): Likewise.
	(build_function_call_real): Use build_addr_func instead of
	default_conversion.  Don't allow pointer-to-method functions down
	here.
	(build_unary_op): Use real pointer-to-member functions instead of
	fake ones.
	(build_ptrmemfunc): Use build_addr_func instead of build_unary_op.
	(convert_for_assignment): Removed some obsolete code.
	* decl2.c (reparse_absdcl_as_expr): Pass current_class_ref to
	build_x_function_call instead of current_class_ptr.  Only call
	digest_init once on an initializer, we do this just checking
	TREE_TYPE.
	(build_expr_from_tree): Pass current_class_ref to
	build_x_function_call instead of current_class_ptr.
	* init.c (build_member_call): Likewise.
	* pase.y: Likewise.
	* error.c (dump_expr): Handle OFFSET_REFs better.
	* pt.c (unify): Handle pointer-to-member functions better.
	* decl.c (finish_function): Clear out current_class_ref just like
	we do for current_class_ptr.

	* typeck.c (get_delta_difference): Handle virtual bases better.

Tue May 14 16:37:37 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* sig.c (build_signature_table_constructor): Use the delta for
	the original basetype for this virtual function with thunks.
	(build_signature_method_call): We still need to adjust 'this'
	with thunks.

Tue May 14 16:27:25 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (build_addr_func): New routine.  Used to get the `real'
	address of a function or a method.  Needed to avoid getting a
	pointer-to-member function.
	(build_call): New routine to build CALL_EXPRs.
	(build_method_call): Use it.
	* cvt.c (convert_to_aggr): Likewise.
	* typeck.c (build_function_call_real): Likewise.
	* sig.c (build_signature_table_constructor): Use build_addr_func.
	* cp-tree.h (build_call, build_addr_func): Declare them.

Tue May 14 12:47:47 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (LOOKUP_AGGR): Remove, unused.
	* parse.y: Remove uses of LOOKUP_AGGR.

Tue May 14 12:07:51 1996  Mike Stump  <mrs@cygnus.com>

	* *.[chy]: Rename current_class_decl to current_class_ptr, and
	C_C_D to current_class_ref.

Mon May 13 16:55:23 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c (convert_harshness): Tighten up pointer conversions.

Sat May 11 04:33:50 1996  Doug Evans  <dje@canuck.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Surround DECL_ONE_ONLY with ifdef.
	(finish_file): Likewise.

Fri May 10 11:09:57 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (convert_fn_ptr): We don't use thunks for pmfs.

	* method.c (emit_thunk): Set flag_omit_frame_pointer in default
	code.

Thu May  9 18:18:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c: Turn on thunks by default where supported.

Tue May  7 20:39:57 1996  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (build_overload_call_maybe): Removed.
	* call.c (build_overload_call_real): Invert meaning of last arg to
	be require_complete.
	(build_overload_call): Likewise.
	* typeck.c (build_x_function_call): Use build_overload_call_real
	instead of build_overload_call_maybe.

Mon May  6 01:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Don't try to emit functions that haven't
	been compiled.

Fri May  3 09:30:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Oops.

	* decl.c (maybe_push_to_top_level): Do save previous_class_*.
	Also store the bindings from previous_class_values.
	(pop_from_top_level): Restore them.

Thu May  2 21:56:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Only write out vtable if its
	symbol has been referenced.
	(finish_file): Re-join synthesis/vtable loop with inline emission
	loop, disable inlining when an inline is output.

Thu May  2 17:20:02 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Setup saved_in_catch.
	(push_eh_cleanup): Reset __eh_in_catch.
	(expand_start_catch_block): Set __eh_in_catch.

Thu May  2 16:21:17 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (push_eh_cleanup): Add tracking for whether or not we
	have an active exception object.
	(expand_builtin_throw): Use it to make sure a rethrow without an
	exception object is caught.

Thu May  2 11:26:41 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (maybe_push_to_top_level): Clear out class-level bindings
	cache.

Wed May  1 11:26:52 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Also use sentries for vars with
	DECL_ONE_ONLY or DECL_WEAK set (should any such happen to be
	created).

	* lex.c (handle_cp_pragma): Disable #pragma
	interface/implementation if SUPPORTS_ONE_ONLY > 1.

Tue Apr 30 11:25:46 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (emit_thunk): Wrap default case in
	temporary/permanent_allocation.

	* method.c (make_thunk): Use DECL_ONE_ONLY.
	(emit_thunk): Call assemble_end_function.

Mon Apr 29 15:38:29 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (import_export_vtable): Use DECL_ONE_ONLY.
	(import_export_decl): Likewise.
	(finish_prevtable_vardecl): Disable vtable hack if
	SUPPORTS_ONE_ONLY > 1.

Mon Apr 29 14:32:47 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_modify_expr): PREINCREMENT_EXPR and
	PREDECREMENT_EXPRs take two arguments, not one.

Mon Apr 29 00:27:53 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (build_vtable_entry): Don't build thunks for abstract
	virtuals.

	* lex.c (real_yylex): Fix handling of __PRETTY_FUNCTION__ like C
	frontend.

Sat Apr 27 16:45:35 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (set_rtti_entry): Use size_zero_node.
	(build_vtable): Likewise.

Sat Apr 27 14:48:57 1996  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct_1): Pass size_zero_node to set_rtti_entry.
	(prepare_fresh_vtable): Likewise.

Fri Apr 26 13:14:14 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (emit_thunk): Call mark_used on the target function.

	* call.c (build_method_call): Don't warn about pending templates.

Thu Apr 25 14:55:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Fix list walking logic.

	* typeck2.c (check_for_new_type): Only warn if -pedantic.

Wed Apr 24 15:41:15 1996  Bob Manson  <manson@charmed.cygnus.com>

	* class.c (finish_struct_1): Remove old code for
	dont_allow_type_definitions.
	* cp-tree.h: Likewise.
	* spew.c: Make sure cp-tree.h is included before parse.h, so the
	definition of flagged_type_tree is found before it is used.
	* lex.c: Likewise.
	* parse.y: Added the ftype member to the type union, and changed a
	number of rules to use it instead of ttype. Added calls to
	check_for_new_type() as appropriate.
	* typeck2.c (check_for_new_type): New function for checking
	if a newly defined type appears in the specified tree.
	* cp-tree.h: Add new type flagged_type_tree. Add a prototype
	for check_for_new_type().

Wed Apr 24 00:36:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Only use a sentry if the decl is public.

	* pt.c (tsubst_expr, DECL_STMT): If we don't have an initializer,
	don't pass LOOKUP_ONLYCONVERTING.

Tue Apr 23 17:18:47 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (common_type): Fix the ARRAY_TYPE case so it
	properly keeps track of const and volatile type modifiers.

Tue Apr 23 10:52:56 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (cp_tree_equal): C++ version of simple_cst_equal.
	* pt.c (comp_template_args): Use it.

	* rtti.c (get_tinfo_fn, build_dynamic_cast, expand_*_desc): Call
	assemble_external for artificial function decls.

	* decl.c (cp_finish_decl): Oops.

Mon Apr 22 17:28:27 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (import_export_decl): Put static data member templates
	into common storage, or make them weak, depending on whether they
	are dynamically or statically initialized.
	(get_sentry): New function.
	(finish_file): Do import_export_decl for static data members before
	building the init/fini functions.  Don't init/fini a variable that's
	EXTERNAL.  Use a sentry for variables in common.  Fix mismatching
	push/pop_temp_slots.
	* decl.c (cp_finish_decl): If DECL_NOT_REALLY_EXTERN, do the
	expand_static_init thang.
	* method.c (get_id_2): New function.

Mon Apr 22 15:32:45 1996  Bob Manson  <manson@charmed.cygnus.com>

	* parse.y (empty_parms): Make sure we use C++-style prototypes
	when we're declaring member functions.

Sun Apr 21 10:08:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* Makefile.in (CONFLICTS): 16 s/r conflicts.
	* parse.y (self_template_type): New nonterminal.

Thu Apr 18 08:56:54 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (make_typename_type): Handle getting a TYPE_DECL for a
	name.
	* parse.y (base_class.1): Allow 'typename foo::bar'.

	* lex.c (check_newline): Remove #pragma code that plays with the
	input stream, since we now deal with tokens.  Clear nextchar when
	we're done.
	(handle_cp_pragma): Use real_yylex.
	(handle_sysv_pragma): Don't do skipline here.  Only call real_yylex
	in one place.

	* lex.c (check_for_missing_semicolon): Handle SELFNAME.

	* lex.c (handle_cp_pragma): Fix "#pragma implementation".

Wed Apr 17 16:51:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y: New token SELFNAME for potential constructor.
	* spew.c (yylex): Handle it.
	* lex.c (identifier_type): Produce it.

	* parse.y (complete_type_name): In :: case, don't push class binding.
	(complex_type_name): Likewise.

Wed Apr 17 15:02:40 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_reinterpret_cast): Handle pointer to member
	functions.

Wed Apr 17 12:28:26 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (handle_cp_pragma): New function, with decl, doing the cc1plus
	pragmas.
	(check_newline): Put the vtable/unit/implementation/interface pragma
	code into handle_cp_pragma, replacing it with a call.
	(handle_sysv_pragma): Give int return type, and take FINPUT and TOKEN
	args.  Get the next token after handling the pragma token.

Wed Apr 17 10:28:34 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (cp_convert_to_pointer): Avoid doing base analysis on pmfs.
	(convert_to_pointer_force): Likewise.

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

Tue Apr 16 13:44:58 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h, call.c, class.c, decl.c, parse.y, pt.c, rtti.c,
	tree.c: Lose TYPE_NESTED_NAME.

	* parse.y (nested_name_specifier_1): Don't treat non-identifiers
	as identifiers.

	* tree.def: Add VEC_INIT_EXPR.
	* expr.c (cplus_expand_expr): Handle it.
	* init.c (build_new): Use it instead of the RTL_EXPR nastiness and
	the extra file-scope symbol nastiness.

Mon Apr 15 16:21:29 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (make_thunk): Thunks are static.
	(emit_thunk): Use ASM_OUTPUT_MI_THUNK if it's defined.

	* decl2.c (mark_vtable_entries): Emit thunks as needed.
	(finish_file): Don't emit them here.

Sun Apr 14 11:34:39 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (build_dynamic_cast): Handle null pointers.
	(ifnonnull): New function.

Fri Apr 12 09:08:27 1996  Bob Manson  <manson@charmed.cygnus.com>

	* call.c (build_method_call): Remember the original basetype we
	were called with. Give an error message instead of trying
	(incorrectly) to call a non-static member function through a
	non-inherited class.

	* search.c (expand_upcast_fixups): Mark the new fixup as
	DECL_ARTIFICIAL.

Thu Apr 11 03:57:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Use a TARGET_EXPR for alloc_expr.

	* class.c (set_rtti_entry): Fix for thunks.

	* decl2.c (import_export_decl): Still emit typeinfo fns for
	cv-variants of builtin types.

	* rtti.c (expand_class_desc): Set up base_info_type_node here.
	(init_rtti_processing): Instead of here.

Wed Apr 10 14:17:13 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (init_rtti_processing): Do init regardless of -frtti.
	(build_typeid): Only complain about taking dynamic typeid without
	-frtti.

	* decl2.c: flag_rtti defaults to 1.

	* rtti.c (get_tinfo_var): The general class case is now smaller.
	(init_rtti_processing): Pack the latter three fields of base_info
	into 32 bits.

Wed Apr 10 13:50:14 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_member_init): Don't dump if name is NULL_TREE.

Wed Apr 10 12:56:02 1996  Mike Stump  <mrs@cygnus.com>

	* search.c (make_memoized_table_entry): Undefer the pop, if necessary.
	(push_memoized_context): Split out code to undefer pop_type_level to
	(clear_memoized_cache): here.
	(pop_memoized_context): We can only handle one layer of deferral of
	pop_type_level so clear the cache, if there was a previous level.

Tue Apr  9 23:06:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (init_rtti_processing): Build up base_info_type_node.
	(expand_class_desc): Use one pointer to an array of base_info
	structs, passed using a CONSTRUCTOR.

Tue Apr  9 14:20:57 1996  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Remove block extern for
	flag_assume_nonnull_objects here.
	(build_vfn_ref): Split out functionality into build_vtbl_ref.
	(build_vtbl_ref): New routine.
	(build_vtable): Set up rtti info here.
	(add_virtual_function): Note in CLASSTYPE_RTTI the best
	place where we can get the rtti pointers from to avoid having to
	search around for a place.
	(finish_base_struct): Likewise.
	(finish_struct_1): Likewise.  Never create totally new vtables
	with totally new vtable pointers for rtti.  Disable code to layout
	vtable pointers better until we want to break binary
	compatibility.
	* rtti.c (build_headof_sub): New routine to convert down to a
	sub-object that has an rtti pointer in the vtable.
	(build_headof): Use it.  Also, use build_vtbl_ref now to be more
	maintainable.
	(build_dynamic_cast): Make sure we have saved it, if we need to.
	* search.c (dfs_init_vbase_pointers): Disable code that deals with
	a more efficient vtable layout, enable later.
	* call.c (flag_assume_nonnull_objects): Moved declaration to
	* cp-tree.h: here.  Declare build_vtbl_ref.
	* pt.c (instantiate_class_template): Use NULL_TREE instead of 0 in
	function calls that want a tree.

Tue Apr  9 12:10:26 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (build_dynamic_cast): Handle downcasting to X* given
	other X subobjects in the most derived type.  Ack.

	* rtti.c (build_dynamic_cast): No need to strip cv-quals here,
	get_typeid will do it for us.
	(get_typeid_1): Break out call-building for expand_*_desc to use.
	(get_typeid): Call it.
	(expand_*_desc): Likewise.
	* decl.c (init_decl_processing): Don't set TYPE_BUILT_IN on char *
	and void *.
	(init_decl_processing): Lose builtin_type_tdescs lossage.
	* decl2.c (finish_vtable_vardecl): Remove obsolete code.

Mon Apr  8 17:23:23 1996  Bob Manson  <manson@charmed.cygnus.com>

	* pt.c (tsubst): When calling set_nested_typename, use
	TYPE_NESTED_NAME (current_class_type) instead of
	current_class_name.

	* decl.c (pushdecl): Likewise.
	(pushdecl_class_level): Likewise.
	(grokdeclarator): Use NULL_TREE instead of 0 in the call to
	set_nested_typename.

Sun Apr  7 10:44:31 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (synthesize_tinfo_fn): Handle arrays.

	* cp-tree.h (DECL_REALLY_EXTERN): New macro.

Sat Apr  6 13:56:27 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* rtti.c (throw_bad_cast): Use entry point __throw_bad_cast.
	(init_rtti_processing): Lose bad_cast_type.
	(build_dynamic_cast): Use throw_bad_cast.

	* rtti.c (synthesize_tinfo_fn): Handle enums and pmfs.

	* decl2.c (finish_file): Don't synthesize artificial functions
	that are external and not inline.

	* rtti.c (get_tinfo_fn): If at_eof, call import_export_decl.

	* decl2.c (finish_file): Handle having new inlines added to
	saved_inlines by synthesis.

	* rtti.c (get_bad_cast_node): Don't require <typeinfo>.

Fri Apr  5 17:02:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	RTTI rewrite to initialize nodes as needed, not require that
	users #include <typeinfo>, complete functionality and reduce wasted 
	space.
	* rtti.c (init_rtti_processing): New fn.
	(build_typeid): The vtable entry is now a function.
	(get_tinfo_var): New fn.
	(get_tinfo_fn): Likewise.
	(get_typeid): Use it.
	(build_dynamic_cast): Declare and use entry point __dynamic_cast.
	(build_*_desc): Rename to expand_*_desc and rewrite to use entry
	points __rtti_*.
	(add_uninstantiated_desc, get_def_to_follow, build_t_desc): Lose.
	(synthesize_tinfo_fn): New fn.
	* method.c (build_t_desc_overload): Lose.
	(build_overload_with_type): More generic.
	* decl.c (init_decl_processing): Call init_rtti_processing.
	* class.c (set_rtti_entry): Use get_tinfo_fn.
	* decl2.c (mark_vtable_entries): Mark the rtti function.
	(finish_prevtable_vardecl): Don't build_t_desc.
	(import_export_decl): Handle tinfo functions.
	(finish_file): Likewise.
	* typeck.c (inline_conversion): New fn.
	(build_function_call_real): Use it.
	* cp-tree.h: Add decls.

	* method.c (hack_identifier): Also convert component_refs from
	references.

	* lex.c (cons_up_default_function): Use the type, not the name, in
	declspecs.

	* decl2.c (import_export_vtable): Fix weak vtables.

Fri Apr  5 13:30:17 1996  Bob Manson  <manson@charmed.cygnus.com>

	* search.c (get_base_distance_recursive): Fix access checks for
	protected bases.

Fri Apr  5 11:02:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (unary_complex_lvalue): Delete unneeded decl, it's in
	cp-tree.h.
	(convert_harshness): Add prototypes wrapped by PROTO.
	* decl2.c (grok_function_init): Likewise.
	(do_toplevel_using_decl): Change to void return type.
	* class.c (build_vtable_entry): Remove decl of make_thunk.
	(merge_overrides): Fix order of arg definitions.
	(finish_vtbls): Likewise.
	(fixup_vtable_deltas): Likewise.
	(modify_all_direct_vtables): Likewise.
	(modify_all_indirect_vtables): Likewise.
	* search.c (get_base_distance_recursive): Likewise.
	(get_abstract_virtuals_1): Likewise.
	(fixup_virtual_upcast_offsets): Likewise.
	(lookup_fnfields_1): Add prototypes wrapped by PROTO.
	* init.c (perform_member_init): Fix order of arg definitions.
	(expand_aggr_init_1): Add prototypes wrapped by PROTO.
	* cp-tree.h (make_thunk): Add decl.
	(overload_template_name, push_template_decl): Add decls.
	(do_toplevel_using_decl): Change to void return type.
	(vec_binfo_member): Add decl.

Thu Apr  4 13:33:10 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (mark_addressable, convert_for_assignment,
	convert_for_initialization, pointer_int_sum, pointer_diff,
	unary_complex_lvalue): Add prototypes wrapped by PROTO.
	(convert_sequence): #if 0 fn decl, since definition also is.

Thu Apr  4 11:00:53 1996  Mike Stump  <mrs@cygnus.com>

	* rtti.c (build_dynamic_cast): Make sure we strip qualifiers on
	cast to pointer types for type searching.

Wed Apr  3 17:10:57 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (get_delta_difference): Use cp_error, not error, in the
	case where BINFO == 0.

Wed Apr  3 12:01:02 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (build_method_call): Fix wording of error messages so
	constructors come out right.

Tue Apr  2 16:06:59 1996  Bob Manson  <manson@charmed.cygnus.com>

	* decl.c (push_overloaded_decl): Don't warn about hidden
	constructors when both the type and the function are declared
	in a system header file.

Mon Apr  1 09:03:13 1996  Bob Manson  <manson@charmed.cygnus.com>

	* class.c (finish_struct_1): Propagate the TYPE_PACKED
	flag for the type to the type's fields.

Sat Mar 30 12:14:33 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (complex_parmlist, ELLIPSES): Take out ARM-based warning.

Fri Mar 29 15:51:36 1996  Bob Manson  <manson@charmed.cygnus.com>

	* class.c (base_info, finish_base_struct): Replace 
	needs_virtual_dtor with base_has_virtual.

	(finish_struct_1): Remove the old code that tried to make default
	destructors virtual. Use base_has_virtual when checking if we need
	to add a vtable entry for the rtti code.

Fri Mar 29 14:02:36 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (push_template_decl): Complain about template decl with
	inappropriate declaration.

Fri Mar 29 12:15:35 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (build_x_unary_op): Remove bogus check for taking
	the address of a member function.

Fri Mar 29 11:56:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

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

Fri Mar 29 09:41:02 1996  Jeffrey A. Law  <law@cygnus.com>

	* method.c (emit_thunk): Remove current_call_is_indirect nonsense.
	Add additional argument to INIT_CUMULATIVE_ARGS.

Thu Mar 28 16:41:39 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (shadow_tag): Fix error about anon union with methods.

	* parse.y (self_reference): Only generate a self-reference if this
	is a non-template class.
	(opt.component_decl_list): Only use it if it was generated.

	* parse.y (component_decl_1): Use constructor_declarator.
	(fn.def2): Likewise.
	(notype_component_declarator0): Likewise.

Thu Mar 28 15:11:35 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (build_x_unary_op): Add checks for taking the address
	of a TARGET_EXPR or of a member function, and give appropriate
	warnings.

Thu Mar 28 14:49:26 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (process_template_parm): Allow template type parms to be
	used as types for template const parms.

Wed Mar 27 15:51:19 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_vec_init): Ensure the eh cleanups are on the
	function_obstack.

Wed Mar 27 10:14:30 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (lookup_name_real): Be even more picky about the
	ambiguous lookup warning.
	(grokdeclarator): Tweak SCOPE_REF constructor declarators here.
	* parse.y (constructor_declarator): Rather than here.

	* parse.y (constructor_declarator): New nonterminal.
	(fn.def1): Use it.
	(explicit_instantiation): Likewise.

Tue Mar 26 13:41:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	Add implicit declaration of class name at class scope.
	* decl.c (lookup_name_real): Restrict pedwarn about ambiguous lookup.
	* parse.y (self_reference): New nonterminal.
	(opt.component_decl_list): Use it.
	(fn.def1): Add nested_name_specifier type_name cases.
	* class.c (build_self_reference): New function.
	(finish_struct): Handle access_default later, move self-reference
	decl to the end.
	* pt.c (lookup_template_class): Handle getting a TYPE_DECL.
	* cp-tree.h: Adjust.

	* pt.c (do_function_instantiation): Separate handling of member
	functions and non-member functions properly.

Mon Mar 25 14:23:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (process_template_parm): Improve error for 'volatile class K'.

	* class.c (finish_struct_1): Check the right slot for destructors.

	* decl.c (start_enum): Complain about enum templates.

Mon Mar 25 13:25:31 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (resolve_offset_ref): Offset pointers to member data by one.
	* typeck.c (unary_complex_lvalue): Likewise.

Mon Mar 25 13:30:42 1996  Bob Manson  <manson@charmed.cygnus.com>

	* typeck.c (c_expand_return): Check for a returned local
	array name, similar to the check for an ADDR_EXPR.

Mon Mar 25 13:07:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (cp_finish_decl): Don't build cleanups for static
	variables here.

Fri Mar 22 17:57:55 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_modify_expr): Fix error messages to be more
	accurate.
	* cp-tree.h (assop_as_string): Parallel to op_as_string, but for
	assignment operators.
	* error.c (assop_as_string): Likewise.  Add support for `%Q' for
	assignment operators.

Fri Mar 22 13:48:29 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): Call bad_specifiers for typedefs.  Also
	give an error if initialized.  Pedwarn about nested type with the
	same name as its enclosing class.

	* pt.c (tsubst, case TYPE_DECL): Set DECL_CONTEXT.

	* typeck.c (require_complete_type): Be sure to instantiate the
	MAIN_VARIANT of the type.

	* decl2.c (finish_file): Instantiate pending templates before
	processing static constructors and destructors.

	* pt.c (instantiate_decl): Don't instantiate functions at toplevel
	unless at_eof.

Fri Mar 22 09:30:17 1996  Bob Manson  <manson@beauty.cygnus.com>

	* decl2.c (delete_sanity): If error_mark_node is passed
	in as an expression, quit while we're ahead.

	* decl.c (grokdeclarator): Give an error message if `friend'
	is combined with any storage class specifiers.

Wed Mar 20 14:51:55 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (named_complex_class_head_sans_basetype): Don't crash on
	definition of nonexistent nested type.

	* error.c (dump_decl, case TYPE_DECL): Fix decision for whether or
	not to say 'typedef'.

Wed Mar 20 00:11:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (struct lang_type): Make search_slot a tree, not a char*.
	* search.c (dfs_walk, dfs_init_vbase_pointers,
	expand_upcast_fixups): Remove cast of CLASSTYPE_SEARCH_SLOT.
	(dfs_find_vbases): Remove cast for CLASSTYPE_SEARCH_SLOT init.

Tue Mar 19 17:56:03 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (build_throw): Support minimal parse.
	* pt.c (tsubst_copy): Support THROW_EXPR.
	* decl2.c (build_expr_from_tree): Likewise.

	* pt.c (mangle_class_name_for_template): Always allocate
	scratch_firstobj.

Tue Mar 19 16:34:31 1996  Bob Manson  <manson@beauty.cygnus.com>

	* cvt.c (cp_convert_to_pointer): Give an appropriate error
	when trying to cast from an incomplete type.

Tue Mar 19 16:00:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): Don't bother setting up
	CLASSTYPE_TAGS explicitly, as the nested types will add
	themselves.

Tue Mar 19 15:48:43 1996  Bob Manson  <manson@beauty.cygnus.com>

	* decl.c (shadow_tag): Remove old error check for usage of
	an enum without a previous declaration.
	(xref_tag): Add error message about usage of enums without a
	previous declaration.

Tue Mar 19 09:21:35 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (do_identifier): Only do name consistency check if we're
	parsing.

	* pt.c (push_template_decl): Don't crash if we get a member defn
	that doesn't match.

	* decl.c (xref_tag_from_type): New function to do an xref without
	always having to figure out code_type_node.
	* cp-tree.h: Declare it.
	* pt.c (instantiate_class_template): Use it for friend classes.
	(lookup_template_class): Use it.

	* typeck2.c (build_functional_cast): Pull out a single parm before
	passing it to build_c_cast.

Tue Mar 19 09:07:15 1996  Bob Manson  <manson@beauty.cygnus.com>

	* expr.c (do_case): Give an error message if a pointer is
	given as a case value.

Mon Mar 18 21:57:54 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_c_cast): Don't pull single TEMPLATE_DECL out of
	an overload list.

	* lex.c (cons_up_default_function): Really, now, interface hackery
	does not apply to synthesized methods.

Mon Mar 18 18:20:57 1996  Mike Stump  <mrs@cygnus.com>

	* call.c (build_method_call): Ctors and dtors now have special names
	with respect to lookups.
	* class.c (add_method): Likewise.
	(grow_method): Likewise.
	(finish_struct_methods): Likewise.
	(warn_hidden): Likewise.
	(finish_struct_1): Likewise.
	* cvt.c (convert_to_reference): Likewise.
	(convert_to_aggr): Likewise.
	(cp_convert): Likewise.
	* decl2.c (check_classfn): Likewise.
	* init.c (expand_member_init): Likewise.
	(expand_default_init): Likewise.
	(expand_aggr_init_1): Likewise.
	(build_offset_ref): Likewise.
	(build_new): Likewise.
	(build_delete): Likewise.
	* lex.c (do_inline_function_hair): Likewise.
	* search.c (lookup_field_1): Likewise.
	(lookup_fnfields_here): Likewise.
	(lookup_field): Likewise.
	(lookup_fnfields): Likewise.
	(get_virtual_destructor): Likewise.
	(dfs_debug_mark): Likewise.
	(dfs_pushdecls): Likewise.
	(dfs_compress_decls): Likewise.
	* tree.c (layout_basetypes): Likewise.
	* typeck.c (build_component_ref): Likewise.
	(build_x_function_call): Likewise.
	(build_modify_expr): Likewise.
	(convert_for_initialization): Likewise.
	(build_functional_cast): Likewise.
	* cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Likewise.
	(CTOR_NAME): New.
	(DTOR_NAME): New.
	* decl.c (ctor_identifier): New.
	(dtor_identifier): New.
	(init_decl_processing): Set them.

Mon Mar 18 18:00:51 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_component_ref): Don't get confused by fields whose
	context has no type name, like pointer to member functions.

Mon Mar 18 13:19:03 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): Handle typedef without declarator.

	* pt.c (tsubst): Handle SCOPE_REF in declarator.

	* parse.y (bad_parm): Catch another case of missing `typename'.

	* lex.c (yyprint): Handle TYPE_DECLs.

	* decl.c (start_function): Don't try to be clever.

	* lex.c: Lose compiler_error_with_decl.
	* typeck2.c: Lose error_with_aggr_type.
	(incomplete_type_error): Use cp_* instead of old functions.
	(readonly_error): Likewise.
	* typeck.c (convert_arguments): Likewise.
	* search.c (lookup_nested_field): Likewise.
	* method.c (make_thunk): Likewise.
	* decl.c (grokparms): Likewise.
	* cp-tree.h: Update.

	* tree.c (min_tree_cons): Call copy_to_permanent for the purpose
	and value.

Mon Mar 18 11:25:52 1996  Bob Manson  <manson@beauty.cygnus.com>

	* method.c (build_opfncall): When deleting a pointer to an
	array, build a new pointer to the tree past any ARRAY_TYPE
	nodes.

Mon Mar 18 10:11:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (lookup_name_real): Initialize local var TYPE to NULL_TREE.

Fri Mar 15 11:03:57 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_decl): Only call import_export_decl if at_eof
	and ! DECL_INLINE.

	* decl.c (finish_function): Don't set nested based on
	hack_decl_function_context.
	* parse.y (function_try_block): Check for nested function.
	(pending_inlines): Likewise.

	* decl2.c (build_expr_from_tree): If a unary op already has a
	type, just return it.

	* decl2.c (finish_prevtable_vardecl): Use ADJUST_VTABLE_LINKAGE.

	* decl2.c (walk_vtables): vardecl_fn returns int; return 1 if it does.
	(finish_file): Check the return value of walk_vtables.
	(finish_prevtable_vardecl): Return int.
	(finish_vtable_vardecl): Likewise.
	(prune_vtable_vardecl): Likewise.
	* lex.c (set_vardecl_interface_info): Likewise.
	* cp-tree.h: Adjust return types.

	* class.c (delete_duplicate_fields_1): Don't complain about
	duplicate nested types if they're the same type.
	(finish_struct): Remove check for duplicate.
	* decl2.c (grokfield): Don't check for typedef of anonymous type.

Thu Mar 14 10:00:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h: Lose SIGNATURE_GROKKING_TYPEDEF.

	* decl.c (grokdeclarator): Lose special handling of class-level
	typedef.  Lose SIGNATURE_GROKKING_TYPEDEF.  Set
	SIGNATURE_HAS_OPAQUE_TYPEDECLS later.

	* cvt.c (convert_pointer_to_real): Retain cv-quals in conversion.

	* pt.c (tsubst_copy): Strip cv-quals from destructor name types.

	* search.c (compute_access): Fix handling of anonymous union
	members.
	* class.c (finish_struct_anon): Propagate TREE_{PRIVATE,PROTECTED}
	from anonymous unions to their members.

	* typeck.c (build_x_function_call): For static member functions,
	hand off to build_member_call.

Wed Mar 13 14:03:34 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_component_ref): Handle OFFSET_REFs.

	* init.c (expand_vec_init): Fix init == 0 case.

Tue Mar 12 14:36:02 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_new): Pedwarn about init and array new.
	(expand_vec_init): Handle lists, use convert_for_initialization

	* typeck.c (convert_for_initialization): Pass LOOKUP_NO_CONVERSION
	when converting to an aggregate type.
	* cvt.c (cp_convert): Pass it through.

	* typeck.c (build_conditional_expr): Handle user-defined
	conversions to slightly different types.

	* decl.c (grokdeclarator): Force an array type in a parm to be
	permanent.

	* decl2.c (do_using_directive): Sorry.
	(do_namespace_alias): Likewise.
	* lex.c (real_yylex): Warn about using the `namespace' keyword.

Sun Mar 10 22:26:09 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (datadef): Move call to note_list_got_semicolon up.

Fri Mar  8 11:47:26 1996  Mike Stump  <mrs@cygnus.com>

	* tree.c (unsave_expr): Don't unsave, UNSAVE_EXPRs.

Fri Mar  8 11:29:06 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (cp_finish_decl): The exception regions have to be
	nested, not overlapping.  We start the exception region for a
	decl, after it has been fully built, and all temporaries for it
	have been cleaned up.

Thu Mar  7 17:46:06 1996  Mike Stump  <mrs@cygnus.com>

	* tree.c (vec_binfo_member): Don't core dump if we have no bases.

Thu Mar  7 14:11:49 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.def: Add RETURN_INIT.
	* pt.c (instantiate_decl): Handle RETURN_INIT.
	* decl.c (store_return_init): Handle minimal_parse_mode.

	* tree.c (cp_build_type_variant): Just return an error_mark_node.
	* decl.c (make_typename_type): Don't try to get the file and line
	of an identifier.
	* typeck.c (comptypes): Handle TYPENAME_TYPE.

Wed Mar  6 18:47:50 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (poplevel): Make sure we clear out and restore old local
	non-VAR_DECL values by default when they go out of scope.

Wed Mar  6 09:57:36 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (build_overload_value): Use DECL_ASSEMBLER_NAME in
	referring to addresses of variables and functions.

	* error.c (dump_expr): Support SIZEOF_EXPR.

	* init.c (do_friend): Use the return value of check_classfn.

	* typeck.c (convert_arguments): Call complete_type.

	* method.c (hack_identifier): After giving an error, set value to
	error_mark_node.

Tue Mar  5 16:00:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (hack_decl_function_context): Kludge around DECL_CONTEXT
	lossage for local classes.
	* cp-tree.h: Declare it.
	* decl.c (lookup_name_real): Evil, painful hack for local classes.
	(grokfndecl): Set DECL_CLASS_CONTEXT and DECL_NO_STATIC_CHAIN here.
	Use hack_decl_function_context.
	(grokdeclarator): Don't set DECL_NO_STATIC_CHAIN here.
	(start_function): Use hack_decl_function_context.
	(finish_function): Likewise.
	* method.c (synthesize_method): Likewise.
	* lex.c (process_next_inline): Likewise.
	(do_pending_inlines): Likewise.
	* decl2.c (finish_file): Unset DECL_STATIC_FUNCTION_P when we're
	done with it.

Mon Mar  4 22:38:39 1996  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* sig.c (build_signature_pointer_or_reference_type): Align
	signature pointers/references on 8-byte boundaries so they can be
	grabbed 2 words at a time on a Sparc.

Tue Mar  5 10:21:01 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (hack_identifier): Requiring a static chain is now a
	hard error.
	* decl.c (grokdeclarator): Set DECL_NO_STATIC_CHAIN on nested
	functions.

Mon Mar  4 20:03:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* init.c (build_offset_ref): Call complete_type.

	* decl.c (pop_from_top_level): Always pop previous_class_type.

	* parse.y: Handle multiple decls in a for-init-statement.
	* pt.c (tsubst_expr): Likewise.

	* pt.c (tsubst): Use tsubst_expr for the second operand of an
	ARRAY_REF.

	* decl.c (maybe_push_to_top_level): Don't save previous_class_type.
	(poplevel_class): Set it here.
	(pop_from_top_level): Pop it here if we're returning to class scope.
	* class.c (pushclass): Don't set it here.

	* decl.c (maybe_push_to_top_level): Save current_template_parms,
	and clear it if !pseudo.
	(pop_from_top_level): Restore it.

	* decl2.c (finish_file): Push the dummy each time we walk the list
	of vtables.

	* error.c (dump_expr): Support LOOKUP_EXPR and actually do
	something for CAST_EXPR.
	
Mon Feb 19 14:49:18 1996  Rusty Russell  <rusty@adelaide.maptek.com.au>

	* cvt.c (cp_convert): Warn about implicit conversion of the
	address of a function to bool, as it is always true.

Fri Feb 23 23:06:01 1996  Rusty Russell  <rusty@adelaide.maptek.com.au>

	* typeck.c (c_expand_return): Fix warning for local externs returned.

Mon Mar  4 15:03:11 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (mapcar): Propagate const and volatile properly.

	* typeck.c (complete_type): Be sure to instantiate the
	MAIN_VARIANT of the type.

	* method.c (synthesize_method): Class interface hackery does not
	apply to synthesized methods.

Mon Mar  4 14:05:23 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (comp_template_args): Use comptypes rather than just
	checking for TEMPLATE_TYPE_PARM equivalence.

	* typeck.c (build_x_function_call): Call complete_type before
	checking TYPE_OVERLOADS_CALL_EXPR.

Mon Mar  4 18:48:30 1996  Manfred Hollstein   <manfred@lts.sel.alcatel.de>

	* g++.c (main): Check also for new define ALT_LIBM.

Fri Mar  1 13:09:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_class_template): If we don't have a pattern
	yet, that's OK.
	(coerce_template_parms): If we see a local class, bail.

	* decl.c (grok_reference_init): Make sure there's a type before
	checking its code.

	* pt.c (do_function_instantiation): Avoid crashing on invalid decls.
	(push_template_decl): Likewise.

	* parse.y (named_class_head): Set
	CLASSTYPE_TEMPLATE_SPECIALIZATION here if we have basetypes.

	* decl.c (xref_tag): Diagnose redeclaration of template
	type-parameter name.

	* error.c (dump_type): Handle anonymous template type parms.

	* pt.c (instantiate_template): Use TYPE_MAIN_DECL instead of
	TYPE_STUB_DECL.
	(coerce_template_parms): Likewise.

Thu Feb 29 16:26:01 1996  Mike Stump  <mrs@cygnus.com>

	* class.c (instantiate_type, case {ARRAY,INDIRECT}_REF,
	case ADDR_EXPR): Don't modify rhs if a subinstantiation fails.

Thu Feb 29 08:20:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (instantiate_template): Take the MAIN_VARIANT of the type
	before trying to get its STUB_DECL.
	(coerce_template_parms): Likewise.

	* parse.y (template_type_parm): If they didn't use 'class',
	pretend they did after giving an error.

	* pt.c (coerce_template_parms): Diagnose use of local class.

	* decl.c (grok_reference_init): Use instantiate_type.

	* error.c (dump_expr): Handle TEMPLATE_DECLs.

	* parse.y (named_class_head): Diagnose mismatching types and tags.

	* decl.c (pushdecl): Type decls and class templates clash with
	artificial type decls, not hide them.

	* decl.c (redeclaration_error_message): Diagnose redefinition of
	templates properly.
	(duplicate_decls): Diagnose disallowed overloads for template
	functions, too.

	* decl.c (start_decl): Call complete_type before checking for a
	destructor.

	* pt.c (tsubst): Use tsubst_expr on the elts of a VEC.

	* decl.c (xref_tag): A TEMPLATE_TYPE_PARM is a match.

Wed Feb 28 09:28:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grok_op_properties): Don't check for operator++(int) in
	a template.

	* tree.c (perm_manip): Return a copy of variable and function
	decls with external linkage.

	* tree.def: Change some of the min tree codes to type "1".
	* pt.c (uses_template_parms): Handle 'e's, return 1 for LOOKUP_EXPRs.
	* method.c (build_overload_int): Emit something arbitrary for
	anything but an INTEGER_CST if we're in a template.

	* decl.c (cp_finish_decl): Call complete_type before deciding
	whether or not to lay out the decl.

	* lex.c (do_identifier): Check for DECL_INITIAL before using it.

Tue Feb 27 16:35:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck2.c (build_x_arrow): Call complete_type.

	* pt.c (add_pending_template): Broken out.
	(lookup_template_class): If -fexternal-templates, call it for all
	the methods of implemented types.
	(instantiate_class_template): Instead of instantiating them here.
	(instantiate_decl): Handle -fexternal-templates earlier.

Tue Feb 27 15:51:32 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* search.c, lex.c, decl.c, class.c, cp-tree.h: Don't wrap the
	memoized lookup stuff inside GATHER_STATISTICS.

Tue Feb 27 10:38:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (start_decl): Complain about array of incomplete type
	here.
	(grokdeclarator): Not here.

	* parse.y (template_parm): Expand full_parm inline so we can set
	the rule's precedence.

	* pt.c (tsubst_expr): If we're in a template, just do tsubst_copy.
	(tsubst): tsubst_expr the DECL_INITIAL of FIELD_DECLs.
	* decl2.c (grokbitfield): Don't check for integer constant here.
	* class.c (finish_struct_1): Check here.

	* decl.c (define_label): Make the min decl go on permanent_obstack.

	* pt.c (unify): Don't handle CONST_DECLs.
	(uses_template_parms): Don't check DECL_INITIAL on a CONST_DECL.
	(tsubst_copy): Likewise.

	* lex.c (do_identifier): Do pull the DECL_INITIAL out of a
	CONST_DECL for a template parm.

Mon Feb 26 12:48:18 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokdeclarator): Complain about array of incomplete type
	here.
	(start_decl_1): Not here.

	* pt.c (tsubst): Handle pointer-to-function declarators.

	* method.c (hack_identifier): If pedantic, diagnose local class
	methods that require a static chain.

	* decl.c (grok_op_properties): No longer static.
	* cp-tree.h: Declare it.
	* pt.c (tsubst): Call it for operators.
	Use tsubst_copy for TREE_VECs.

	* parse.y (template_arg): The expr has precedence like '>'.

Fri Feb 23 14:51:52 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (coerce_template_parms): Don't coerce an expression using
	template parms.
	(uses_template_parms): Also check DECL_INITIAL in CONST_DECLs.
	(tsubst): Don't use build_index_2_type if the max_value uses template
	parms.
	* method.c (build_overload_int): Emit something arbitrary for an
	expression using template parms.

	* parse.y (template_close_bracket): New non-terminal to catch use
	of '>>' instead of '> >' in template class names.
	(template_type): Use it.
	* Makefile.in (CONFLICTS): Causes one more r/r conflict.

	* tree.def: Add CAST_EXPR.
	* typeck2.c (build_functional_cast): Use CAST_EXPR instead of
	CONVERT_EXPR for minimal_parse_mode.
	* typeck.c (build_c_cast): Likewise.
	* pt.c (tsubst_copy): Likewise.
	* decl2.c (build_expr_from_tree): Likewise.
	* error.c (dump_expr): Likewise.

Fri Feb 23 10:36:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c (SetTerminate, SetUnexpected): Put back global vars.
	(init_exception_processing): Put back decl/init of
	set_unexpected_fndecl and set_terminate_fndecl, needed to get the
	fns from libstdc++.

	* decl.c (struct binding_level): Delete ACCEPT_ANY bitfield.
	(declare_uninstantiated_type_level, uninstantiated_type_level_p):
	Delete unused fns.
	* cp-tree.h (declare_uninstantiated_type_level,
	uninstantiated_type_level_p): Delete prototypes.

Thu Feb 22 19:36:15 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst_expr): Add default return.

Thu Feb 22 16:47:24 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* error.c (fndecl_as_string): Delete unused arg CNAME.
	* sig.c (build_signature_table_constructor,
	build_signature_method_call): Fix calls.

	* class.c (the_null_vtable_entry): Delete var definition.
	(init_class_processing): Delete tree the_null_vtable_entry init.
	* decl.c (no_print_{functions, builtins}): Declare as static.
	(__tp_desc_type_node): #if 0 var definition.
	(init_type_desc): #if 0 init of __tp_desc_type_node.
	(vb_off_identifier): Move var decl into init_decl_processing.
	(current_function_assigns_this): Declare as static.
	(int_ftype_ptr_ptr_int, void_ftype_ptr_int_int): Delete var decls.
	(init_decl_processing): Delete init of void_ftype_ptr_ptr_int.
	Move decls of string_ftype_ptr_ptr and int_ftype_string_string here.
	* decl2.c (delete_sanity): Delete definition/mod of local var ELT_SIZE.
	* init.c (BI_header_type, BI_header_size): Declare as static.
	* pt.c (template_classes): Delete unused var.
	(add_pending_template): Delete decl for non-existent fn.
	(lookup_template_class): Delete vars CODE and TAG_CODE.
	(instantiate_template): Delete unused var TARGS.
	* cp-tree.h (vb_off_identifier, current_function_assigns_this):
	Delete decls.
	(__tp_desc_type_node): #if 0 var decl.
	(fndecl_as_string): Fix prototype.

Thu Feb 22 15:56:19 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.def: Add GOTO_STMT.
	* pt.c (tsubst_expr): Support goto and labels.
	* decl.c (define_label): Support minimal parsing.
	* parse.y (simple_stmt): Likewise.

Thu Feb 22 15:30:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* xref.c (GNU_xref_member): Only define/set var I if
	XREF_SHORT_MEMBER_NAMES is defined, to match when it's actually
	used.
	(GNU_xref_end_scope): Delete unused fifth arg TRNS.
	(GNU_xref_end): Fix call.
	* decl.c (poplevel, poplevel_class, finish_method): Fix calls.
	* cp-tree.h (GNU_xref_end_scope): Fix prototype.

	* tree.c (build_exception_variant): Delete unused vars I, A, T,
	T2, and CNAME.
	(layout_vbasetypes): Delete unused var NONVIRTUAL_VAR_SIZE.
	(mapcar): Delete unused var CODE.
	(build_cplus_new): Delete unused arg WITH_CLEANUP_P.
	(break_out_cleanups): Fix call.
	(bot_manip): Likewise.
	* call.c (build_method_call): Likewise.
	* cvt.c (build_up_reference, convert_to_reference, cp_convert):
	Likewise.
	* typeck.c (unary_complex_lvalue, build_modify_expr,
	convert_for_initialization): Likewise.
	* typeck2.c (build_functional_cast): Likewise.
	* cp-tree.h (build_cplus_new): Fix prototype.

	* repo.c (open_repo_file): Delete unused var Q.
	(repo_compile_flags, repo_template_declared,
	repo_template_defined, repo_class_defined, repo_inline_used,
	repo_vtable_used, repo_tinfo_used): #if 0 unused fns.
	(repo_get_id, repo_vtable_used): Declare as static. 
	* cp-tree.h (mark_{decl,class}_instantiated, finish_repo): Add
	prototypes.

Thu Feb 22 14:53:35 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (pending_inlines): Add function_try_block case.

	* pt.c (unify): Fix for template const parms.

Thu Feb 22 13:24:15 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* lex.c (extract_interface_info): Delete forward decl.
	(default_copy_constructor_body, default_assign_ref_body): Delete
	decls for non-existent functions.
	(synth_firstobj, inline_text_firstobjs): Delete unused vars.
	(init_lex): Delete setting them.
	(cons_up_default_function): Delete unused vars FUNC_BUF,
	FUNC_LEN, and COMPLEX.  Delete code setting COMPLEX.  Delete old
	#if 0'd synth code.
	(toplevel, expression_obstack): Delete unused extern decls.
	(tree_node_kind): Delete unused enum.
	(tree_node_counts, tree_node_sizes): Wrap with #ifdef
	GATHER_STATISTICS.
	(tree_node_kind_names): Delete unused extern decl.
	(synth_obstack): Delete unused var.
	(init_lex): Don't set it.
	(init_parse): Add decl before use.
	(reduce_count): Only define #ifdef GATHER_STATISTICS && REDUCE_LENGTH.
	(current_unit_{name, language}): Delete unused vars. 
	(check_newline): Don't bother setting them, just accept the #pragma.
	* cp-tree.h (init_repo, peek_yylex): Add prototypes.
	(current_unit_{name, language}): Delete decls.

	* search.c: Wrap all of the memoized functions, macros, and
	variables inside #ifdef GATHER_STATISTICS.
	(lookup_field, lookup_fnfields): Likewise.
	(init_search_processing): Likewise.
	(reinit_search_statistics): Wrap whole function.
	* lex.c (reinit_lang_specific): Wrap call to reinit_search_statistics.

	* decl.c (finish_function): Only call pop_memoized_context if
	GATHER_STATISTICS is defined.
	(start_function): Likewise for push_memoized_context.
	* class.c (pushclass, popclass): Likewise.

	* cp-tree.h (CLASSTYPE_MTABLE_ENTRY): Move definition from here...
	* search.c (CLASSTYPE_MTABLE_ENTRY): ... to here.

	* cvt.c (cp_convert): Delete unused local var FORM.
	* cp-tree.h (can_convert, can_convert_arg, real_lvalue_p): Add
	prototypes.

Thu Feb 22 13:19:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (do_poplevel): Oops; really return what we get from
	poplevel this time.

Thu Feb 22 11:41:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

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

	* cp-tree.h ({push,pop}_cp_function_context): Add decls.
	* method.c ({push,pop}_cp_function_context): Delete decls.
	* except.c (start_eh_unwinder, end_eh_unwinder): Declare as void.
	(SetUnexpected, SetTerminate): Delete unused vars.
	(init_exception_processing): Don't set SetUnexpected or
	SetTerminate.  Don't set SET_UNEXPECTED_FNDECL or SET_TERMINATE_FNDECL.
	(output_exception_table_entry): Delete unused array LABEL.
	(expand_internal_throw): Delete unused var PARAMS.
	(expand_start_catch_block): Delete unused var CLEANUP.
	(emit_exception_table): Delete unused var EH_NODE_DECL.
	(expand_builtin_throw): Delete unused vars UNWIND_AND_THROW and
	GOTO_UNWIND_AND_THROW.  Don't set them.
	(end_eh_unwinder): Add top decl.
	(pop_rtl_from_perm): Delete unused decl of PERMANENT_OBSTACK.
	(exception_section, push_rtl_perm, do_function_call,
	lang_interim_eh, push_eh_cleanup, eh_outer_context,
	expand_end_eh_spec, end_eh_unwinder): Declare as static.
	(saved_pc, saved_throw_type, saved_throw_value, saved_cleanup,
	throw_used): Likewise.
	* cp-tree.h (expand_end_eh_spec): Delete prototype.

	* search.c (dfs_mark, dfs_mark_vtable_path,
	dfs_unmark_vtable_path, dfs_mark_new_vtable,
	dfs_unmark_new_vtable, dfs_clear_search_slot,
	dfs_search_slot_nonempty_p, bfs_markedp, bfs_unmarkedp,
	bfs_marked_vtable_pathp, bfs_unmarked_vtable_pathp,
	bfs_marked_new_vtablep, bfs_unmarked_new_vtablep): #if 0 unused
	functions.
	(n_fields_searched, n_calls_lookup_field, n_calls_lookup_field_1,
	n_calls_lookup_fnfields, n_calls_lookup_fnfields_1,
	n_calls_get_base_type, n_outer_fields_searched, n_contexts_saved):
	Only define #ifdef GATHER_STATISTICS.
	(reinit_search_statistics): Only init some vars if GATHER_STATISTICS
	is defined.
	(vbase_decl): Delete var definition.
	(init_search): Delete old decl.
	(init_vbase_pointers): Delete building of VBASE_DECL, since it's
	never actually used.
	(expand_indirect_vtbls_init): Delete init of VBASE_DECL.
	(get_base_distance_recursive): Delete unused fourth arg
	BASETYPE_PATH.  Fix call .
	(get_base_distance): Fix call.
	(push_class_decls): Delete unused var ID.
	(make_memoized_table_entry): Declare as static.
	(breadth_first_search): Declare as static.
	(tree_has_any_destructor_p): Declare as static.
	(pop_class_decls): Delete unused arg pop_class_decls.
	* class.c (popclass): Fix call to pop_class_decls.
	* cp-tree.h (make_memoized_table_entry, breadth_first_search,
	tree_has_any_destructor_p): Delete prototypes.

	* rtti.c (build_ptmf_desc): Delete unused arg TYPE.
	(build_t_desc): Fix call.  Delete unused vars ELEMS and TT.
	(build_dynamic_cast): Delete unused local vars TMP1 and RETVAL.
	(build_user_desc): Delete unused var T.
	(build_class_desc): Delete unused vars T and OFF.
	(build_t_desc): Delete unused var NAME_STRING.
	(build_headof): Make static.
	(get_bad_cast_node): Likewise.
	(get_def_to_follow): Likewise.
	* cp-tree.h (init_type_desc): Add prototype.
	(build_headof): Remove prototype.

Thu Feb 22 00:54:22 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (tsubst): Only look for matching decls at file scope for
	non-member functions.

	* call.c (build_scoped_method_call): Handle scoped destructor
	calls in templates.

	* decl.c (*_top_level): Also save previous_class_values.

	* pt.c (tsubst_expr): Support do {} while loops.
	* parse.y (simple_stmt): Likewise.
	* tree.def: Likewise.

	* method.c (build_overload_identifier): For a class nested in a
	template class, don't mangle in the template parms from our
	context.

	* lex.c, cp-tree.h: Remove support for template instantiations in
	the pending_inlines code.
	* pt.c: Remove dead functions and unused arguments.
	(uses_template_parms): TYPENAME_TYPEs always use template parms.
	* parse.y: Stop passing anything to end_template_decl.
	* tree.c (print_lang_statistics): Only print tinst info #ifdef
	GATHER_STATISTICS.

Wed Feb 21 16:57:33 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (expand_recursive_init{,_1}): Delete decls. 
	(sort_member_init): Delete unused var INIT.
	(emit_base_init): Delete unused var X.
	(build_offset_ref): Delete unused var CNAME.
	(sort_member_init): Delete unused var FIELDS_TO_UNMARK.
	(emit_base_init): Delete unused local var BASE.  Delete extern
	decl of IN_CHARGE_IDENTIFIER.
	(build_delete): Delete unused local var VIRTUAL_SIZE.

	* init.c (build_vec_delete): Delete unused third arg ELT_SIZE.
	(build_delete): Fix call.
	* decl2.c (delete_sanity): Likewise.
	* cp-tree.h (build_vec_delete): Update prototype.

	* typeck.c (common_base_type): Delete unused var TMP.
	(build_binary_op): Delete local var ARGS_SAVE.
	(build_array_ref): Delete unused var ITYPE.
	(c_expand_return): Delete unused var USE_TEMP.

	* typeck.c (compexcepttypes): Delete unused arg STRICT.
	(comptypes): Fix calls.
	* decl.c (duplicate_decls): Likewise.
	* cp-tree.h (compexcepttypes): Delete extra arg.

	* decl2.c (check_classfn): Delete unused second arg CNAME.
	* decl.c (start_decl, grokfndecl): Fix calls.
	* init.c (do_friend): Likewise.
	* cp-tree.h (check_classfn): Update prototype.

	* cp-tree.h (signature_error, import_export_vtable,
	append_signature_fields, id_in_current_class, mark_used,
	copy_assignment_arg_p): Add decls.
	* decl2.c (mark_used): Delete decl.

	* class.c (n_*): Wrap with #ifdef GATHER_STATISTICS.

	* class.c (get_vtable_entry): Diable unused function.
	(doing_hard_virtuals): Delete unused static global var.
	(finish_struct_1): Don't init DOING_HARD_VIRTUALS.
	(prepare_fresh_vtable): Delete unused vars PATH and RESULT.
	(overrides): Delete unused vars RETTYPE and BASE_RETTYPE.
	(modify_one_vtable): Delete unused var OLD_RTTI.
	(finish_struct_anon): Delete unused vars OFFSET and X.
	(finish_struct_bits): Delete unused var METHOD_VEC.
	(get_basefndecls): Delete unused var PURPOSE.  Delete unused
	for-scope local variable METHODS.

	* call.c (user_harshness): Delete unused/unneeded arg PARM.
	(ideal_candidate): Delete unused args BASETYPE and PARMS.
	(build_method_call): Delete unused args passed into ideal_candidate.
	(build_overload_call_real): Likewise.  Delete unused var OVERLOAD_NAME.
	* cp-tree.h (synthesize_method): Add decl.

	* decl.c (note_level_for_for): Give void return type.
	(pushdecl_nonclass_level): Likewise.
	(finish_function): Delete unused vars VFIELDS and ALLOCATED_THIS.
	(poplevel): Delete unused var IMPLICIT_TRY_BLOCK.
	(suspend_binding_level): Delete unused var LEVEL.
	(duplicate_decls): Delete unused var CTYPE.
	(duplicate_decls): Delete unused var PREVIOUS_C_DECL.
	(init_decl_processing): Delete unused vars FLOAT_ENDLINK and
	PTR_ENDLINK.
	(grokdeclarator): Delete unused var C.
	(grokdeclarator): Delete unused var SIZE_VARIES.
	(grokparms): Delete unused var SAW_VOID.
	(start_function): Delete unused var OLDDECL.
	(cplus_expand_expr_stmt): Delete unused var
	REMOVE_IMPLICIT_IMMEDIATELY. 

	* cp-tree.h (pushdecl_nonclass_level): Fix prototype.

	* Makefile.in (CONFLICTS): Update to 12 shift/reduce.

Wed Feb 21 00:06:17 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (build_min): Set TREE_COMPLEXITY to lineno.
	(build_min_nt): Likewise.
	* pt.c (do_pushlevel): Emit line note.
	(do_poplevel): Return what we get from poplevel.
	(tsubst_expr): Set lineno from TREE_COMPLEXITY in stmt nodes.
	* parse.y: Use do_pushlevel and do_poplevel.
	* cp-tree.h: Declare do_poplevel.
	
	* cp-tree.h: Declare at_eof.
	* decl.c (cp_finish_decl): Pass it to rest_of_decl_compilation.
	* decl2.c (import_export_decl): Renamed from import_export_inline.
	(finish_file): Call it to do interface handling for statics.
	* pt.c (tsubst_copy): Call mark_used on variables and functions
	used here.

	* decl2.c (finish_file): Don't emit statics we can't generate.
	* pt.c (instantiate_decl): Don't set interface on instantiations
	we can't generate.

	* cp-tree.h (struct tinst_level): Change 'classname' to 'decl'.
	* tree.c (print_lang_statistics): Print max template depth.
	* pt.c (push_tinst_level): Dump entire instantiation context.
	(instantiate_class_template): Use it and pop_tinst_level.
	(instantiate_decl): Likewise.

	* call.c class.c cp-tree.h decl.c decl2.c error.c lex.c method.c
	pt.c ptree.c tree.def: Remove all traces of UNINSTANTIATED_P_TYPE.

Tue Feb 20 18:21:51 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* call.c class.c cp-tree.h cvt.c decl.c decl2.c error.c expr.c
	init.c lex.c method.c parse.y pt.c repo.c search.c spew.c tree.c
	tree.def typeck.c typeck2.c xref.c: Massive, systemic changes for
	the new template implementation.

Tue Feb 20 17:14:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (check_cp_case_value): Use STRIP_TYPE_NOPS.

Thu Feb 15 18:44:42 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (cp_finish_decl): Delay emitting the debug information for
	a typedef that has been installed as the canonical typedef, if the
	type has not yet been defined.

Thu Feb 15 09:39:08 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (grokfield): Still call pop_nested_class for access decls.

Wed Feb 14 17:30:04 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (lookup_label): Call label_rtx.

	* decl.c (make_binding_level): New function.
	(pushlevel, pushlevel_class): Call it instead of explicit
	duplicate calls to xmalloc.

	* decl.c (init_decl_processing): Delete useless build_pointer_type
	call.

	* decl.c (float_ftype_float, ldouble_ftype_ldouble): Add definitions.
	(sizet_ftype_string): Delete variable.
	(init_decl_processing): Add built-in functions fabsf, fabsl,
	sqrtf, sqrtl, sinf, sin, sinl, cosf, cos, cosl.  New local
	variable strlen_ftype, used for strlen.

Wed Feb 14 16:21:25 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (push_to_top_level): Start from current_binding_level
	again for now; the stl hacks depend on g++ being broken in this
	way, and it'll be fixed in the template rewrite.

	* tree.def: Add USING_DECL.
	* decl2.c (do_class_using_decl): Implement.
	(grokfield): Pass access decls off to do_class_using_decl instead of
	grokdeclarator.
	* error.c (dump_decl): Handle USING_DECLs.
	* decl.c (grokdeclarator): Remove code for handling access decls.
	* class.c (finish_struct_1): Adjust accordingly, treat using-decls
	as access decls for now.
	(finish_struct): Don't check USING_DECLs for other uses of the name.

	* search.c (get_matching_virtual): Use cp_error_at.

Wed Feb 14 10:36:58 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* typeck.c (comptypes): Default COMP_TYPE_ATTRIBUTES to 1, to
	match c-typeck.c.
	(self_promoting_args_p): Move the check that TYPE is non-nil
	before trying to look at its main variant.
	(unsigned_type, signed_type): Add checking of DI/SI/HI/QI nodes.

	* cp-tree.h (DECL_WAITING_FRIENDS, SET_DECL_WAITING_FRIENDS):
	Delete macros.
	* init.c (xref_friend, embrace_waiting_friends): Delete functions.
	(do_friend): Delete call to xref_friend.
	* class.c (finish_struct_1): Delete call to embrace_waiting_friends.

	* typeck.c (convert_sequence): #if 0 unused function.

	* cp-tree.h (DECL_IN_MEMORY_P): New macro w/ the check that used to
	be in decl_in_memory_p.
	(decl_in_memory_p): Delete decl.
	* expr.c (decl_in_memory_p): Delete fn.
	* typeck.c (mark_addressable): Use DECL_IN_MEMORY_P.

	* decl.c (cp_finish_decl): Use DECL_IN_MEMORY_P.

Tue Feb 13 12:51:21 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_1): Check for a pure-specifier on a
	non-virtual function here.

	* decl2.c (grok_function_init): Don't check whether the function
	is virtual here.
	(grokfield): Don't call check_for_override here.

	* decl.c (push_to_top_level): Start from inner_binding_level,
	check class_shadowed in class levels.

Mon Feb 12 17:46:59 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (resume_level): Ignore things that don't have names, instead
	of core dumping.

Mon Feb 12 15:47:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (grokfield): Set DECL_VINDEX properly for FUNCTION_DECLs.

Sat Feb 10 17:59:45 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_1): Set DECL_VINDEX properly on a
	synthesized dtor.

	* parse.y (complete_type_name): Bind global_scope earlier.
	(complex_type_name): Likewise.
	(qualified_type_name): Remove.

Thu Feb  8 15:15:14 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (grokfndecl): Move code that looks for virtuals in base
	classes...
	* class.c (check_for_override): ... to a new function.
	(finish_struct_1): Call it.

	* cp-tree.h: Declare warn_sign_compare.

	* typeck.c (build_binary_op_nodefault): Check warn_sign_compare
	rather than extra_warnings to decide whether to warn about
	comparison of signed and unsigned.

	* decl2.c (lang_decode_option): Handle warn_sign_compare.  -Wall
	implies -Wsign-compare.  -Wall doesn't imply -W.

Wed Feb  7 15:27:57 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_component_ref): Fix to handle anon unions in base
	classes as well.

Wed Feb  7 14:29:12 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* class.c (resolves_to_fixed_type_p): Delete code dealing with
	a WITH_CLEANUP_EXPR, since we don't generate them any more.
	* cvt.c (build_up_reference): Likewise.
	* decl.c (grok_reference_init): Likewise.
	(cp_finish_decl): Likewise.
	* error.c (dump_expr): Likewise.
	* tree.c (real_lvalue_p): Likewise.
	(lvalue_p): Likewise.
	(build_cplus_new): Likewise.
	(unsave_expr_now): Likewise.
	* typeck.c (unary_complex_lvalue, build_modify_expr,
	c_expand_return): Likewise.

Tue Feb  6 13:39:22 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Make the C++ front-end pay attention to attributes for structures.
	* class.c (finish_struct): New argument ATTRIBUTES, passed down into
	finish_struct_1.
	(finish_struct_1): New argument ATTRIBUTES; call cplus_decl_attributes.
	Take out old round_up_size use and setting the DECL_ALIGN possibly
	using it.  Take out setting of TYPE_ALIGN to round_up_size, which
	can override what the attribute set.
	* cp-tree.h (finish_struct): Update prototype.
	* parse.y (template_instantiate_once): Pass a NULL_TREE for the
	attributes to finish_struct.
	(structsp): For a CLASS decl, add maybe_attribute to rule and pass that
	value down into finish_struct.
	* Makefile.in (CONFLICTS): Switch to 7 shift/reduce conflicts.

Tue Feb  6 13:12:15 1996  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (poplevel):  Re-word dead for local handling.
	(pushdecl):  Remove useless DECL_DEAD_FOR_LOCAL test.
	(cp_finish_decl):  If is_for_scope, check for duplicates so
	we can disable is_for_scope.  Otherwise, preserve_temp_slots.

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

Mon Feb  5 17:46:46 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (initializing_context): Handle anon union changes, the
	context where fields of anon unions can be initialized now has to be
	found by walking up the TYPE_CONTEXT chain.

Fri Feb  2 14:54:04 1996  Doug Evans  <dje@charmed.cygnus.com>

	* decl.c (start_decl): #ifdef out code to set DECL_COMMON
	if ASM_OUTPUT{,_ALIGNED}_BSS is defined.
	(obscure_complex_init): If bss is supported, always set
	DECL_INITIAL to error_mark_node.

Thu Feb  1 16:19:56 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (is_friend): Make sure there's a context before we see if
	it's an aggr type.

Thu Feb  1 15:44:53 1996  Mike Stump  <mrs@cygnus.com>

	* init.c (is_friend): Classes are not friendly with nested classes.

Thu Feb  1 15:27:37 1996  Doug Evans  <dje@charmed.cygnus.com>

	* lex.c (check_newline): Pass last character read to HANDLE_PRAGMA,
	and record its result.

Thu Feb  1 09:27:01 1996  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct_anon): Switch around code to not move anon
	union elements around, nor mess up their contexts, nor offsets,
	instead we now build up the right number of COMPONENT_REFs for all
	the anon unions that may be present at build_component_ref time.
	* typeck.c (lookup_anon_field): New routine to handle field lookup
	on fields without names.  We find them, based upon their unique type
	instead.
	* typeck.c (build_component_ref): Allow FIELD_DECL components.
	Handle finding components in anonymous unions, and ensure that a
	COMPONENT_REF is built for each level as necessary.

Tue Jan 30 18:18:23 1996  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Make the INDIRECT_BIND case come after
	code that ensures that copy ctors are used if appropriate.

Tue Jan 30 17:35:14 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_vec_delete): Only give an error if base isn't an
	error_mark_node.

Mon Jan 29 17:09:06 1996  Mike Stump  <mrs@cygnus.com>

	* spew.c (do_aggr): `new struct S;' isn't a forward declaration.
	(yylex): If we see `new', keep slurping.

Thu Jan 25 18:31:36 1996  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct_1): Move code for handling anon unions...
	(finish_struct_anon): to here.  Fixup so that we do the offset
	calculations right, and so that the fields are physically moved to
	the containers's chain.

Thu Jan 25 18:27:37 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Avoid trying to get an operand off an
	identifier node.

Wed Jan 24 11:25:30 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* typeck.c (pointer_int_sum): Use TYPE_PRECISION (sizetype) not
	POINTER_SIZE to agree with expr.c.

Thu Jan 25 13:01:23 1996  Mike Stump  <mrs@cygnus.com>

	* search.c (lookup_field): Don't report ambiguities if protect is 0,
	instead return NULL_TREE.

Wed Jan 24 13:01:26 1996  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct_1): Call warn_hidden if we want warnings
	about overloaded virtual functions.
	(warn_hidden): New routine to warn of virtual functions that are
	hidden by other virtual functions, that are not overridden.
	(get_basefndecls): New routine, used by warn_hidden.
	(mark_overriders): New routine, used by warn_hidden.
	* search.c (get_matching_virtual): Remove old warning that just
	isn't very useful.

Tue Jan 23 12:26:10 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (output_builtin_tdesc_entries): #if 0 the function definition.

	* typeck.c (null_ptr_cst_p): Delete unused fn.
	(build_function_call_maybe): Delete unused fn.

	* expr.c (extract_init): #if 0 the code after unconditional return 0
	for now.

	Delete old cadillac code.
	* edsel.c: Remove file.
	* Make-lang.in (CXX_SRCS): Take edsel.c off the list.
	* Makefile.in (CXX_OBJS): Delete edsel.o.
	(edsel.o): Delete rule.
	* cp-tree.h (flag_cadillac): Delete var decl.
	* lang-options.h: Delete "-fcadillac" and "-fno-cadillac".
	* decl2.c (flag_cadillac): Delete var definition.
	(lang_decode_option): Delete handling of -fcadillac and -fno-cadillac.
	(grokfield): Delete code depending on flag_cadillac.
	(finish_anon_union): Likewise.
	* class.c (finish_struct_1): Likewise.
	(pushclass): Likewise.
	(popclass): Likewise.
	(push_lang_context): Likewise.
	(pop_lang_context): Likewise.
	* decl.c (init_decl_processing): Likewise.
	(start_decl): Likewise.
	(cp_finish_decl): Likewise.
	(xref_tag): Likewise.
	(finish_enum): Likewise.
	(start_function): Likewise.
	(finish_function): Likewise.
	(finish_stmt): Likewise.
	* lex.c (lang_init): Likewise.
	(check_newline): Likewise.

	* lex.c (do_pending_inlines): Delete synthesized method kludge.

	Delete defunct, ancient garbage collection implementation.
	* rtti.c: New file with the RTTI stuff from gc.c.
	* gc.c: Removed file (moved the remaining stuff into rtti.c).
	* Makefile.in (CXX_OBJS): Replace gc.o with rtti.o.
	(rtti.o): New rule, replacing gc.o.
	* Make-lang.in (CXX_SRCS): Replace gc.c with rtti.c.
	* cp-tree.h: Delete gc-related fn decls.
	(DECL_GC_OFFSET): Delete macro.
	(flag_gc): Delete extern decl.
	* decl.c (current_function_obstack_index): Delete var decl.
	(current_function_obstack_usage): Delete var decl.
	(start_function): Delete clearing of current_function_obstack_index
	and current_function_obstack_usage.
	(init_decl_processing): Delete code relying on -fgc.
	Delete call to init_gc_processing.
	(cp_finish_decl): Delete calls to build_static_gc_entry and
	type_needs_gc_entry.  Delete gc code setting DECL_GC_OFFSET.
	(store_parm_decls): Delete -fgc calls to cp_expand_decl_cleanup
	and to expand_expr of a __gc_main call.
	(maybe_gc_cleanup): Delete var decl.
	(finish_function): Delete call to expand_gc_prologue_and_epilogue.
	* decl2.c (flag_gc): Delete var decl.
	(lang_f_options): Delete offering of -fgc.
	(lang_decode_option): Delete -fgc and -fno-gc handling.
	(get_temp_regvar): Delete gc code.
	* init.c (build_new): Delete gc code.
	* lex.c (init_lex): Delete checking of flag_gc.

	* typeck.c (convert_arguments): Delete gc code.
	(build_component_addr): Delete -fgc warning.
	(build_modify_expr): Delete gc code.

	* decl2.c (build_push_scope): Delete fn.
	* cp-tree.h (build_push_scope): Delete decl.

	* search.c (clear_search_slots): Delete fn.
	* cp-tree.h (clear_search_slots): Delete decl.

	* search.c (tree_needs_constructor_p): Delete fn.
	* cp-tree.h (tree_needs_constructor_p): Delete decl.

	* tree.c (id_cmp): Delete fn.

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

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

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

	* method.c (cplus_exception_name): Delete fn.
	(EXCEPTION_NAME_{PREFIX, LENGTH}): Delete macros.

	* spew.c (shift_tokens): Delete fn.

Mon Jan 22 17:49:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* except.c (init_exception_processing): Pass 1 to needs_pop in calls
	to cp_finish_decl.
	* parse.y: Likewise.

Mon Jan 22 17:34:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* tree.c (build_cplus_staticfn_type): Delete function definition;
	never used.
	* cp-tree.h (build_cplus_staticfn_type): Delete decl.

	* tree.c (virtual_member): Delete function definition; never used.
	* cp-tree.h (virtual_member): Delete decl.

Fri Jan 19 18:03:14 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_component_ref): Handle getting vbase pointers
	out of complex multiple inheritance better.

Fri Jan 19 16:27:40 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (build_object_ref): Make sure we use the real type, not
	any reference type.

Fri Jan 19 16:01:47 1996  Mike Stump  <mrs@cygnus.com>

	* tree.c (build_exception_variant): Don't create new types if we
	don't have to, also build new types on the right obstack.

Fri Jan 19 14:09:44 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (store_bindings): Split out from push_to_top_level.
	(push_to_top_level): Call it for b->type_shadowed on class binding
	levels.

Fri Jan 19 13:53:14 1996  Mike Stump  <mrs@cygnus.com>

	* search.c (expand_upcast_fixups): Fix so that offsets stored in
	vbase_offsets are always right.  Fixes a problem where virtual base
	upcasting and downcasting could be wrong during conversions on this
	during virtual function dispatch at ctor/dtor time when dynamic
	vtable fixups for deltas are needed.  This only sounds easier than
	it is.  :-)
	(fixup_virtual_upcast_offsets): Change to reflect new calling
	convention for expand_upcast_fixups.

Fri Jan 19 12:23:08 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (grokbitfield): Strip the NOPs from WIDTH before we
	check that it's usable as the bitfield width.

Wed Jan 17 21:22:40 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (grokfield): Call cplus_decl_attributes with the attrlist.
	Pass a null tree to grokdeclarator for its ATTRLIST arg, since it's
	only ever used for functions in it.

Wed Jan 17 12:10:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* parse.y (qualified_type_name): Use the TYPE_DECL, not the type.
	(nested_type): Likewise.
	(nested_name_specifier): Use lastiddecl.

	* decl.c (grokdeclarator): Adjust accordingly.
	* init.c (expand_member_init): Likewise.
	* parse.y (base_class): Likewise.
	* typeck2.c (build_functional_cast): Likewise.

	* typeck2.c (build_functional_cast): Fill in name after we've
	checked for non-aggr type.

Wed Jan 17 10:18:01 1996  Mike Stump  <mrs@cygnus.com>

	* decl2.c (warn_pointer_arith): Default to on.

Tue Jan 16 12:45:38 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* lex.c (is_rid): New function.
	* decl.c (grokdeclarator): Diagnose reserved words used as
	declarator-ids.

Tue Jan 16 11:39:40 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* tree.c (get_decl_list): Don't lose cv-quals.

	* decl.c (grokdeclarator): Fix SCOPE_REF handling and diagnose
	typespecs used as declarator-ids.

Tue Jan 16 11:09:42 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (poplevel): When poping a level, don't give a warning for
	any subblocks that already exist.

Tue Jan 16 00:25:33 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_object_ref): Finish what I started.

	* parse.y (qualified_type_name): Don't check TYPE_BUILT_IN.

	* decl2.c (constructor_name_full): Handle TEMPLATE_TYPE_PARMs.

	* decl.c (grokdeclarator): Also accept TEMPLATE_TYPE_PARM as a
	scope.

Mon Jan 15 16:19:32 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* decl.c (xref_tag): Handle passing a type in directly.

	* parse.y (qualified_type_name): Pull out the type.
	(nested_type): Likewise.
	Take types directly instead of as identifiers.
	* call.c (build_scoped_method_call): Take types directly instead of
	as identifiers.
	* decl.c (xref_basetypes): Likewise.
	* init.c (expand_member_init): Likewise.
	(build_member_call): Likewise.
	(build_offset_ref): Likewise.
	* typeck2.c (build_scoped_ref): Likewise, remove bogus code.
	* method.c (do_build_assign_ref): Likewise.
	* decl.c (grokdeclarator): Handle a type appearing as the
	declarator-id for constructors.
	* method.c (do_build_copy_constructor): current_base_init_list now
	uses the types directly, not their names.
	* init.c (sort_base_init): Likewise.
	(expand_member_init): Likewise.
	* init.c (is_aggr_type): New function, like is_aggr_typedef.

Mon Jan 15 08:45:01 1996  Jeffrey A Law  <law@cygnus.com>

	* tree.c (layout_basetypes): Call build_lang_field_decl instead
	of build_lang_decl if first arg is a FIELD_DECL.

Thu Jan 11 14:55:07 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (cp_finish_decl): Only clear TREE_USED if DECL_NAME is
	non-empty.
	* except.c (expand_start_catch_block): Set TREE_USED to avoid
	warnings about the catch handler.

Mon Jan  8 17:35:12 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* typeck.c (build_modify_expr): Use a COMPOUND_EXPR instead of
	expand_target_expr.

Thu Jan  4 12:30:32 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	Fix access control to use trees rather than integers.
	* class.c (access_{default, public, protected, private,
	default_virtual, public_virtual, private_virtual}_node): Add
	definitions.
	(init_class_processing): Do creation of those nodes.
	* cp-tree.h (access_type): Delete enum decl.
	(access_{default, public, protected, private, default_virtual,
	public_virtual, private_virtual}_node): Add decls.
	(compute_access): Change return type.
	* search.c (compute_access): Have tree return type, instead of enum.
	(lookup_field): Declare THIS_V and NEW_V to be tree nodes.
	* lex.c (real_yylex): Use yylval.ttype for giving the value of the
	access_* node for each of RID_{PUBLIC, PRIVATE, PROTECTED}.
	* parse.y (VISSPEC): Make ttype rather than itype.
	(base_class_access_list): Likewise.
	* *.[cy]: Change all refs of `access_public' to `access_public_node',
	etc.
	* call.c (build_method_call): Make ACCESS be a tree.
	* class.c (alter_access, finish_struct_1, filter_struct): Likewise.
	* cvt.c (convert_to_aggr): Likewise.
	* init.c (build_offset_ref, resolve_offset_ref, build_delete):
	Likewise.
	* method.c (hack_identifier): Likewise.
	* typeck.c (build_component_ref_1, build_component_ref): ): Likewise.

Thu Jan  4 11:02:20 1996  Mike Stump  <mrs@cygnus.com>

	* typeck.c (pointer_int_sum, pointer_diff): Make code agree with C
	frontend, and make it more consistent with respect to
	warn_pointer_arith.

Tue Jan  2 00:13:38 1996  Rusty Russell  <rusty@adelaide.maptek.com.au>

	* decl.c (pushdecl): Check for duplicate parameter names.

Wed Jan  3 09:25:48 1996  Mike Stump  <mrs@cygnus.com>

	* decl.c (expand_static_init): Call assemble_external for atexit.

Wed Jan  3 07:55:19 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (do_unwind): Remove some generated dead code.
	(eh_outer_context): New routine, factor out some common code from
	expand_builtin_throw and end_eh_unwinder.  Add code to do return
	address masking for the PA.
	(expand_builtin_throw): Use eh_outer_context instead of open coding
	it here.
	(end_eh_unwinder): Likewise.

Tue Jan  2 17:00:56 1996  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Call assemble_external for __empty, if we
	use it.

Thu Dec 28 11:13:15 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Use RETURN_ADDR_OFFSET instead of
	NORMAL_RETURN_ADDR_OFFSET.
	(end_eh_unwinder): Likewise.

Wed Dec 27 22:18:16 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_dynamic_cast): Make sure we don't cast away const
	when dealing with references, and make sure we handle dynamic
	casting to a cv qualified reference.

Thu Dec 21 23:50:35 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (struct eh_context): New structure top hold eh context
	information.
	(push_eh_context): New routine.
	(pop_eh_context): Likewise.
	* decl.c (push_cp_function_context): Use them.
	(pop_cp_function_context): Likewise.

Wed Dec 20 12:42:51 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Also prune uninteresting functions in the
	inline emission loop.

Wed Dec 20 02:32:07 1995  Jeffrey A Law  <law@cygnus.com>

	* sig.c (build_signature_table_constructor): Mark functions
	in the signature as referenced.

Tue Dec 19 22:36:56 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (finish_file): Do all the vtable/synthesis stuff before
	the inline emission stuff.

Mon Dec 18 15:51:33 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* cp-tree.h, decl2.c (flag_weak): New flag to control the use of
	weak symbols.	
	* lang-options.h: Add -f{no-,}weak.
	* decl.c (init_decl_processing): If the target does not support weak
	symbols, don't use them.
	* decl2.c, pt.c: s/SUPPORTS_WEAK/flag_weak/.

Sun Dec 17 21:13:23 1995  Rusty Russell  <rusty@adelaide.maptek.com.au>

	* init.c (expand_member_init): warning for base init after members.

Fri Dec 15 15:32:18 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* cvt.c (build_expr_type_conversion): Don't convert to a reference
	type.

Thu Dec 14 16:05:58 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (report_type_mismatch): Improve wording for volatile
	mismatches.

Thu Dec 14 14:16:26 1995  Mike Stump  <mrs@cygnus.com>

	* init.c (expand_aggr_init_1): Use expand_aggr_init_1 instead of
	expand_assignment, as the later doesn't handle things that have
	copy constructors well.  The compiler would do bitwise copying,
	instead of ctor calling in some cases.

Wed Dec 13 17:05:54 PST 1995  Paul Eggert  <eggert@twinsun.com>

	* g++.c (my_strerror): Return "cannot access" if errno is 0.
	(pfatal_with_name, perror_exec): Don't assume that
	the returned value from my_strerror contains no '%'s.
	(concat): Remove.
	(sys_nerror): Declare only if HAVE_STRERROR is not defined.

Wed Dec 13 16:22:38 1995  Jason Merrill  <jason@yorick.cygnus.com>

	Lose CLASSTYPE_METHODS/DECL_NEXT_METHOD chain; make
	TYPE_METHODS/TREE_CHAIN mean what they used to.	
	* decl2.c (constructor_name_full): Refer to CLASSTYPE_METHOD_VEC
	instead of TYPE_METHODS.
	* decl.c (duplicate_decls): Lose references to DECL_NEXT_METHOD.
	* tree.c (tree_copy_lang_decl_for_deferred_output): Likewise.
	* cp-tree.h (CLASSTYPE_METHODS): Lose.
	(CLASSTYPE_METHOD_VEC): Point to lang_spec->methods instead of
	TYPE_METHODS.
	(struct lang_decl): Lose next_method field.
	(DECL_NEXT_METHOD): Lose.
	* class.c (finish_struct_methods): Don't mess with TYPE_METHODS.
	(finish_struct): Just use TYPE_METHODS; we don't need fn_fields
	anymore.
	(finish_struct_methods): Don't mess with the TREE_CHAINs in
	fn_fields.

	* search.c (add_conversions): Don't use TREE_CHAIN to traverse method
	vector.

	* call.c (build_method_call): Synthesize here even when not inlining.
	* typeck.c (build_function_call_real): Likewise.

Wed Dec 13 15:02:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* cp/lex.c (check_newline): If DBX_DEBUGGING_INFO and write_symbols
	== DBX_DEBUG, call dbxout_start_new_source_file and
	dbxout_resume_previous_source_file when appropriate.

Tue Dec 12 20:38:55 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (start_anon_func): Push to the top level.
	(end_anon_func): Pop from the top level.

Mon Dec 11 18:56:14 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (build_cleanup): New routine to build cleanups.
	* decl.c (expand_static_init): Use build_cleanup to build a cleanup
	call at ctor time and use atexit to run it later.
	* decl2.c (build_cleanup): New routine, taken from finish_file.
	(finish_file): Use build_cleanup instead, and don't put function
	local statics in global dtor list.
	
Wed Dec  6 14:34:29 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Ensure that we have cleanups, if we try
	and expand cleanups.

Wed Dec  6 11:48:21 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Add logic to manage dynamic cleanups for
	the EH object.
	(expand_end_catch_block): Use the magic of expand_goto, instead of
	emit_jump so that we get the cleanup for any catch clause parameter
	and the cleanup for the exception object.  Update to reflect label
	changes.
	(push_eh_cleanup): New routine to register a cleanup for an
	exception object.
	(empty_fndecl): Used to default cleanup actions to
	nothing.
	(init_exception_processing): Setup empty_fndecl.  Setup
	saved_cleanup.
	(expand_start_catch_block): Update to reflect label changes.  Call
	push_eh_object to register the cleanup for the EH object.
	(start_anon_func): New routine to start building lambda expressions
	from trees.
	(end_anon_func): New routine to end them.
	(struct labelNode): Change so that we can use tree labels, or rtx
	labels.
	(saved_cleanup): Object to check for dynamic cleanups for the
	exception handling object.
	(push_label_entry): Change so that we can use tree labels, or rtx
	labels.
	(pop_label_entry): Likewise.
	(top_label_entry): Likewise.
	(expand_start_all_catch): Use tree label instead of rtx label, so
	that we can get the magic of expand_goto.
	(expand_end_all_catch): Update to reflect label changes.

	* class.c (build_vfn_ref): Remove building_cleanup logic, as we now
	use UNSAVE_EXPRs.
	typeck.c (get_member_function_from_ptrfunc): Remove remnants of
	building_cleanup logic, as we now use UNSAVE_EXPRs.
	* cp-tree.h (unsave_expr): Declare it.
	* decl.c (building_cleanup): Remove.
	(maybe_build_cleanup): Remove building_cleanup logic, and use
	UNSAVE_EXPR instead.

Sun Dec  3 01:34:58 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_t_desc): Update error message to say <typeinfo>.

Thu Nov 30 12:30:05 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (pushdecl): Only warn about shadowing a local variable if
	warn_shadow is true.

Sun Nov 26 16:06:55 1995  Rusty Russell  <rusty@adelaide.maptek.com.au>

	* typeck.c (build_binary_op_nodefault): Added warning about
	comparisons between different enum types with -Wall, unless
	-fenum-int-equiv set.

Wed Nov 22 15:44:02 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct_1): Skip down to the inner type in
	multidimensional arrays.  Ensures ctors will be made for types that
	need constructing.

Wed Nov 22 14:19:22 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (last_dtor_insn): New to track the last compiler generated
	insn in a dtor.
	(store_parm_decls): Set it.
	(finish_function): Use it to see if the dtor is empty.  Avoid doing
	vtable setup all the time, if we can.
	(struct cp_function): Add last_dtor_insn.
	(push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.

Wed Nov 22 11:52:19 1995  Paul Russell  <Rusty.Russell@adelaide.maptek.com.au>

	* typeck.c (build_unary_op): Set TREE_NO_UNUSED_WARNING to avoid
	warnings.

Tue Nov 21 17:15:23 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (expand_target_expr): Make sure targets get put into the
	current temp_slot_level, so that the free_temp_slots call will reuse
	them.

Tue Nov 21 13:32:03 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_struct_1): Delay delta fixups for virtual bases
	until after we have done the hard virtuals, to avoid a bogus `every
	virtual function must have a unique final overrider' for virtual
	functions that are only overridden by hard virtuals.

Thu Nov  9 13:35:30 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* pt.c (do_function_instantiation): Don't try to find a file-scope
	template for a member function.

Tue Nov 14 06:20:35 1995  Mike Stump  <mrs@cygnus.com>

	* g++.c (main): Add handling of -nodefaultlibs.

Mon Nov 13 15:45:34 1995  Mike Stump  <mrs@cygnus.com>

	* cp-tree.h (INDIRECT_BIND): Add a way for the frontend to
	distinguish between direct bindings of reference variables, and
	indirect bindings of reference variables.
	* cvt.c (build_up_reference): Use it.
	* typeck.c (convert_arguments): Use it to indicate this is an
	indirect binding.
	* decl.c (cp_finish_decl): Ensure that we reuse stack slots as fast
	as they are unused.
	(expand_static_init): Likewise.
	(cplus_expand_expr_stmt): Likewise.
	* decl2.c (finish_file): Likewise.
	* init.c (perform_member_init): Likewise.
	(emit_base_init): Likewise.
	(expand_aggr_vbase_init_1): Likewise.

Fri Nov 10 09:18:09 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (push_namespace): Rewrite to use build_lang_decl, so we
	get a DECL_LANG_SPECIFIC node.
	* cp-tree.h (lang_decl_flags): Add new member `level'.
	(NAMESPACE_LEVEL): Don't use decl.arguments, instead use the
	decl_flags level member.

Mon Nov  6 18:36:13 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c (build_method_call): Make sure instance has a
	TYPE_LANG_SPECIFIC node before we dive into it.  

Sat Nov  4 20:01:52 1995  Jason Molenda  <crash@phydeaux.cygnus.com>

	* method.c (make_thunk): use TREE_SET_CODE to set thunk's tree code.

Thu Nov  2 17:56:57 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (duplicate_decls): When smashing decls, smash staticness in
	the usual way.

Thu Nov  2 16:44:02 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (poplevel): Handle the merging of subblocks of cleanups
	when finishing blocks that have already been created (usually due to
	the fixup goto code).  Fixes bad debugging information.

Wed Nov  1 12:33:53 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* method.c (hack_identifier): Don't abort when we get a TREE_LIST
	that's not a list of overloaded functions.

Wed Nov  1 11:38:58 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (mark_vtable_entries): Check DECL_LANG_SPECIFIC on fn
	before trying to use DECL_ABSTRACT_VIRTUAL_P.

Tue Oct 31 11:56:55 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* decl2.c (mark_used): New function for hooking into setting of
	TREE_USED on decls.
	* call.c (build_method_call): Use it.
	* class.c (instantiate_type): Likewise.
	* init.c (build_offset_ref): Likewise.  Don't call assemble_external
	for all like-named functions.
	* method.c (hack_identifier): Likewise.
	(emit_thunk): Don't call assemble_external.
	(make_thunk): Create thunk as a FUNCTION_DECL so that it
	gets the right mode and ENCODE_SECTION_INFO works.
	
	* parse.y: Use mark_used.  Pass operator names to do_identifier.
	* lex.c (do_identifier): Handle operator names.

	* decl2.c (grokclassfn): Tweak __in_chrg attributes.

Thu Oct 26 16:45:58 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* errfn.c: Include stdio.h.
	(cp_sprintf): Take out decl of sprintf, and cast sprintf to errorfn*.

Wed Oct 25 18:58:41 1995  Mike Stump  <mrs@cygnus.com>

	* typeck2.c (digest_init): Always convert initializers to the
	right type.

Wed Oct 25 13:25:24 1995  Mike Stump  <mrs@cygnus.com>

	* init.c (member_init_ok_or_else): Don't allow member initializers
	for indirect members, as it is invalid.

Wed Oct 25 11:35:28 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow `friend signed ()'.

Fri Oct 20 10:30:59 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (for.init.statement): Catch compound statements inside for
	initializations, if we're being pedantic.

Fri Oct 20 10:03:42 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (lookup_tag): Return NULL_TREE if we don't find what we are
	looking for.

Thu Oct 19 14:26:10 1995  Mike Stump  <mrs@cygnus.com>

	* error.c (dump_expr): Don't core dump when a boolean expression is
	used as a default argument.

Thu Oct 19 10:36:30 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_bits): Check aggregate_value_p instead of
	RETURN_IN_MEMORY.

Wed Oct 18 18:12:32 1995  Jason Merrill  <jason@yorick.cygnus.com>

	* class.c (finish_struct_bits): Also set TREE_ADDRESSABLE on a
	BLKmode type that would otherwise be returned in registers.

Mon Oct 16 12:32:19 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* g++.c (WITHLIBC): New macro.
	(main): Declare saw_libc.  Use WITHLIBC if `-lc' was used; set
	saw_libc and pass it at the end if it was set.

Wed Oct 11 16:30:34 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (fn.def1): Call split_specs_attrs in
	declmods notype_declarator case.

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

	* Version 2.7.2 released.

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

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

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

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

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

	* Version 2.7.1 released.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* decl.c (store_parm_decls): Add a call to start_eh_unwinder.
	* except.c (init_exception_processing): __throw doesn't take any
	arguments.
	(expand_builtin_throw): Likewise.  Always use Pmode, instead of SImode
	for all pointers.  Use expand_builtin_return_addr to unwind the
	first level off the stack.
	(do_unwind): Always use Pmode, instead of SImode for all pointers.
	(expand_exception_blocks): Add a call to end_eh_unwinder.
	(start_eh_unwinder, end_eh_unwinder): New routines to build machine
	independent stack unwinders for function/method calls.
	
Mon Oct  2 17:20:42 1995  Mike Stump  <mrs@cygnus.com>

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

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

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

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

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

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

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

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

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

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

	* decl.c (init_decl_processing): Add __builtin_expect.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* except.c (expand_builtin_throw): Moved gen_label_rtx calls beyond
	the store_parm_decls call which does initialization in the emit_*
	code concerning label numbering.
	
Thu Aug 31 09:01:07 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_internal_throw): Let the frontend be responsible
	for managing all frontend EH parameters, the backend routine only
	needs to deal with backend values.  type and value are no longer
	passed to __throw.
	(init_exception_processing): Likewise.
	(expand_start_all_catch): Likewise.
	(expand_end_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_builtin_throw): Likewise.
	(expand_throw): Likewise.
	
Tue Aug 29 15:04:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* typeck.c (comp_target_types): Fix.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* g++.1: Tiny updates.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* pt.c (tsubst): Handle PROMOTE_PROTOTYPES.

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

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

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

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

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

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

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

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

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

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

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

	* decl.c (finish_function): Clear current_class_decl.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* Version 2.7.0 released.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* tree.c (copy_to_permanent): Oops.

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

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

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

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

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

	* typeck.c (convert_arguments): Use it.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* various: Use TYPE_HAS_TRIVIAL_* instead of TYPE_HAS_COMPLEX_*.

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

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

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

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

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

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

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

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

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

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

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

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

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

	* expr.c (cplus_expand_expr): Only abort if the returned target is
	different from what we expected if the type has a non-trivial copy
	constructor.

	* decl2.c (cplus_decl_attributes): Attributes applied to a template
	really apply to the template's result.

	* tree.c (lvalue_p): Check IS_AGGR_TYPE instead of TREE_ADDRESSABLE
	to decide whether to consider a CALL_EXPR an lvalue.

	* class.c (finish_struct_bits): Only set TREE_ADDRESSABLE if the
	type has a non-trivial copy constructor.

	* decl.c (start_function): If interface_known, unset
	DECL_NOT_REALLY_EXTERN on the function.

Wed Apr 19 16:53:13 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (do_function_instantiation): Handle explicit instantiation of
	member functions.
	(do_type_instantiation): Handle 'inline template class foo<int>',
	meaning just spit out the vtable.

	* lex.c (cons_up_default_function): Set DECL_NOT_REALLY_EXTERN on
	the consed functions.

	* decl2.c (import_export_inline): Set DECL_INTERFACE_KNOWN.

Wed Apr 19 16:28:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* call.c, class.c, decl2.c, gc.c, init.c, parse.y, pt.c, search.c,
	typeck.c: Include output.h.

Wed Apr 19 14:57:21 1995  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>

	* call.c (build_method_call): Allow a signature member functions to
	be called from a default implementation.

Wed Apr 19 10:21:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (finish_repo): Remember what directory we are in.

	* search.c (expand_upcast_fixups): Don't mess with abort_fndecl.

	* repo.c: Use obstacks instead of fixed-size buffers.  Don't spit
	out the second copy of the symbol name.  Don't remember COLLECT_GCC.

Wed Apr 19 02:32:40 1995  Mike Stump  <mrs@cygnus.com>

	* search.c (virtual_context): New function to get the virtual
	context of a function.
	(expand_upcast_fixups): New function to generate runtime vtables.
	(fixup_virtual_upcast_offsets): Likewise.
	(expand_indirect_vtbls_init): Use fixup_virtual_upcast_offsets to
	ensure that the this offsets for upcasts from virtual bases into
	other virtual bases or non-virtual bases are correct at construction
	time and destruction time.
	* class.c (fixup_vtable_deltas): Modify to fixup all offsets in all
	vtables in all virtual bases, instead of just one vtable in each
	virtual base.
	(fixup_vtable_deltas1): Likewise.

Tue Apr 18 03:57:35 1995  Michael Meissner  <meissner@cygnus.com>

	* Makefile.in (lex.o): Add dependency on c-pragma.h.

	* lex.c (handle_sysv_pragma): Use NULL_PTR and NULL_TREE as
	appropriate, instead of 0.

Mon Apr 17 12:28:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushdecl): Use decls_match, not duplicate_decls, for
	comparing local and global decls.

Fri Apr 14 01:46:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_arguments): Only prohibit passing to ... of
	types with non-trivial copy constructors.

	* repo.c (repo_template_used): Don't try to mess with no id.

Fri Apr 14 23:32:50 1995  Per Bothner  <bothner@rtl.cygnus.com>

	* decl.c (duplicate_decls):  Use cp_warning_at for redundant-decls.

Thu Apr 13 15:37:42 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (current_tinst_level): Delete declaration, since it's
	static inside pt.c.

	* typeck.c (build_modify_expr): Catch incompatible array assignment.

	* parse.y (attribute_list, attrib): Rewrite actions to feed the
	right stuff to decl_attributes.

Thu Apr 13 11:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (dfs_debug_mark): Check for magic virtual like
	import_export_vtable.

	* typeck.c (build_binary_op_nodefault): Don't call cp_pedwarn with
	four args.

Wed Apr 12 12:02:57 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl2.c (finish_file): Move prevtable pass before needs_messing_up
	decision.

Tue Apr 11 11:20:27 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_decl): If we're writing out a static data member of
	a class, we want the debug info for that class.

	* gc.c (build_t_desc): Check linkage of a class properly.

	* class.c (finish_struct): Set the 'headof' offset for the main
	vtable properly.
	(prepare_fresh_vtable): Fix typeinfo pointer here.
	(modify_one_vtable): Instead of here.

Mon Apr 10 12:15:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (repo_get_id): New function to return the interesting
	identifier for a repo entity.
	(repo_template_used): Use it.
	(repo_template_instantiated): Mark the id as chosen.
	(init_repo): Record whether or not the id was chosen.
	(finish_repo): Note if an id was newly chosen.

	* pt.c (do_function_instantiation): Call repo_template_instantiated.
	(do_type_instantiation): Likewise.  Don't diagnose multiple
	instantiation.

	* decl2.c (finish_file): Use DECL_NOT_REALLY_EXTERN when deciding
	whether or not to synthesize a method.

	Undo these changes:
	* class.c (finish_vtbls): build more vtables if flag_rtti is on.
	* class.c (modify_all_direct_vtables): ditto.
	* init.c (expand_direct_vtbls_init): expand more vtables if
	flag_rtti is on.

Sat Apr  8 17:45:41 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_headof): Use ptrdiff_type_node instead of
	integer_type_node on pointer arithmetic.

Sat Apr  8 11:57:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Undo previous change.

Thu Apr  6 01:23:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (compiler): Remove ../cc1plus before rebuilding it.

	* repo.c (get_base_filename): Put the .rpo file in the directory
	with the object file, not the source.

	* typeck.c (build_conditional_expr): Handle pmf's better.

	* repo.c (finish_repo): Also use ASM_OUTPUT_LABELREF to print out
	the name of the symbol.

Wed Apr  5 15:24:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (open_repo_file): Make repo filename DOS-compliant.
	(*): Also write a new repo file if some previously-used
	templates are no longer used.  Only remember the identifier.

	* lex.c (cons_up_default_function): If this function belongs to a
	template class, call repo_template_used for it.

	* repo.c (repo_template_used): Using a class means using its vtable,
	if any.
	(finish_repo): Likewise.

	* typeck.c (build_modify_expr): Only wrap TARGET_EXPRs in RTL_EXPRs
	if the type has a complex copy constructor.

	* decl2.c (lang_decode_option): -frepo implies
	-fno-implicit-templates.

	* decl.c (start_function): Clear current_{base,member}_init_list.

	* lex.c (init_lex): Also unset *_eq if ! flag_operator_names.

Tue Apr  4 16:11:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (struct cp_function): Add {base,member}_init_list.
	(push_cp_function_context): Save current_{base,member}_init_list.
	(pop_cp_function_context): Restore them.

Mon Apr  3 16:55:08 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (get_base_filename): Take filename parm, fix logic bug.

	* typeck.c (build_compound_expr): Do not warn about a compound expr
	in which the first expression has no side effects.
	(build_x_compound_expr): Warn here instead.
	(build_conditional_expr): Don't warn about a conditional expression
	between an enum and the type it promotes to.

	* init.c (build_new): Handle initialization of arrays of builtins
	properly.

Mon Apr  3 15:08:04 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* repo.c: Include config.h to get definitions of bcopy and rindex
	on systems that don't have them (e.g., SVR4).

Mon Apr  3 14:41:55 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_table): Pass NULL_TREE instead of init to
	finish_decl so that it won't try and do error checking on the
	initializer.

Mon Apr  3 10:45:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c (get_base_filename): Analyze COLLECT_GCC_OPTIONS to
	determine whether this compile used -c -o.
	(open_repo_file): Use get_base_filename.  Remove the extension.
	(finish_repo): Spit out the values of main_input_filename,
	COLLECT_GCC and COLLECT_GCC_OPTIONS.

	* parse.y (structsp): Add TYPENAME_KEYWORD complex_type_name.

Sun Apr  2 23:43:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (compute_access): Don't try to do access control on
	nested types.

Fri Mar 31 10:14:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* repo.c: New file to handle things repo.

	* pt.c (instantiate_template): Call repo_template_used if the
	definition is accessible.
	(mark_function_instantiated): Split out from
	do_function_instantiation.
	(mark_class_instantiated): Split out from do_type_instantiation.

	* parse.y (template_instantiate_once): Call repo_template_used.

	* lex.c (lang_init): Call init_repo.

	* decl2.c: Handle flag_use_repository.
	(finish_file): Call finish_repo.

	* decl.c (start_method): Call repo_template_used if this is a
	template method.

	* Makefile.in (CXX_OBJS): Add repo.o.
	(repo.o): Add dependencies.

	* Make-lang.in (CXX_SRCS): Add repo.c.

	* decl.c (start_function): If DECL_INTERFACE_KNOWN and
	DECL_NOT_REALLY_EXTERN are both set, unset DECL_EXTERNAL.

	* typeck.c (build_binary_op_nodefault): Identify the invalid operand
	types used.

	* decl.c (duplicate_decls): Propagate DECL_NOT_REALLY_EXTERN.

Thu Mar 30 17:54:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Tidy up use of build_type
	and result_type.  When checking for comparison between signed
	and unsigned, use result_type rather than the (possibly shortened)
	type of op0.  Also, don't warn about equality comparison of a
	signed operand to an unsigned constant that fits in the signed
	type.

	* method.c (do_build_copy_constructor): Reverse
	current_base_init_list after we've built it up.

Thu Mar 30 14:35:18 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (build_throw): Never warn about the value of throw not
	being used.

Thu Mar 30 13:16:54 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_start_catch_block): Check for bad catch parameter
	declarations.

Thu Mar 30 13:06:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): Only set DECL_NOT_REALLY_EXTERN if
	DECL_EXTERNAL is not already set.

Thu Mar 30 11:26:24 1995  Mike Stump  <mrs@cygnus.com>

	* method.c (emit_thunk): Let poplevel know that the last level is
	for a function so it can create a BLOCK_NODE and set DECL_INITIAL.

Thu Mar 30 11:15:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (import_export_inline): Don't set DECL_NOT_REALLY_EXTERN
	here.

	* decl.c (grokdeclarator): OK, don't abort if we see a decl with
	METHOD_TYPE.
	(finish_function): Set DECL_EXTERNAL and DECL_NOT_REALLY_EXTERN on
	all deferred inlines.

Wed Mar 29 19:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h (DECL_THIS_INLINE): New macro.
	(DECL_NOT_REALLY_EXTERN): New macro.
	(DECL_THIS_STATIC): New macro.

	* decl.c: Lose all references to current_extern_inline.  Break
	inline semantics into DECL_INLINE for actual inlining and
	DECL_THIS_INLINE for the linkage wierdness.  Use DECL_THIS_STATIC.
	* decl2.c: Use DECL_NOT_REALLY_EXTERN to indicate that we want to
	emit an inline here.  Associated changes.
	* lex.c: Likewise.
	* pt.c: Likewise.
	* typeck.c: Likewise.

	* call.c (build_method_call): Don't bother trying to handle inlines
	specially.
	* cvt.c (convert_to_aggr): Likewise.

	* pt.c (do_function_instantiation): Handle instantiation of
	public inlines, too.

Wed Mar 29 16:04:25 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Change the interface for
	__throw_type_match and add decl for new rtti matching routine
	__throw_type_match_rtti.
	(build_eh_type): New routine to build a run time descriptor for the
	expression given. 
	(expand_start_catch_block): Update to use new calling convention for
	the matcher.
	(expand_throw): Update to use build_eh_type.

Mon Mar 27 07:14:33 1995  Warner Losh	<imp@village.org>

	* g++.c: Removed __NetBSD__ from conditional.
	Declare strerror if HAVE_STRERROR is defined; otherwise
	declare sys_errlist and sys_nerr.
	(my_strerror): New function.

Tue Mar 28 14:16:35 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (get_binfo): Don't try to be so clever.

	* tree.c (copy_to_permanent): Also suspend_momentary().

	* cvt.c (cp_convert_to_pointer): Hand off to convert_fn_pointer even
	if the types are the same.

	* decl.c (start_function): Handle extern inlines more like C++ says
	we should.

	* init.c (build_member_call): Hand constructor calls off to
	build_functional_cast.

	* typeck2.c (build_functional_cast): Use DECL_NESTED_TYPENAME to get
	the name of the type.

Tue Mar 28 13:13:56 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Check for the decl returned by
	grokfndecl to be null before using build_decl_attribute_variant.

Mon Mar 27 18:04:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Use build_pointer_type instead of
	TYPE_POINTER_TO.

Fri Mar 24 12:11:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_conditional_expr): Handle pmfs.
	(convert_for_assignment): Fix pmf support.

	* cvt.c (convert_fn_ptr): Support !flag_vtable_thunks.
	(cp_convert_to_pointer): Handle pmfs.
	(cp_convert): Pass pmfs to cp_convert_to_pointer.

	* typeck.c (common_type): Handle inheritance for pmfs.

	* typeck2.c (build_m_component_ref): Do access control.

	* typeck.c (comp_target_types): Check for conversion to void *
	before checking trickier conversions.

	* decl.c (duplicate_decls): Propagate DECL_ABSTRACT_VIRTUAL_P.

	* pt.c (push_tinst_level): Complain if template instantiation depth
	is greater than max_tinst_depth.

	* typeck.c (common_type): Assume that we can call common_type to
	unify the target type of a pointer.

Thu Mar 23 00:48:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): Don't synthesize methods at
	finish_vtable_prevardecl time.  Do synthesize methods that are not
	used, but are public and not external.

	* cvt.c (build_type_conversion): Only give an error if for_sure.

	* typeck.c (comp_target_types): Only support pointer conversions if
	nptrs > 0.

Wed Mar 22 19:30:15 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Catch use of an initializer list where it
	shouldn't be.

Wed Mar 22 16:21:07 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Wrap alloc_expr in an RTL_EXPR if nelts is
	non-constant.

	* decl2.c: temp_name_counter is now public.

	* decl.c (struct cp_function): Add temp_name_counter field.
	(push_cp_function_context): Save it.
	(pop_cp_function_context): Restore it.

	* typeck.c (common_type): Handle unifying function types, and unify
	unmatched things to void* with a compiler_error, rather than
	silently like before.

Wed Mar 22 15:10:34 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_prevtable_vardecl, finish_vtable_vardecl): Revert
	Brendan's last change and fix latent problem that causes TD entries
	to not come out when the things that need them has yet to be
	expanded.

Wed Mar 22 15:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault, comparison ops): Update type0
	and type1, since we might have changed op0 or op1.

Wed Mar 22 13:33:45 1995  Jason Merrill  <jason@python.cygnus.com>

	* typeck.c (common_type): Don't mess up templates.

Wed Mar 22 04:56:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (common_type): Handle ptms properly.  Also handle 
	T* -> void*.
	(build_binary_op_nodefault): New variable build_type controls what
	type is given to the expression when it is created.  Set this to
	boolean_type_node for comparison ops instead of using result_type.
	(comp_target_types): Allow T * -> void *.

	* cvt.c (cp_convert_to_pointer): Do access control when converting
	ptms, too.

Tue Mar 21 17:25:06 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (extern_lang_string): Catch use of linkage specs that
	aren't all naming the same language.

	* class.c (finish_struct): Delete accidental duplicate code.

Tue Mar 21 14:00:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Disable pedwarns about
	comparing functions and incomplete types.

	* decl.c (finish_function): Only unset current_function_decl if
	!nested.
	(duplicate_decls): Last change went too far; we only want to stop
	checking for value/reference ambiguity.

Tue Mar 21 01:26:39 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_generic_desc): Zap the DECL_SIZE so that we can lay it
	out fresh, as the new type may be larger.

Mon Mar 20 19:01:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* expr.c (extract_init): Try to expand the RTL for the
	initialization and figure out what it will look like so we can avoid
	run-time initialization.  Disabled for now.
	(extract_scalar_init): Helper for scalar initialization.
	(extract_aggr_init): Helper for aggregate initialization.

	* decl.c (duplicate_decls): Don't complain about ambiguous
	declarations.
	(obscure_complex_init): Now returns a tree.  Call extract_init if
	we're optimizing and this is a toplevel decl.
	(finish_decl): Update accordingly.

	* lex.c (check_newline): If we're just changing files (not pushing
	or popping), update input_file_stack->name.

Mon Mar 20 17:55:04 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (type_unification): Only TEMPLATE_DECLs are handled right now
	in the transitive unification code.

Mon Mar 20 16:07:50 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (shadow_tag): Don't allow inline, virtual, or explicit on
	non-functions.
	(grokdeclarator): Don't allow friends to be defined in local classes.

Sat Mar 18 04:03:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_prevtable_vardecl): Use DECL_DECLARED_STATIC
	rather than DECL_SAVED_INSNS to decide whether or not this method
	was declared inline.

	* method.c (synthesize_method): Turn off DECL_INLINE if
	function_cannot_inline_p thinks we're too large.

	* typeck.c (build_indirect_ref): Use build_expr_type_conversion.

Fri Mar 17 17:47:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (instantiate_type): Handle pmfs.

	* typeck.c (convert_for_assignment): Check types when assigning one
	pmf to another.

	* decl.c (define_label): Fix logic for printing out the name of the
	label in an error message.

	* error.c (dump_expr): Support ARRAY_REF.

Fri Mar 17 17:43:02 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl2.c (finish_vtable_vardecl): Call build_t_desc here.
	(finish_prevtable_vardecl): Instead of here.

Fri Mar 17 14:40:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (expand_static_init): Also use expand_aggr_init if the
	initializer is a TREE_LIST.	
	(grokdeclarator): Only pedwarn about extra qualification if -pedantic.

	* pt.c (unify): Fix unification of return type.

	* expr.c (fixup_result_decl): Use store_expr, rather than
	emit_move_insn, to move the return value into the place where
	callers will expect it.

Thu Mar 16 22:05:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_offset_ref): Call assmble_external on functions.
	* typeck.c (build_component_ref): Likewise.

Thu Mar 16 20:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (struct saved_scope): Add members base_init_list and
	member_init_list.
	(push_to_top_level): Save current_base_init_list and
	current_member_init_list to them.
	(pop_from_top_level): Put it back.

Thu Mar 16 19:21:14 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_template): Call assemble_external.	

Thu Mar 16 18:07:54 1995  Brendan Kehoe  <brendan@phydeaux.cygnus.com>

	* class.c: Include rtl.h, to get NULL_RTX.
	(finish_struct): Also zero out DECL_SAVED_INSNS, to avoid problems
	on hosts with different sizes for each part of the union.
	* tree.c: Also include rtl.h.
	(layout_basetypes): Same change for DECL_SAVED_INSNS.

Thu Mar 16 13:57:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (unify): Fix array domain unification for 64-bit targets.

	* decl2.c (finish_file): Push bizarre type decl before walking the
	vtables the first time.
	(walk_vtables): OK, don't set prev to vars if the vardecl_fn messed
	with TREE_CHAIN (prev).

	* init.c (emit_base_init): Use convert_pointer_to_real instead of
	convert_pointer_to when converting to a direct base.

Wed Mar 15 20:26:29 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (type_unification): Handle transitive unification better.

Wed Mar 15 13:56:16 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (walk_vtables): Always set prev to vars.
	(mark_vtable_entries): Call assemble_external on the vtable entries.

	* class.c (finish_struct): Set the vtable's size to NULL_TREE before
	calling layout_decl, so that it gets updated properly.

	Finally re-enable dynamic synthesis.  This time it works.
	* method.c (synthesize_method): Pass decl_function_context (fndecl)
	to {push,pop}_cp_function_context.
	* decl.c (push_cp_function_context): Now takes a tree argument.
	(pop_cp_function_context): Likewise.
	* call.c (build_method_call): Enable synthesis.
	* lex.c (cons_up_default_function): Likewise.

Tue Mar 14 19:14:19 1995  Doug Evans  <dje@chestnut.cygnus.com>

	* parse.y (setattrs): Chain onto prefix_attributes rather than
	setting it.

Wed Mar 15 13:00:00 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (pushdecl): Check if the type of the VAR_DECL is an
	error_mark_node before trying to read TYPE_LANG_SPECIFIC. 

Mon Mar 13 21:00:28 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator, case ARRAY_REF): Wrap the exp with fold,
	and convert the size and integer_one_node to the index type.

Mon Mar 13 08:01:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Save the instance
	argument, and tack it onto the front of the COND_EXPR to make the
	semantics come out right.  Grab the instance argument from
	'*instance_ptrptr', rather than having it passed in separately.
	
	* various: Change various consed-up comparison operations to have
	boolean type.  Remove the instance argument in calls to
	get_member_function_from_ptrfunc.

	* error.c (dump_expr): Dump true and false as "true" and "false".

	* decl2.c (finish_file): Also set DECL_STATIC_FUNCTION_P on the
	global init function.

	* decl.c (finish_function): Only set DECL_EXTERNAL here if the
	inline function is public.

Sat Mar 11 00:58:03 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (is_friend): Be more careful about checking
	DECL_CLASS_CONTEXT on non-member functions.

	* decl2.c (finish_vtable_vardecl): Don't bother calling
	assemble_external here.
	(prune_vtable_vardecl): New function that just splices out the
	vtable decl from the top-level decls.
	(import_export_inline): Unset DECL_EXTERNAL at first.
	(finish_file): Don't bother calling assemble_external here.  Do
	splice out all of the vtables.

Fri Mar 10 14:42:29 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): If we're not emitting the function yet,
	call assemble_external for it.

	* decl2.c (finish_prevtable_vardecl): Don't call mark_vtable_entries
	here.
	(finish_vtable_vardecl): Don't do the linkage deduction thing here.
	Also don't splice out the current vtable if it is unused.
	(finish_file): Move the second walk_vtables and the synthesis check
	inside the 'reconsider' loop.  Move thunk emission after the
	'reconsider' loop.

Thu Mar  9 16:28:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* pt.c (tsubst): Don't bother calling cp_build_type_variant, since it
	was passing bogus values for readonly and volatile from the original
	template decl, not the resultant type of the tsubst call.

	* class.c (duplicate_tag_error): Use cp_error_at to point out the
	previous definition of the tag.

Thu Mar  9 10:46:17 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Clear base_init_insns and protect_list.
	(struct cp_function): Add base_init_insns field.
	(push_cp_function_context): Also save base_init_insns.
	(pop_cp_function_context): Also restore base_init_insns.

Wed Mar  8 13:31:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (member_init_ok_or_else): Check for initializing a static
	member here.
	(emit_base_init): Instead of here.

Tue Mar  7 16:03:26 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Disable synthesis as needed.
	* lex.c (cons_up_default_function): Likewise.

Tue Mar  7 10:14:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y: New rules to allow attributes in a prefix position.
	(prefix_attributes): New variable.  Pass it into cplus_decl_attributes.
	(setattr): New rule.
	(reserved_declspecs, declmods): Catch attributes here.
	* decl2.c (cplus_decl_attributes): Add PREFIX_ATTRIBUTES argument.
	* decl.c (duplicate_decls): Pass DECL_MACHINE_ATTRIBUTES to
	descendent typedef.
	(grokdeclarator): Added code to support machine attributes.
	* Makefile.in (stamp-parse): Expect 5 shift/reduce failures.

Mon Mar  6 15:07:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't synthesize methods outside of a
	function.

	Make base initialization more re-entrant so that synthesis on the
	fly will work (and, eventually, template instantation on the fly).
	* init.c (sort_member_init): Don't bother with members that can't be
	initialized.  Reorganize a bit.  Don't initialize base members here.
	(sort_base_init): New function, like sort_member_init, but for base
	classes.  Steals some code from emit_base_init.
	(emit_base_init): Simplify.  Call sort_{member,base}_init before
	doing any initialization, so we don't have to save
	current_{member,base}_init_list in push_cp_function_context.
	(expand_aggr_vbase_init_1): Adjust for sort_base_init.
	(expand_aggr_vbase_init): Simplify.
	* decl.c (struct cp_function): Add protect_list field.
	(push_cp_function_context): Also save protect_list.
	(pop_cp_function_context): Also restore protect_list.
	* call.c (build_method_call): Enable synthesis at point of call.
	* lex.c (cons_up_default_function): Likewise.

	* parse.y: Turn -ansi checks back into -pedantic checks.

	* init.c (build_new): Fix -fcheck-new for array new.

Sat Mar  4 15:55:42 1995  Fergus Henderson  <fjh@cs.mu.oz.au>

	* typeck.c (build_compound_expr): warn if left-hand operand of
	comma expression has no side-effects.

Fri Mar  3 15:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (primary): Change 'object qualified_id *' rules to 'object
	overqualified_id *'.

Fri Mar  3 12:48:17 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* parse.y (unary_expr): Catch doing sizeof an overloaded function.
	Make the error look the same as the one we issue in c_sizeof.

	* typeck.c (build_binary_op_nodefault): Give an error for trying
	to compare a pointer-to-member to `void *'.

Fri Mar  3 11:28:50 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_unary_op): Handle bool increment with smoke and
	mirrors here, rather than in expand_increment where it belongs,
	because Kenner doesn't agree with me.

Fri Mar  3 00:08:10 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokparms): Catch a PARM_DECL being used for a default
	argument as well.

Thu Mar  2 20:05:54 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* init.c (build_new): Don't allow new on a function type.

	* parse.y (primary): Avoid a crash when seeing if the arg is of
	the same type as that given for the typespec in an explicit dtor call.

Thu Mar  2 00:49:38 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (finish_function): Change test for calling
	mark_inline_for_output.

Wed Mar  1 11:23:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Complain if
	build_default_binary_type_conversion fails.

	* init.c (expand_default_init): Handle arguments of unknown type
	properly.

	* cvt.c (build_expr_type_conversion): Only complain about ambiguity
	if 'complain'.
	* various: Pass 'complain'.

	* typeck.c (comptypes): Be more picky about comparing UPTs.

Wed Mar  1 11:03:41 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): If declarator is null, say that the
	type used has an incomplete type.

Wed Mar  1 10:06:20 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (instantiate_template): Copy the template arguments to the
	permanent_obstack.  Also use simple_cst_equal to compare them when
	looking for a previous instantiation.

	* tree.c (make_deep_copy): Support copying INTEGER_TYPEs (assuming
	they are array domain types).

Tue Feb 28 23:24:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h: Define WANT_* constants for passing to
	build_expr_type_conversion.
	* cvt.c (build_expr_type_conversion): New function to build
	conversion to one of a group of suitable types.
	(build_default_binary_type_conversion): Use it.
	* decl2.c (grok_array_decl): Likewise.
	* typeck.c (build_unary_op): Likewise.
	(build_array_ref): Tidy up a bit.
	(build_binary_op): Likewise.

Tue Feb 28 19:57:31 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow decl of an argument as `void'.

Tue Feb 28 17:23:36 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (typed_declspecs1): Add 'typespec reserved_typespecquals
	reserved_declspecs' rule.

	* parse.y (expr_or_declarator): Remove notype_qualified_id rule.
	(direct_notype_declarator): Likewise.
	(complex_direct_notype_declarator): Add notype_qualified_id rule.

	* lex.c (real_yylex): Handle :> digraph properly.

Tue Feb 28 12:26:29 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Check if it's a friend, not if it's
	non-virtual, that's being initialized.  Move the check up to
	before FRIENDP would get cleared.  Catch an unnamed var/field
	being declared void.  Say just `field' instead of `structure field'
	in the error message.  Only go for the operator name if DECLARATOR
	is non-null.

Tue Feb 28 00:08:01 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (start_function): Complain about abstract return type.
	(grokdeclarator): Complain about declaring constructors and
	destructors to be const or volatile.  Complain about declaring
	destructors to be static.

	* pt.c (uses_template_parms): Handle pmfs.

	* decl.c (grokdeclarator): Don't call variable_size for array bounds
	that only depend on template constant parameters.

Mon Feb 27 15:38:16 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* error.c (dump_decl): Only look to see if it's a vtable if we
	actually have a name to check out.

Mon Feb 27 13:37:53 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (convert_to_aggr): Lose misleading shortcut.

Sun Feb 26 17:27:32 1995  Doug Evans  <dje@canuck.cygnus.com>

	* decl.c (set_nested_typename): Always set DECL_IGNORED_P,
	not just for dwarf.

Sun Feb 26 00:10:18 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow a static member to be
	declared `register'.

	* init.c (make_friend_class): Move up to a pedwarn for the warning
	about a class declaring friends with itself.

	* decl.c (grokdeclarator): You can't do `volatile friend class foo'
	or `inline friend class foo'.  Only try to make a friend out of
	TYPE if we didn't already reset it to integer_type_node.

Sat Feb 25 22:32:03 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Don't allow initialization of a
	non-virtual function.

	* decl.c (start_function): Do a pedwarn if we're changing `main'
	to have an int return type.

Sat Feb 25 00:02:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Handle simple assignment from
	TARGET_EXPRs by building up an RTL_EXPR to force expansion.  Whew.

Fri Feb 24 18:27:14 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* decl.c (grokdeclarator): Also don't allow virtual outside of a
	class decl for a scope method definition performed at global binding.

	* init.c (build_offset_ref): Don't allow creation of an OFFSET_REF
	of a bitfield.

	* decl.c (grokdeclarator): Don't allow a const to be declared mutable.

	* typeck.c (build_binary_op): Return an error_mark_node if either
	one of the args turned into an error_mark_node when we tried to
	use default_conversion.

	* typeck.c (build_unary_op): Forbid using postfix -- on a bool.

	* decl.c (grokdeclarator): Allow `signed' and `unsigned' to be
	used on `__wchar_t'.

Fri Feb 24 13:59:53 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (end_protect_partials): Do it the right way.

Wed Feb 22 15:42:56 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Upgrade warning about
	comparing distinct pointer types to pedwarn.

	* typeck2.c (digest_init): Cope with extra braces.

	* typeck.c (build_binary_op_nodefault): Use tree_int_cst_sgn instead
	of INT_CST_LT (..., interger_zero_node).

Wed Feb 22 14:45:52 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* except.c [!TRY_NEW_EH] (end_protect_partials): Define dummy
	function for systems that don't have EH.

Tue Feb 21 19:18:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (can_convert_arg): Like can_convert, but takes an arg as
	well.

	* pt.c (type_unification): Allow implicit conversions for parameters
	that do not depend on template parameters.

Tue Feb 21 18:43:48 1995  Douglas Rupp  <drupp@cs.washington.edu>

	* Make-lang.in, config-lang.in: ($exeext): New macro.
	* Make-lang.in: Try a "cp" if "ln" fails.
	* cp-tree.h (decl_attributes): Added argument.
	* decl2.c (cplus_decl_attribute): Add arg to decl_attributes.
	* cp/g++.c: Added #ifdefs for sys/file.h and process.h for NT.
	Modified spawnvp to have to correct number of arguments for OS/2, NT.

Tue Feb 21 18:36:55 1995  Mike Stump  <mrs@cygnus.com>

	* decl.c (finish_function): Add calls to end_protect_partials to end
	the exception region that protects constructors so that partially
	constructed objects can be partially destructed when the constructor
	throws an exception.
	* init.c (perform_member_init, sort_member_init, emit_base_init):
	Added support for partially constructed objects.
	* init.c (build_partial_cleanup_for): New routine to do partial
	cleanups of a base class.
	* decl2.c (finish_file): Move the emitting of the exception table
	down, after we emit all code that might have exception regions in
	them.
	* except.c (end_protect_partials, might_have_exceptions_p): New
	routines.
	(emit_exception_table): Always output table if called.
	* cp-tree.h (protect_list, end_protect_partials,
	might_have_exceptions_p, emit_exception_table): Added.

Tue Feb 21 16:05:59 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* gc.c (build_typeid): Pass a NULL_TREE, not the bogus, unused
	address of a local variable.
	* class.c (build_vfn_ref): Only try to build the PLUS_EXPR if we
	were given a non-null PTR_TO_INSTPTR.

Tue Feb 21 01:53:18 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Always lay out the merged decl.

	* decl2.c (finish_vtable_vardecl): Don't do vtable hack on templates.
	(finish_prevtable_vardecl): Likewise.

	* method.c (synthesize_method): Set interface_{unknown,only}
	according to the settings for our class, not the file where it comes
	from.

Sat Feb 18 12:26:48 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Handle systems that define __i386__ but not __i386.

Fri Feb 17 15:31:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (reparse_decl_as_expr): Support being called without a
	type argument.

	* parse.y (primary): Add '(' expr_or_declarator ')'.  Adds 4 r/r
	conflicts.  Sigh.

Fri Feb 17 12:02:06 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (template_def, fndef, fn.def1, return_init, condition,
	initdcl0, initdcl, notype_initdcl0, nomods_initdcl0,
	component_decl_1, after_type_component_declarator0,
	notype_component_declarator0, after_type_component_declarator,
	notype_component_declarator, after_type_component_declarator,
	full_parm, maybe_raises, exception_specification_opt): Fix up,
	include exception_specification_opt maybeasm maybe_attribute and
	maybe_init if missing.  Rename maybe_raises to
	exception_specification_opt to match draft wording.  Use maybe_init
	to simplify rules.

Fri Feb 17 01:54:46 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Set TREE_NO_UNUSED_WARNING on COMPOUND_EXPRs
	built for news of scalar types.

Thu Feb 16 17:48:28 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_binary_op_nodefault): Update code for warning
	about signed/unsigned comparisons from C frontend.  Realize that the
	code in the C frontend is, if anything, even more bogus.  Fix it.
	(build_binary_op): Undo default_conversion if it wasn't useful.

	* typeck.c (build_unary_op, ADDR_EXPR): Lose bogus special case for
	PRE*CREMENT_EXPR.

	* decl2.c (import_export_vtable): Don't try the vtable hack
	if the class doesn't have any real non-inline virtual functions.
	(finish_vtable_vardecl): Don't bother trying to find a non-inline
	virtual function in a non-polymorphic class.
	(finish_prevtable_vardecl): Likewise.

	* decl2.c (import_export_vtable): Use and set DECL_INTERFACE_KNOWN.

	* cp-tree.h (DECL_INTERFACE_KNOWN): Use DECL_LANG_FLAG_5.

	* init.c (expand_virtual_init): Always call assemble_external.

	* class.c (build_vfn_ref): Always call assemble_external.
	(build_vtable): Always call import_export_vtable.
	(prepare_fresh_vtable): Likewise.
	(add_virtual_function): Don't bother setting TREE_ADDRESSABLE.

Thu Feb 16 03:28:49 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (finish_struct): Use TYPE_{MIN,MAX}_VALUE to determine
	whether an enumerated type fits in a bitfield.

Wed Feb 15 15:38:12 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (grow_method): Update method_vec after growing the class
	obstack.

Wed Feb 15 13:42:59 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (handler_seq): Push a level for the catch parameters.

Wed Feb 15 12:42:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (emit_base_init): Update BINFO_INHERITANCE_CHAIN on my
	bases, in case they've been clobbered.

Wed Feb 15 12:07:29 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (finish_base_struct): Set up BINFO_INHERITANCE_CHAIN here,
	so that one day it will always be valid.
	* tree.c (propagate_binfo_offsets, layout_vbasetypes): Likewise.

	* cp-tree.h (copy_binfo): Removed, unused.
	* tree.c (copy_binfo): Likewise.

Wed Feb 15 00:05:30 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Save the allocation before calling
	expand_vec_init on it.

	* decl.c (finish_enum): The TYPE_PRECISION of the enum type mush
	match the TYPE_PRECISION of the underlying type for constant folding
	to work.

Tue Feb 14 15:31:25 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (push_eh_entry, expand_start_all_catch,
	expand_leftover_cleanups, expand_end_catch_block): Keep track of
	the context in which the exception region occurs.
	(build_exception_table): If the region was not output, don't output
	the entry in the eh table for it.

Tue Feb 14 02:15:43 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (expand_default_init): Only use a previous constructor call
	if it's a call to our constructor.  Does the word "Duh" mean
	anything to you?

	* decl.c (grokparms): Fine, just don't call
	convert_for_initialization at all.  OK?  Happy now?

Mon Feb 13 02:23:44 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cp-tree.h (CLASSTYPE_FIRST_CONVERSION): Make sure that the class
	method vector has a second element before returning it.

	* decl.c (grokparms): Don't strip REFERENCE_TYPE before calling
	convert_for_initialization.

Sun Feb 12 03:57:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_modify_expr): Compare function name to
	constructor_name (current_class_type) instead of current_class_name.

	* decl.c (grokparms): Don't do anything with the return value of
	convert_for_initialization.

	* error.c (dump_decl): Also dump_readonly_or_volatile on the decl.

	* decl.c (duplicate_decls): Tweak error message.

	* typeck.c (build_const_cast): Implement checking.
	(build_reinterpret_cast): Implement some checking.

	* cp-tree.h (CONV_FORCE_TEMP): Require a new temporary when
	converting to the same aggregate type.
	(CONV_STATIC_CAST): Include it.
	(CONV_C_CAST): Likewise.
	* cvt.c (convert_force): Use CONV_C_CAST instead of CONV_OLD_CONVERT.
	(cp_convert): Only force a new temporary if CONV_FORCE_TEMP.

Fri Feb 10 16:18:52 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (build_c_cast): Use non_lvalue to tack something on
	where necessary.

	* decl.c (auto_function): Now a function.
	* except.c (init_exception_processing): terminate, unexpected,
	set_terminate, and set_unexpected have C++ linkage.

	* typeck.c (build_unary_op, TRUTH_NOT_EXPR): Use convert instead of
	truthvalue_conversion for converting to bool, as it handles
	user-defined conversions properly.
	(condition_conversion): Likewise.

	* except.c (expand_throw): Don't call convert_to_reference.
	Pass the correct parameters to build_new.

	* method.c (do_build_assign_ref): Don't use access control when
	converting to a base reference here.
	(do_build_copy_constructor): Or here.

	* init.c (build_new): Unset TREE_READONLY on the dereferenced
	pointer before assigning to it.

	* decl.c (maybe_build_cleanup): Don't bother stripping const here.

	* decl2.c (delete_sanity): You can now delete pointer to const.

Fri Feb 10 13:28:38 1995  Jason Merrill  <jason@python.cygnus.com>

	* decl.c (finish_function): Don't rely on actual parameters being
	evaluated left-to-right.
	* except.c (expand_end_catch_block): Likewise.

Fri Feb 10 00:52:04 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (real_lvalue_p): Like lvalue_p, but class temps aren't
	considered lvalues.
	* cvt.c (convert_to_reference): Use real_lvalue_p instead of
	lvalue_p.

	* cvt.c (build_type_conversion_1): Don't call convert on aggregate
	types.
	(convert_to_reference): Fix erroneous text substitution.

	* typeck2.c (initializer_constant_valid_p): Update from C frontend.
	Add new argument to all callers.

	* typeck.c (convert_arguments): Check for error_mark_node before
	trying to do anything with the actual parameter.

	* typeck.c (condition_conversion): Build up a CLEANUP_POINT_EXPR and
	fold it.
	(bool_truthvalue_conversion): Remove.  Fix all callers to call
	truthvalue_conversion instead.
	(various): Fold CLEANUP_POINT_EXPRs.

	* parse.y (conditions): Call condition_conversion rather than
	building up a CLEANUP_POINT_EXPR.

	* pt.c (end_template_decl): Don't warn_if_unknown_interface here
	under -falt-external-templates.

Thu Feb  9 05:24:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Complain about new of const type without
	initializer.  Other cleanup.

	* call.c (compute_conversion_costs): Don't call
	build_type_conversion with a reference type; convert to the target
	type and check its lvaluetude.
	* cvt.c (convert_to_reference): Likewise.

	* cvt.c (build_type_conversion_1): There will never be any need to
	dereference references here now.

Thu Feb  9 00:37:47 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_builtin_throw): Make sure we only `use' the
	value of return_val_rtx.

Wed Feb  8 15:45:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (structsp): Don't complain about declaring a type being
	defined to be a friend.

	* decl2.c (warn_if_unknown_interface): Note the template in question
	and the point of instantiation, for -falt-external-templates.
	* lex.c (reinit_parse_for_method): Pass the decl to
	warn_if_unknown_interface.
	* pt.c (instantiate_template): Likewise.
	(end_template_decl): Likewise.

	* decl.c (set_nested_typename): Set IDENTIFIER_TYPE_VALUE on the
	nested name again, to make local classes work a bit better.

	* typeck.c (build_function_call_real): Dereference reference after
	checking for incomplete type.

	* init.c (build_new): Accept new of const and volatile types.

Wed Feb  8 14:04:16 1995  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Fix error message.

Wed Feb  8 03:16:15 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_initialization): Do bash arrays when
	converting to a reference to non-array.

Tue Feb  7 15:50:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (cp_convert): Don't call convert_to_reference, or
	automatically dereference references.  Do pass reference conversions
	to cp_convert_to_pointer.
	(cp_convert_to_pointer): Support references.

	* call.c (build_method_call): Don't build up a reference to the
	parameter here; let build_overload_call handle that.

	* typeck.c (build_c_cast): Call convert_to_reference directly if
	converting to a reference type.
	* method.c (do_build_copy_constructor): Likewise.
	* method.c (do_build_copy_constructor): Likewise.
	(do_build_assign_ref): Likewise.

	* call.c (build_method_call): Dereference a returned reference.
	* typeck.c (build_function_call_real): Likewise.

	* decl.c (xref_basetypes): Check for unions with basetypes here.
	(xref_tag): Instead of here.

	* pt.c (process_template_parm): Template type parm decls are
	artificial.

Mon Feb  6 04:32:09 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y (typed_declspecs): Add missing semicolon.
	(do_xref_defn): Resurrect.
	(named_class_head_sans_basetype): Move template specialization
	definition cases to named_class_head_sans_basetype_defn.

	* decl2.c (grokfield): Call pushdecl_class_level after setting the
	TYPE_NAME, not before.

Sun Feb  5 02:50:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): Don't call sorry here.  Don't allow
	conversions between function pointer types if pedantic.

	* pt.c (overload_template_name): Pass globalize=1 to xref_tag.

	* lex.c (cons_up_default_function): Use the full name for the return
	type of op=.

	* decl.c (set_nested_typename): Don't worry about anonymous types,
	as they already have a unique name.
	(pushdecl): Remove redundant set_nested_typename
	(xref_tag): Split out base handling into xref_basetypes.

	* cp-tree.h (TYPE_INCOMPLETE): New macro; TEMPLATE_TYPE_PARMs are
	not considered incomplete even though their definition is unknown.

	* decl.c (xref_defn_tag): Lose.
	(xref_tag): xref_next_defn = ! globalize.
	(pushdecl): Don't set DECL_NESTED_TYPENAME on artificial decls.  The
	ones that should have it set will have it set by pushtag.
	(pushdecl_class_level): Likewise.
	(pushtag): Tidy up a bit.
	(set_nested_typename): Push a decl for the nested typename from
	here, rather than from xref_defn_tag.

	* parse.y (do_xref): Lose.
	(named_class_head): If we see 'class foo:' we know it's a
	definition, so don't worry about base lists for non-definitions.

	* pt.c (push_template_decls): Template parm decls are artificial.

	* decl.c (duplicate_decls): Restore check for qualifier
	disagreement for non-functions.
	(decls_match): Remove check for qualifier disagreement.

Fri Feb  3 14:58:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grok_reference_init): Convert initializer from
	reference.
	* typeck.c (convert_for_initialization): Likewise.

	* decl.c (duplicate_decls): Propagate DECL_NESTED_TYPENAME.

	* cvt.c (cp_convert): Don't convert to the same class type by just
	tacking on a NOP_EXPR.
	(convert_to_reference): Use comp_target_types instead of comptypes
	so that we don't allow conversions two levels down.

Thu Feb  2 15:07:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (build_vbase_path): Bash types to make the backend happy.
	* cvt.c (build_up_reference): Bash the types bashed by
	build_vbase_path to be reference types instead of pointer types.
	(convert_to_reference): Likewise.

	* typeck.c (build_c_cast): Don't strip NOPs if we're converting to a
	reference type.

	* parse.y (structsp): Put back error for 'struct B: public A;'.

Wed Feb  1 23:02:06 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Add support for mips systems that don't define __mips
	but do define mips, like Ultrix.

Wed Feb  1 22:39:07 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Add support for exception handling on the Alpha.

Wed Feb  1 10:12:14 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_file): Fix bug in Jan 31st change.

Tue Jan 31 16:59:15 1995  Gerald Baumgartner  <gb@lorenzo.cs.purdue.edu>

	* sig.c (build_signature_pointer_or_reference_type): Don't set
	IS_AGGR_TYPE for signature pointers/reference so expand_default_init
	doesn't expect to find a copy constructor.
	* call.c (build_method_call): Treat signature pointers/reference
	as if IS_AGGR_TYPE were set.

Tue Jan 31 13:28:56 1995  Mike Stump  <mrs@cygnus.com>

	* gc.c (get_typeid): Pawn off error messages to build_t_desc.
	(build_t_desc): Inform the user here if they try and build
	with -frtti and don't include <typeinfo.h>.

	* decl2.c (finish_prevtable_vardecl): Support rescanning.
	(finish_file): Move finish_prevtable_vardecl up to before the global
	initializers are done as tdecls are initialized in the global
	initializer.  Also Pick up any new tdecls or vtables needed by
	synthesized methods.

	* class.c (finish_struct): Simplify.  We have to do rtti scanning at
	end, so we might as well do all of it there.

Tue Jan 31 05:35:02 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Fix -fthis-is-variable for 32-bit
	targets, too.

Tue Jan 31 00:11:04 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_prevtable_vardecl): New routine, mostly split from
	finish_vtable_vardecl.  It has the first half functionality from
	that routine.
	* decl2.c (finish_vtable_vardecl): Update to not include stuff not
	in  finish_prevtable_vardecl.
	* decl2.c (finish_file): Call finish_prevtable_vardecl.
	* gc.c (build_generic_desc): Allow it to be called when not at the
	global binding layer, but behave as if we were.
	(build_t_desc): Rearrange a bit so that it really works and is
	easier to follow.
	* class.c (finish_struct): Don't decide on tdecls here, as we have
	to wait until the end of the file in general to decide whether or
	not they come out.

Mon Jan 30 01:00:40 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_delete): Check access to operator delete before
	calling the destructor.
	* method.c (build_opfncall, DELETE_EXPR): build_method is allowed to
	return error_mark_node.
	* call.c (build_method_call): Use the one-argument op delete even if
	it's an error.

	* init.c (build_new): Fix -fthis-is-variable support.
	* call.c (build_method_call): Likewise.

	* call.c (convert_harshness): Make conversion from a pointer to bool
	worse than conversion to another pointer.

Sat Jan 28 16:46:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* init.c (build_new): Check new return value if -fcheck-new.

	* lex.c (check_newline): Clear end_of_file when we're done, too.

Sat Jan 28 10:38:39 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_vtable_vardecl): Make rtti TD tables follow
	vtables whereever they go.

	* gc.c (build_t_desc): Remove old way of setting it up, as it wasn't
	right.

Sat Jan 28 09:10:44 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (finish_vtable_vardecl): Now set the
	interface/implementation of vtables on the first virtual function,
	if one exists, otherwise we use the old method.  This is a major win
	in terms of cutting down the size of objects and executables in
	terms of text space and data space.  Now most of the savings that
	#pragma interface/implementation gives is automatic in a fair number
	of cases.

Sat Jan 28 04:57:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokdeclarator): Discard the template parameters in a
	template constructor declaration so that the function is always
	named constructor_name (ctype).

	* lex.c (check_newline): Use ungetc to put back the character before
	calling HANDLE_PRAGMA.

Fri Jan 27 17:23:47 1995  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): If the cname is T<int> and fn_name is T,
	make sure we still match them.

Fri Jan 27 16:32:10 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* parse.y: Add END_OF_LINE token.

	* lex.c (check_newline): Set linemode when we see a # directive, and
	unset it when we're done.  Turn all 'return's into 'goto skipline'.
	Fix all uses of '\n', since we won't see it anymore.  Put back the
	character we read before checking for a sysv or target pragma.
	(real_yylex): If we see an EOF in linemode, return END_OF_LINE.
	(handle_sysv_pragma): Don't look at the input stream; quit when we
	see an END_OF_LINE token.

	* input.c (getch): Return EOF if we're in line mode and at the end
	of a line.
	(put_back): Don't put back an EOF.

Thu Jan 26 19:26:34 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (expand_throw): Do the newing of the exception object
	before we load the type descriptor or the address so that we don't
	wipe any of the values out.

Thu Jan 26 19:20:00 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (init_exception_processing): Don't use r12 on the rs6000.

Tue Jan 24 16:36:31 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (grokparms): Don't try to build up a reference at this point.

	* typeck2.c (build_functional_cast): Don't assume that a NOP_EXPR
	will suffice to convert from integer_zero_node.

Wed Jan 25 15:02:09 1995  David S. Miller  <davem@nadzieja.rutgers.edu>

	* class.c (instantiate_type): Change error message text.
	* typeck2.c (store_init_value): Likewise.

Mon Jan 23 21:57:14 1995  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): When we copy a node, don't forget to copy
	TREE_CHAIN, we use it later.

Mon Jan 23 03:33:47 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_assignment): Initialize variable before use.

Fri Jan 20 01:17:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* g++.c (main): Link with both libstdc++ and libg++ if called as
	something ending with "g++", otherwise only libstdc++.  Move -lm to
	the end of the line.

Thu Jan 19 15:43:11 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Don't mess with 'this' before calling
	compute_conversion_costs.

Wed Jan 18 15:40:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* search.c (get_matching_virtual): Give line number for previous
	declaration.

	* call.c (convert_harshness): Handle conversions to references
	better.

	* cvt.c (build_up_reference): OK, handle {MIN,MAX}_EXPR *properly*.

Wed Jan 18 15:21:38 1995  Mike Stump  <mrs@cygnus.com>

	* class.c (instantiate_type): Use DECL_CHAIN to walk lists instead,
	as the TREE_CHAIN for methods will take us to the next differently
	named function, DECL_CHAIN won't.

Wed Jan 18 14:26:59 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* tree.c (lvalue_p): Handle {MIN,MAX}_EXPR.

	* decl2.c (lang_decode_option): -Wall implies -Wparentheses.
	warn_parentheses defaults to 0.

	* decl.c (grokparms): Put back call to require_instantiated_type.

Tue Jan 17 19:56:15 1995  Mike Stump  <mrs@cygnus.com>

	* except.c (exception_section): Use the data section on the rs6000.
	Change calling convention for named_section.

Wed Jan 17 18:20:57 1994  Fergus Henderson <fjh@munta.cs.mu.oz.au>

	* cp-tree.h : Make if (x=0) warn with wall
	* parse.y : Make if (x=0) warn with wall

Tue Jan 17 14:12:00 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): BITS_PER_WORD if SLOW_BYTE_ACCESS,
	BITS_PER_UNIT otherwise.

	* search.c (get_matching_virtual): Don't check the binfo if the
	types are the same.

	* cvt.c (cp_convert): Just call truthvalue_conversion to convert to
	bool.

Mon Jan 16 13:28:48 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* various: Use boolean_type_node, boolean_true_node,
	boolean_false_node.

	* search.c (get_matching_virtual): Allow covariant returns that
	don't require pointer adjustment.

	* typeck.c (build_conditional_expr): Don't call default_conversion
	on ifexp.

	* cvt.c (build_up_reference): Handle MIN_EXPR and MAX_EXPR.

	* decl.c (grokdeclarator): Upgrade warning about &const to pedwarn.

Sun Jan 15 22:17:32 1995  David Binderman  <dcb@lovat.fmrco.COM>

	* pt.c (do_function_instantiation): Free targs once we're done.

Sun Jan 15 22:17:32 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (BOOL_TYPE_SIZE): Defaults to BITS_PER_WORD.
	(init_decl_processing): Use BOOL_TYPE_SIZE instead of CHAR_TYPE_SIZE
	for bool.

Sat Jan 14 05:33:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl2.c (finish_file): We need to mess up if there are any
	variables in the list, not just if there is one with a constructor.

Fri Jan 13 14:42:55 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (duplicate_decls): Propagate DECL_STATIC_{CON,DE}STRUCTOR.
	(finish_function): Handle DECL_STATIC_{CON,DE}STRUCTOR.
	(finish_function): Trust rest_of_compilation.

	* decl2.c (finish_file): Also call functions designated as static
	constructors/destructors.

	* decl.c (grokdeclarator): Allow access decls of operator functions.
	(grokparms): Only do convert_for_initialization if the initializer
	has a type.
	(duplicate_decls): Put back push_obstacks_nochange call.

	* lex.c (real_yylex): Downgrade complaint about the escape sequence
	being too large from pedwarn to warning.

	* decl.c (grokdeclarator): Don't complain about long long in system
	headers.

	* lex.c (real_yylex): Handle digraphs.

Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (init_decl_processing): -f{no-,}strict-prototype only
	affects C linkage declarations now.

	* typeck.c (comp_target_types): Grok simple contravariant conversions.
	(common_type): t1 and t2 are interchangeable.

	* various: Test return value of comp_target_types differently in
	different places; it now returns -1 for a contravariant conversion
	(which is fine in symmetric cases).

	(common_type): Prefer long double to double even when
	they have the same precision.

	* decl.c (grokparms): Call convert_for_initialization to check
	default arguments.

	* init.c (build_new): void_type_node has a size (of 0).

	* decl.c (decls_match): Also check for agreement of TREE_READONLY
	and TREE_THIS_VOLATILE.
	(push_class_level_binding): Properly handle shadowing of
	nested tags by fields.

	* search.c (dfs_pushdecls): Likewise.

	* decl2.c (finish_file): Don't second-guess self-initialization.

	* cvt.c (convert_to_reference): Work with expr directly, rather than
	a copy.

	* decl.c (push_overloaded_decl): Only shadow artificial TYPE_DECLs.

	* init.c (add_friend): Downgrade duplicate friend message from
	pedwarn to warning.

	* decl.c (duplicate_decls): Push obstacks before calling common_type.

Thu Jan 12 17:15:21 1995  Michael Ben-Gershon  <mybg@cs.huji.ac.il>

	* except.c (push_eh_entry): set LABEL_PRESERVE_P flag for
	exception table labels.
	(expand_start_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	* except.c (make_first_label): new function.
	(expand_start_all_catch): add a call to make_first_label() before
	using a label as a jump destination.
	(expand_end_all_catch): Likewise.
	(expand_leftover_cleanups): Likewise.
	(expand_end_catch_block): Likewise.
	(expand_builtin_throw): Likewise.
	(expand_throw): Likewise.
	* except.c: Add ARM processor support for exception handling.

Thu Jan 12 12:17:24 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	(complete_array_type): Copy code from C frontend.

	* lex.c (real_yylex): Don't multiply the length of a wide string
	literal by WCHAR_BYTES.

	* decl.c (pushdecl): Check for redeclaration of wchar_t here.
	(duplicate_decls): Instead of here.
	(define_label): Complain about a label named wchar_t.
	(grokdeclarator): Complain about declarations of
	operator-function-ids as non-functions.

	* typeck.c (unary_complex_lvalue): Also wrap prefix -- and ++ in
	COMPOUND_EXPRs.
	(build_unary_op): Wrap unary plus in a NON_LVALUE_EXPR.

	* lex.c (real_yylex): Don't skip whitespace when reading the next
	character after ->.

Wed Jan 11 16:32:49 1995  Mike Stump  <mrs@cygnus.com>

	* except.c: Allow cc1plus to be built with native compiler on rs6000.
	(expand_start_all_catch): Add assemble_external calls for various
	routines we call.
	(expand_leftover_cleanups): Likewise.
	(expand_start_catch_block): Likewise.
	(do_unwind): Likewise.
	(expand_builtin_throw): Likewise.

Wed Jan 11 01:05:42 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Only look for a previous decl in the current
	binding level.  Use explicit global scope in DECL_NESTED_TYPENAME.

	* gxx.gperf: Add __signature__ and __sigof__ keywords.

	* decl2.c (lang_decode_option): -ansi does not set flag_no_asm.  It
	does set flag_no_gnu_keywords and flag_operator_names.

	* lex.c (init_lex): 'overload' is not a keyword unless -traditional.
	Unset extension keywords if -fno-gnu-keywords.
	Allow operator names ('bitand') if -foperator-names.
	Never unset 'asm'; -fno-asm only affects 'typeof'.

	* decl.c (lookup_name_real): The got_object special lookup only
	applies to types.

Tue Jan 10 18:07:51 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* spew.c (yylex): Also use DECL_NESTED_TYPENAME if got_object is set.

	* parse.y (primary): Unset got_object after all rules that use the
	'object' nonterminal.
	(object): Set got_object.

	* lex.h: Declare got_object.

	* decl.c (lookup_name_real): Also lookup names in the context of an
	object specified.

Tue Jan 10 14:30:30 1995  Mike Stump  <mrs@cygnus.com>

	* typeck.c (get_member_function_from_ptrfunc): Use ptrdiff_type_node
	for things that have to be added to pointers, not size_type.  Cures
	problems with pointer to members on Alphas.
	(build_binary_op_nodefault): Likewise.
	(get_delta_difference_: Likewise.
	(build_ptrmemfunc): Likewise.

Tue Jan 10 01:49:25 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Stick the new decl in TYPE_NAME before pushing
	it.

	* typeck.c (build_component_ref): Don't build up a COMPONENT_REF
	when dealing with overloaded member functions; just act like
	build_offset_ref.
	(commonparms): Remove misleading comment.

	* decl.c (duplicate_decls): Complain about repeated default
	arguments here.
	(redeclaration_error_message): Instead of here.
	(pushdecl): Complain about missing default arguments here.
	(grokparms): Instead of here.
	(lookup_name_current_level): Also match on DECL_ASSEMBLER_NAME.
	(grok_reference_init): Do not complain about missing initializer if
	declared 'extern'.

	* search.c (lookup_field): Don't return a TYPE_DECL if there is a
	function alternative and want_type is not set.

Mon Jan  9 18:16:23 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* decl.c (pushtag): Don't set TYPE_NAME to an identifier.  Do push
	the decl when the type has no TYPE_NAME.
	(lookup_nested_type): Don't assume that type has TYPE_NAME set.
	(lookup_name_real): Call lookup_field with want_type =
	prefer_type.

	* search.c (lookup_field): Handle want_type properly in the presence
	of fields with the same name.

	* decl.c (set_nested_typename): Set nested name for file-scope types
	to include leading ::.
	(pushdecl): Set the nested typename if the decl doesn't have one,
	rather than if the type's canonical decl doesn't have one.

Mon Jan  9 03:44:33 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* typeck.c (convert_for_assignment): Complain about contravariance
	violation here.
	(comp_target_types): Instead of here.
	(build_unary_op): resolve_offset_ref before checking for a valid
	type.

	* spew.c (yylex): Decrement looking_for_typename after we see a
	_DEFN.

	* decl.c (pushdecl): Don't install an artificial TYPE_DECL in
	IDENTIFIER_LOCAL_VALUE if we already have a decl with that name.

	* typeck.c (convert_for_assignment): Converting pointers to bool
	does not need a cast.

Sun Jan  8 18:16:45 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* class.c (instantiate_type): Initialize nsubsts parm.

	* pt.c (do_function_instantiation): Likewise.

Sat Jan  7 14:37:05 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* pt.c (tsubst): Use TREE_STATIC instead of DECL_INLINE &&
	DECL_SAVED_INSNS to determine whether or not we've seen a definition
	of this function.
	(instantiate_template): Likewise.

	* call.c (convert_harshness): Allow const reference binding when
	called from the overloading code, but not when called from
	can_convert (since it isn't a conversion).
	(convert_harshness): Put back some disabled code.

Fri Jan  6 14:10:57 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (convert_harshness): There is no implicit conversion from
	void* to other pointer types (unless the parameter is (void*)0).
	(convert_harshness): Non-lvalues do not convert to reference types.

	* class.c (finish_struct_methods): Still set
	TYPE_HAS_{INT,REAL}_CONVERSION.

	* call.c (can_convert): Don't use aggregate initialization.

	* cp-tree.h: Declare lookup_conversions.

Thu Jan  5 21:08:00 1995  Mike Stump  <mrs@cygnus.com>

	* parse.y (simple_stmt): Fix duplicate case value error messages to
	be more readable.

Wed Jan  4 16:44:19 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* cvt.c (build_type_conversion): Total rewrite to use
	convert_harshness instead of reproducing conversion logic here.  Now
	much shorter.

	* call.c (convert_harshness): Support conversions to bool.
	(can_convert): Checks whether a conversion is less harsh
	than USER_CODE, for build_type_conversion.

	* search.c (add_conversions): Function for passing to dfs_walk which
	adds all the type conversion operators in the current type to a list.
	(lookup_conversions): Calls dfs_walk with add_conversions and return
	the list.
	(dfs_walk): Don't require a qfn.

	* cp-tree.h: Lose CLASSTYPE_CONVERSIONS hackery.
	(CLASSTYPE_FIRST_CONVERSION): Points to elt 1 of CLASSTYPE_METHOD_VEC.

	* class.c (finish_struct_bits): Lose CLASSTYPE_CONVERSIONS hackery.
	(grow_method): A separate function for building onto the growing
	method vector.
	(finish_struct_methods): Use it.  Put all type conversion operators
	right after the constructors.  Perhaps we should sort the methods
	alphabetically?

Mon Jan  2 14:42:58 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* call.c (build_method_call): Lose another misleading shortcut.

Fri Dec 30 17:57:30 1994  Mike Stump  <mrs@cygnus.com>

	* gc.c (build_bltn_desc): Handle bool as a built-in type.

Fri Dec 30 14:20:21 1994  Mike Stump  <mrs@cygnus.com>

	* tree.c (layout_vbasetypes): Ensure that we don't loose alignment
	on the complete type because of small virtual bases.

Fri Dec 30 12:22:29 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (n_incomplete): Bump n_incomplete up to int to match C
	front end.
	(pushdecl): Also count decls pushed that are of a type being defined
	as incomplete things.
	* class.c (finish_struct): Move hack_incomplete_structures up to
	just after we set it as not being defined, so that the decls we
	build for RTTI don't count as incomplete.

Thu Dec 29 18:20:57 1994  Mike Stump  <mrs@cygnus.com>

	* pt.c (tsubst): Fix problem with defining constructors in templated
	classes with virtual bases.

Wed Dec 28 08:31:00 1994  Mike Stump  <mrs@cygnus.com>

	* parse.y (TYPEID): Strip top-level cv-qualifiers on typeid
	expressions.
	* gc.c (build_typeid): Likewise.

Thu Dec 22 17:26:33 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_up_reference): Fix breakage introduced on Nov 29,
	don't assert on complex AGGR inits.

Thu Dec 22 14:32:31 1994  Mike Stump  <mrs@cygnus.com>

	* method.c (build_overload_value): Handle pointer to members as
	template arguments.

Thu Dec 22 13:09:07 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (unary_complex_lvalue): Don't call sorry if we know how
	to do take the address of a data member for a pointer to data
	member.

Thu Dec 22 10:04:19 1994  Mike Stump  <mrs@cygnus.com>

	* decl.c (grokdeclarator): Use the typedef name for linkage if the
	type doesn't otherwise have a name.

	* decl2.c (grokfield): Likewise.

	* class.c (finish_struct): Since we reuse the TYPE_DECL for the
	DECL_NAME of enums, structs and classes, we have to avoid trying to
	put it in the TYPE_FIELDS again.

Wed Dec 21 11:07:05 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Ignore this parameter on static functions
	when checking to see if we match.

Tue Dec 20 17:47:02 1994  Mike Stump  <mrs@cygnus.com>

	* typeck.c (unary_complex_lvalue): Handle address of non-left most
	pointers to members by calling get_delta_difference.

Mon Dec 19 22:40:53 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Don't use decls_match yet, as it modifies
	static functions to early.

Thu Dec 19 22:37:48 1994  Mike Stump  <mrs@cygnus.com>

	* method.c (make_thunk): Handle encoding of positive thunk offsets.

Sat Dec 17 13:29:50 1994  Doug Evans  <dje@canuck.cygnus.com>

	* Make-lang.in (.PHONY): Tell GNU make C++ and c++ are phony targets.

Thu Dec 15 16:32:12 1994  Mike Stump  <mrs@cygnus.com>

	* decl2.c (check_classfn): Use decls_match to check if this has
	already been declared, as the DECL_ASSEMBLER_NAME may have been
	changed via asm("new_name").
	* decl.c (decls_match): Make public.

Thu Dec 15 15:17:55 1994  Mike Stump  <mrs@cygnus.com>

	* *.[chy] (expand_aggr_init) Add fourth argument to handle
	distinction between = init and (init) style of initializations.
	* *.[chy] (finish_decl): Add fifth argument to 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): ditto.
	* 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): ditto.
	* 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): ditto.
	* search.c (dfs_init_vbase_pointers): change CLASSTYPE_DOSSIER to
	CLASSTYPE_RTTI.
	* parse.y: ditto.
	* 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): ditto.
	* 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 do 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): Utilise 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 addres 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
	fucntions. 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.

hu Jan 13 17:55:51 EST 1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>

	    * cp-tree.h (DESTRUCTOR_NAME_P): do not confuse AUTO_TEMP names
	    with destructor names when either NO_DOLLAR_IN_LABEL or
	    NO_DOT_IN_LABEL are not defined.

	    Now `template <class T, T f(T&), const T*> class A {...}' works.

	    * pt.c (grok_template_type): substitute template parm types
	    with actual types in complex type as well.
	    (coerce_template_parms): update the grok_template_type ()
	    function call.

	* pt.c (tsubst): Traverse method list using DECL_CHAIN.

	* decl.c (grok_op_properties): Allow operator++/-- to have
	default arguments.

	* typeck2.c (store_init_value): Don't abort when called to
	initialize a type that needs constructing with a CONSTRUCTOR.

	* init.c (expand_aggr_init_1, CONSTRUCTOR case): If
	store_init_value fails, build and expand an INIT_EXPR.  If
	store_init_value succeeds, call expand_decl_init.

Fri Feb 11 02:49:23 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Use complete_type_p instead of
	resolves_to_fixed_type_p to determine if the virtual bases are in
	their right place for the type of expr.  Cures problem of thinking a
	virtual base class is one place, when it is in fact someplace else.

Fri Feb 11 00:26:46 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (resolve_offset_ref): Make sure we first convert to
	intermediate type, if given, when dealing with members off `this'.
	Solves an incorrrect `type `foo' is not a base type for type
	`multiple'' when it is infact, a base type.

Thu Feb 10 21:49:35 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (modify_other_vtable_entries): Use get_binfo, instead
	of binfo_value.  Solves problem with compiler giving a `base class
	`B' ambiguous in binfo_value (compiler error)' on complex MI
	herarchies, when a virtual function is first defied in a virtual
	base class.

Thu Feb 10 17:19:32 1994  Mike Stump  <mrs@cygnus.com>

	* class.c (build_vbase_path): Don't complain about ambiguous
	intermediate conversion when converting down to a virtual base
	class, even if they might seem to be ambiguous.

Thu Feb 10 12:18:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (build_functional_cast): #if 0 out constructor
	inheritance code, improve error messages.

	* class.c (finish_base_struct): Complain about base with only
	non-default constructors in derived class with no constructors.

	* decl.c (grokdeclarator): Fix detection of virtual new/delete.

Wed Feb  9 22:02:32 1994  Mike Stump  <mrs@cygnus.com>

	* search.c (build_mi_virtuals, add_mi_virtuals,
	report_ambiguous_mi_virtuals): Removed unneeded code.
	* class.c (finish_struct_bits): Likewise.

Wed Feb  9 11:27:17 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* pt.c (end_template_instantiation): Push decl before
	pop_from_top_level.

	* typeck2.c (build_m_component_ref): Make sure datum is of
	aggregate type.

	* init.c (get_type_value): New function, returns
	IDENTIFIER_TYPE_VALUE or IDENTIFIER_CLASS_TYPE_VALUE or NULL_TREE.

	* call.c (build_method_call): Don't die on call to destructor for
	non-type.

	* decl.c (grokdeclarator): Complain about virtual op new and op
	delete, make static virtuals unvirtual instead of unstatic.

	* typeck.c (build_c_cast): Also call default_conversion on
	methods.

	* decl.c (grokdeclarator): Don't complain about anonymous
	bitfields.

	* parse.y (simple_stmt, for loops): Move the continue point after
	the cleanups.

	* class.c (finish_struct): Fix setting of
	TYPE_HAS_COMPLEX_INIT_REF.

Tue Feb  8 13:21:40 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* init.c (build_new): Deal with `new double (1)'.

	* class.c (finish_struct): TYPE_HAS_COMPLEX_*_REF are supersets of
	TYPE_HAS_REAL_*_REF, but TYPE_HAS_COMPLEX_INIT_REF is independent of
	TYPE_NEEDS_CONSTRUCTING.

	* decl.c (duplicate_decls): Propagate access decls.

	* typeck2.c (process_init_constructor): Accept empty_init_node
	for initializing unions.

	* class.c, lex.c, cp-tree.h: Use
	TYPE_HAS_COMPLEX_ASSIGN_REF where TYPE_HAS_REAL_ASSIGN_REF was used
	before, use TYPE_HAS_COMPLEX_INIT_REF for TYPE_NEEDS_CONSTRUCTING in
	some places.

	* decl.c (finish_decl): Don't complain about uninitialized const
	if it was initialized before.

Mon Feb  7 18:12:34 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* lex.c (default_assign_ref_body): Don't deal with vbases for
	now.

	* decl.c (finish_decl): Fix reversed logic for objects and other
	things that need to be constructed but have no initializer.

	* class.c (finish_struct): Don't set TYPE_HAS_* flags that are
	set by grok_op_properties or finish_decl.

	* decl.c: Don't warn about extern redeclared inline unless
	-Wextern-inline is given.
	* decl2.c (lang_decode_option): Likewise.
	* cp-tree.h: Likewise.

Mon Feb  7 17:29:24 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (pushdecl_with_scope): Fix thinko.  Add forward
	declaration.

	* decl.c (pushdecl_with_scope):  New function.
	* decl.c (pushdecl_top_level):  Use new function.
	* decl.c (pushtag):  Initialize newdecl.
	* decl.c (pushtag):  Push new type decl into correct scope.

Mon Feb  7 14:42:03 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c, cvt.c, init.c, search.c, cp-tree.h:
	Eradicate LOOKUP_PROTECTED_OK.

Mon Feb  7 13:57:19 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* decl.c (pushtag, xref_tag), cp-tree.h:  Add extra parameter
	 'globalize' to signify implicit declarations.
	* decl.c (globalize_nested_type, maybe_globalize_type):  Removed.
	* decl.c (set_identifier_type_value_with_scope):  New function.
	* decl.c (set_identifier_local_value):  Simplify.
	* spew.c (yylex, do_addr):  Modify to return a _DEFN if a
	forward declaration (followed by ';' and not preceded by 'friend').
	* class.c, decl.c, except.c, init.c, parse.y,
	pt.c, search.c: Add new argument to calls to xref_tag and
	pushtag.

Mon Feb  7 00:22:59 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (ACCESSIBLY_UNIQUELY_DERIVED_P): New macro, means what
	ACCESSIBLY_DERIVED_FROM_P meant before.
	(ACCESSIBLY_DERIVED_FROM_P): Now disregards ambiguity.

	* cvt.c (build_up_reference): Call get_binfo with PROTECT == 1.

	* search.c (get_base_distance_recursive): Members and friends of
	a class X can implicitly convert an X* to a pointer to a private or
	protected immediate base class of X.
	(get_binfo_recursive): Likewise.
	(get_base_distance): Ignore ambiguity if PROTECT < 0.
	(get_binfo): Lose multiple values of PROTECT.
	(compute_access): Protected is OK if the start of the
	search is an accessible base class of current_class_type.

	* method.c (build_opfncall): Do check access on operator new here.

	* decl.c (finish_function): Don't check access on operator new
	here.

Sun Feb  6 14:06:58 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (xref_tag): The base of a derived struct is NOT always
	public.  Duh.

	* pt.c (do_explicit_instantiation): New function, called from
	parser to do explicit function instantiation.
	(type_unification): Allow the args list to be terminated with
	void_list_node.
	(do_pending_expansions): Look at i->interface for non-member
	templates.

	* parse.y (datadef): Move explicit_instantiation here.
	(structsp): From here.
	(datadef): Complain about `int;'.

Sun Feb  6 12:33:18 1994  Per Bothner  <bothner@kalessin.cygnus.com>

	* pt.c (end_template_instantiation), cp-tree.h:  Remove unused
	second parameter, and simplify first from a TREE_LIST where
	we only care about its TREE_VALUE to just the value (an IDENTIFIER).
	* pt.c (instantiate_member_templates):  Simplify argument list
	from a TREE_LIST to just an IDENTIFIER.
	* lex.c (yyprint):  PRE_PARSED_CLASS_DECL is now just an IDENTIFIER.
	* parse.y (template_instantiate_once):  Simplify accordingly.
	* decl.c (inner_binding_level): New.  Use various places to
	simplify.

Sun Feb  6 02:49:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck2.c (build_functional_cast): int() -> int(0).

Sat Feb  5 00:53:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't do a bitwise copy for op= if the
	class has a virtual function table.

	* typeck.c (convert_for_initialization): Restore warnings about
	not using defined op=.  Should really be my_friendly_aborts, I
	s'pose.

Fri Feb  4 14:21:00 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Tidy up conditions for doing bitwise
	copies of objects.

	* decl.c (build_default_constructor): #if 0 out.

	* *: Eradicate TYPE_GETS_{ASSIGNMENT,ASSIGN_REF,CONST_ASSIGN_REF,
	CONST_INIT_REF}, TYPE_HAS_REAL_CONSTRUCTOR.

	* decl.c (grokdeclarator): Don't return void_type_node for
	friends being defined here.

	* init.c (perform_member_init): Only do the init if it's useful.

	* lex.c (default_copy_constructor_body): If we don't need to do
	memberwise init, just call __builtin_memcpy.
	(default_assign_ref_body): Likewise.

	* decl.c (grokdeclarator): If friendp && virtualp, friendp = 0.

Fri Feb  4 13:02:56 1994  Mike Stump  <mrs@cygnus.com>

	* lex.c (reinit_parse_for_method, cons_up_default_function):
	Don't give warn_if_unknown_interface warning when it came from a
	system header file.
	* pt.c (end_template_decl, instantiate_template): Likewise.
	* decl.c (start_decl): Likewise.

Fri Feb  4 00:41:21 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Don't try to set TYPE_WAS_ANONYMOUS on
	enums.

	* decl2.c (constructor_name_full): Use IS_AGGR_TYPE_CODE instead of
	IS_AGGR_TYPE, since we don't know it's a type.

Thu Feb  3 11:36:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokdeclarator): Don't complain about anonymous unions.

	* cp-tree.h (TYPE_WAS_ANONYMOUS): This struct was originally
	anonymous, but had a name given to it by a typedef.

	* decl.c (grokdeclarator): When renaming an anonymous struct, set
	TYPE_WAS_ANONYMOUS.

	* decl2.c (constructor_name_full): Use TYPE_WAS_ANONYMOUS.

	* cp-tree.h (DECL_UNDEFINED_FRIENDS): #if 0 out.

	* init.c (xref_friend): Don't set up DECL_UNDEFINED_FRIENDS.
	(embrace_waiting_friends): Don't use DECL_UNDEFINED_FRIENDS.
	
	* decl.c (grokdeclarator): Set TYPE_NESTED_NAME properly on nested
	anonymous structs that get typedef'd.

	* decl.c (grokdeclarator): Always return void_type_node for
	friends.

	* error.c (dump_function_decl): Don't use DECL_CLASS_CONTEXT for
	friends.
	(dump_function_decl): Don't print out default args for
	a function used in an expression.

	* decl.c (grokdeclarator): Give error on abstract declarator used
	in an invalid context (i.e. `void (*)();').

	* error.c (cp_line_of): Support _TYPE nodes.
	(cp_file_of): Likewise.

	* cvt.c (build_up_reference): Don't abort if passed a SAVE_EXPR;
	it can happen for the RHS of an assignment stmt where the LHS is
	a COND_EXPR.

	* init.c (expand_aggr_init_1): Deal with bracketed initializer
	lists properly.

	* class.c (finish_struct): Deal with enumerators and typedefs
	again.

Wed Feb  2 11:30:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Tidy up loop over fields.

	* errfn.c (cp_thing): Don't advance twice after a format.

	* class.c (finish_struct): Complain about needing a constructor
	if a member has only non-default constructors, and don't try to
	generate a default constructor.

	* decl.c (finish_decl): Also do the constructor thing if
	TYPE_NEEDS_CONSTRUCTING is set (for arrays).

	* search.c (unuse_fields): New function: mark all fields in this
	type unused.
	(dfs_unuse_fields): Helper function.

	* class.c (pushclass): If the new class is the same as the old
	class, still unuse the fields.
	(unuse_fields): Move to search.c.

	* decl.c (grok_op_properties): Add friendp argument.
	(grokfndecl): Pass it.
	(start_method): Likewise.

	* decl2.c (delete_sanity): Add use_global_delete parameter to catch
	::delete calls.

	* parse.y (unary_expr): Pass new parameter to delete_sanity.

	* lex.c (default_copy_constructor_body): Don't choke if the union
	has no fields.
	(default_assign_ref_body): Likewise.

	* call.c (compute_conversion_costs_ansi): Do the right thing for
	ellipsis matches.

	* decl.c (push_to_top_level): Optimize.

	* decl.c (start_function): Look for the lexical scope of a friend
	in DECL_CLASS_CONTEXT.

	* init.c (do_friend): Set DECL_CLASS_CONTEXT on global friends.

Tue Feb  1 15:59:24 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (TREE_GETS_PLACED_NEW): New macro.

	* init.c (init_init_processing): Don't assign BIN/BID to the
	IDENTIFIER_GLOBAL_VALUEs of their respective operators.
	(build_new): Check TREE_GETS_PLACED_NEW.

	* decl.c (grok_op_properties): Don't set TREE_GETS_NEW for a decl of
	op new with placement, set TREE_GETS_PLACED_NEW.

	* cp-tree.h (ANON_UNION_P): New macro.  Applies to decls.

	* class.c (finish_struct): Don't treat anonymous unions like
	other aggregate members.  Do synthesize methods for unions without
	a name, since they may or may not be "anonymous unions".

	* decl2.c (grok_x_components): Wipe out memory of synthesized methods
	in anonymous unions.

	* lex.c (default_copy_constructor_body): Support unions.
	(default_assign_ref_body): Likewise.

Mon Jan 31 12:07:30 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h: Fix documentation of LOOKUP_GLOBAL, add prototypes.

	* error.c (args_as_string): New function (%A), like type_as_string
	except NULL_TREE -> "..."

	* call.c (build_overload_call_real): Fix for new overloading.

	* decl.c (grok_op_properties): Set all of the TYPE_OVERLOADS_* flags
	here.

	* parse.y (operator_name): Instead of here.

	* typeck2.c (build_functional_cast): Treat a TREE_LIST as a list
	of functions.

	* call.c (build_overload_call_real): Support LOOKUP_SPECULATIVELY.

	* method.c (build_opfncall): Don't need to massage return value
	any more, call build_overload_call with all flags.

	* typeck.c (build_x_binary_op): Put back speculative call to
	build_opfncall.
	(build_x_unary_op): Likewise.
	(build_x_conditional_expr): Likewise.

Mon Jan 31 10:00:30 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_type_conversion_1): Change call to pedwarn into
	warning, and conditionalize upon warn_cast_qual.

Fri Jan 28 11:48:15 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* search.c (lookup_field): If xbasetype is a binfo, copy it to
	avoid clobbering its inheritance info.

	* call.c (build_method_call): Don't overwrite basetype_path with
	TYPE_BINFO (inst_ptr_basetype) if they have the same type.

	* search.c (compute_access): Fix handling of protected inheritance
	and friendship with the enclosing class.

	* typeck2.c (store_init_value): Allow passing of TREE_CHAIN for
	initialization of arbitrary variable.

	* typeck2.c (build_functional_cast): Only try calling a method if
	one exists.

	* decl.c (grokdeclarator): Move handling of constructor syntax
	initialization into first loop for generality.
	(parmlist_is_random): Lose.

	* lex.c (cons_up_default_function): Set TREE_PARMLIST on arguments
	to default function.

Thu Jan 27 19:26:51 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (grokparms): Abort if we get called with something we don't
	expect.

Thu Jan 27 17:37:25 1994  Mike Stump  <mrs@cygnus.com>

	* call.c (build_overload_call_real): Change argument complain to
	flags to match style of rest of code.  Pass it down to
	build_function_call_real as necessary.
	* call.c (build_overload_call, build_overload_call_maybe): Change
	argument complain to flags to match style of rest of code.
	* cp-tree.h (build_function_call_real): Added fourth flags
	argument.
	* cvt.c (convert_to_reference): Only give warning messages, if
	LOOKUP_COMPLAIN is set.
	* typeck.c (build_x_function_call): Change simple complain
	argument to build_overload_call_maybe and build_overload_call, to
	LOOKUP_COMPLAIN to match style of rest of code.
	* typeck2.c (build_functional_cast): Likewise.
	* typeck.c (build_function_call_real): Add flags, so that we can
	not complain, if we don't want to complain.  Complain about
	arguments, if we are complaining, otherwise don't.
	* typeck.c (build_function_call, build_function_call_maybe):
	Stick in flags argument.
	* typeck.c (build_x_binary_op, build_x_unary_op,
	build_x_conditional_expr, build_x_compound_expr): Follow style of
	build_x_indirect_ref, as it is more correct and more common.

Thu Jan 27 14:36:20 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (build_method_call): Don't check for being called with
	a pointer.

	* decl2.c (finish_file): Don't play with DECL_CLASS_CONTEXT for the
	static initializer function.

	* init.c (build_member_call): Use convert_force here, too.

	* search.c (compute_access): Only treat static members specially
	if they are referenced directly.

Wed Jan 26 18:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* gxxint.texi (Access Control): New node.

	* search.c (current_scope): New function; returns whichever of
	current_class_type and current_function_decl is the most nested.
	(compute_access): Total overhaul to make it clearer and more
	correct.  Don't use the cache for now; in the only situation where
	it was used before, it gained nothing.  This frees up three of the
	DECL_LANG_FLAGs for possible other use!

	* cp-tree.h: #if 0 out DECL_PUBLIC & friends.

	* typeck.c (build_component_ref_1): Don't check DECL_PUBLIC.

	* call.c (build_method_call): Use convert_force to cast `this' --
	rely on the access checking for the method itself.

	* init.c (is_friend): Do the nesting thing, handle types.  I am
	my own friend.
	(is_friend_type): Become a shell for is_friend.
	(add_friend): Never stick in ctype.
	Why are the friendship functions in init.c, anyway?

Wed Jan 26 17:50:00 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (build_type_conversion_1): Don't conditionalize call to
	pedwarn upon pedantic.

Wed Jan 26 17:20:46 1994  Mike Stump  <mrs@cygnus.com>

	* cvt.c (convert_to_reference): Add 8.4.3 checking so that one
	gets a warning if one tries to initialize a non-const & from a
	non-lvalue.
	* cvt.c (convert_to_reference): Use %P format for argument
	numbers in warnings.

Wed Jan 26 14:35:06 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_delete): Follow style in call.c to construct the
	virtual call to the desctructor, as that code is right.  Fixes a
	problem of the compiler saying a pointer conversion is ambiguous.

Wed Jan 26 11:28:14 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (VTABLE_NAME_P): Change other occurrence of
	VTABLE_NAME_FORMAT to VTABLE_NAME.

	* *: s/visibility/access/g

Tue Jan 25 18:39:12 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Don't smash references if INIT_EXPR.

Tue Jan 25 13:54:29 1994  Mike Stump  <mrs@cygnus.com>

	* init.c (build_delete): Back out Jan 17th & 18th pacthes, as
	they break libg++.

Tue Jan 25 13:11:45 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* decl.c (duplicate_decls): Fix pointer arithmetic.

Mon Jan 24 15:50:06 1994  Chip Salzenberg  <chip@fin.uucp>

	    [ cp-* changes propagated from c-* changes in 940114 snapshot ]
	    * cp-parse.y (maybe_attribute): Allow multiple __attribute__
	    clauses on a declaration.

Mon Jan 24 17:06:23 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Do synthesize methods for anon
	structs, just not unions.

Mon Jan 24 13:50:13 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* decl.c (xref_tag): handle anonymous nested type.
	* decl.c (globalize_nested_type): add no globalize bit check.
	* spew.c (hack_more_ids) : templated nested decl not push top
	level.

	* parse.y : get rid of 'goto do_components'. It is much better
	for debugging.

	* decl.c (is_anon_name): get rid of the function and use the
	macro ANON_AGGRNAME_P.
	* pt.c : ditto.

Fri Jan 21 14:06:02 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct): Don't synthesize any methods for
	anonymous structs/unions.

	* typeck.c (build_modify_expr): Don't treat pmf's as class objects.

Thu Jan 20 18:56:46 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* method.c (build_opfncall): Call build_indirect_ref on
	synthesized instance for operator delete.

	* pt.c (type_unification): Don't abort if called with a list of
	types in ARGS.

	* class.c (instantiate_type): Deal with function templates.

Thu Jan 20 16:55:35 1994  Jim Wilson  <wilson@sphagnum.cygnus.com>

	* Makefile.in (CC): Default to cc not gcc.

Thu Jan 20 13:47:54 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr): Call constructor if appropriate.

	* decl.c (push_to_top_level): Clear out class-level bindings cache.

Wed Jan 19 13:51:22 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* call.c (resolve_scope_to_name): Work recursively (previously only
	looked down one level).

	* lex.c (do_pending_inlines): If we're still dealing with the last
	batch of inlines, don't start working on a new one.

	* Makefile.in (stamp-parse): Update conflict count.
	(TAGS): Fix.

	* parse.y (explicit_instantiation): New rule; implements
	'template A<int>' syntax (though not 'template foo(int)' yet).
	(structsp): Add explicit_instantiation.

Tue Jan 18 13:53:05 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* class.c (finish_struct, etc.): Simplify decision to synthesize
	a destructor.

	* call.c, class.c, cp-tree.h, decl.c, init.c,
	ptree.c, search.c, typeck.c, typeck2.c: Nuke
	TYPE_NEEDS_CONSTRUCTOR (change all calls to TYPE_NEEDS_CONSTRUCTING).
	* init.c (expand_aggr_init_1): Don't try non-constructor methods
	of initializing objects.
	(build_new): Don't try other methods if the constructor lookup fails.

	* class.c (finish_base_struct): Set cant_have_default_ctor and
	cant_synth_copy_ctor properly.
	(finish_struct): Likewise.

Mon Jan 17 13:58:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* typeck.c (build_modify_expr_1): #if 0 out again.
	(build_modify_expr): #if 0 out memberwise init code again.

	* lex.c (default_copy_constructor_body): Be const-correct.
	(default_assign_ref_body): Likewise.

	* init.c (perform_member_init): Use TYPE_HAS_CONSTRUCTOR to decide
	whether or not to use it, rather than TYPE_NEEDS_CONSTRUCTING.
	(expand_aggr_init): Disable silent conversion from initializer list
	to list of args for a constructor.

	* class.c (base_info): Lose needs_default_ctor.
	(finish_base_struct): Likewise.
	(finish_struct): Likewise.

	* decl.c (init_decl_processing): Don't turn off flag_default_inline
	just because flag_no_inline is on.
	(finish_decl): Use TYPE_HAS_CONSTRUCTOR to decide to use
	constructor.

	* class.c (finish_struct): Synthesize default ctor whenever
	allowed.

	* Makefile.in (TAGS): Don't try to run etags on cp-parse.y.

Sat Jan 15 18:34:33 1994  Mike Stump  <mrs@cygnus.com>

	* Makefile.in, configure: Handle the C++ front-end in a
	subdirectory.
	* cp-*: Move C++ front-end to cp/*.

Fri Jan 14 14:09:37 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_function_call_real): Modify to match other
	instances of taking the address of the function.

	* cp-class.c (finish_struct): Set TYPE_HAS_REAL_CONSTRUCTOR to 1 if
	there are non-synthesized constructors.
	Only set TYPE_NEEDS_CONSTRUCTOR if TYPE_HAS_REAL_CONSTRUCTOR.
	Always generate copy constructor if possible.

	* cp-tree.h (lang_type): Add has_real_constructor bitfield.
	(TYPE_HAS_REAL_CONSTRUCTOR): Define.

	* cp-lex.c (default_copy_constructor_body): Use init syntax
	for all bases.

	* cp-type2.c (store_init_value): Only give error for initializer list
	if TYPE_HAS_REAL_CONSTRUCTOR.

Thu Jan 13 15:38:29 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.h (DECL_SYNTHESIZED): Add defn.
	(lang_decl): Add synthesized bitfield to decl_flags.

	* cp-lex.c (cons_up_default_function): Use DECL_SYNTHESIZED to mark
	artificial methods, rather than a line # of 0.

Fri Jan 14 18:25:29 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl (xref_tag): fix a bug in conflict type.
	* cp-parse.y : add SCOPED_NAME for uninstantiated template nested
	type reference.
	* cp-spew.c (yylex) : generated SCOPED_NAME token.
	* cp-lex.c (yyprint): handle SCOPED_NAME.

Fri Jan 14 17:00:29 1994  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (pushdecl): Revert patch from Jan 11 19:33:03, as it is
	not right.

Thu Jan 13 14:00:35 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl2.c (grok_x_components): fix a bug that enum type does not
	have type_flags.

Thu Jan 13 11:39:34 1994  Mike Stump  <mrs@cygnus.com>

	Ensure that all vtable pointers are initialized with all the right
	values.

	* cp-class.c (is_normal): Changed to reflect new meaning of
	CLASSTYPE_VFIELD_PARENT.
	* cp-class.c (maybe_fixup_vptrs): Use of
	CLASSTYPE_NEEDS_VIRTUAL_REINIT here is misguided.  Use
	BINFO_MODIFIED instead.
	* cp-class.c (finish_struct): Changed to reflect new meaning of
	CLASSTYPE_VFIELD_PARENT.
	* cp-decl.c (get_binfo_from_vfield): Removed, unneeded now.
	* cp-decl.c (finish_function): Use init_vtbl_ptrs, instead of open
	coding it here.
	* cp-init.c (init_vfields): Changed name to init_vtbl_ptrs, and
	re-implement.
	* cp-init.c (emit_base_init): Use new name init_vtbl_ptrs.
	* cp-tree.h (vfield_parent): Changed to integer.
	* cp-tree.h (CLASSTYPE_VFIELD_PARENT): Changed docs to reflect new
	meaning.
	* cp-tree.h (init_vtbl_ptrs): Added init_vtbl_ptrs.

Wed Jan 12 18:24:16 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl.c (xref_tag): re-implement globalize nested type.
	* cp-decl2.c (grok_x_components): ditto.
	* cp-parse.y: ditto.
	* cp-tree.h (lang_type): add no_globalize bit in type_flags.

Wed Jan 12 14:08:09 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Don't set TREE_PUBLIC on friend
	decls with a definition attached.

	* cp-typeck.c (build_modify_expr): Undo previous change in the case
	of INIT_EXPRs.

Tue Jan 11 19:33:03 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_modify_expr): Replace code for generating
	assignment semantics for classes with an error.
	(build_modify_expr_1): #if 0 out.

	* cp-decl.c (pushdecl): Patch bogus design of pushdecl
	behavior for overloaded functions (it doesn't push anything).

	* cp-class.c (finish_struct): When generating default op=,
	set TYPE_HAS_ASSIGNMENT.

Mon Jan 10 18:48:06 1994  Mike Stump  <mrs@cygnus.com>

	* cp-cvt.c (convert): Make {double, clashing enum} -> enum
	invalid.
	* cp-typeck.c (convert_for_assignment): Simplify.
	* cp-decl2.c (warn_enum_clash): Removed.
	* invoke.texi (-Wenum-clash): Removed.
	* toplev.c (-Wenum-clash): Removed.

Mon Jan 10 17:48:37 1994  Kung Hsu  <kung@mexican.cygnus.com>

	* cp-decl.c (finish_decl): fix incorrect popclass call.

	* cp-decl.c (is_anon_name): new function, check whether the name
	is anonymous name generated by compiler.
	* cp-decl.c (grokdeclarator): allow nested SCOPE_REF
	* cp-spew.c (hack_more_ids): handle nested type in template.
	* cp-parse.y : handle nested type reference in uninstantiated
	template.
	* cp-call.c (build_method_call): handle uninstantiated template
	case.
	* cp-pt.c (search_nested_type_in_tmpl): new function, search nested 
	type in	template.
	* cp-pt.c (lookup_nested_type_by_name): new function, lookup nested 
	type by name.
	* cp-pt.c (tsubst): handle nested type search by name.

Mon Jan 10 14:32:18 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (build_member_call): Propagate qualifiers to new type.

	* cp-call.c (build_method_call): Count functions the new way.

Fri Jan  7 19:03:26 1994  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (pushtag): Set DECL_ASSEMBLER_NAME for nested classes,
	too.

Tue Jan  4 16:45:51 1994  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-parse.y: change to handle whether to globalize nested class.
	* cp-decl.c(xref_tag, maybe_globalize_type): Likewise.

Mon Jan  3 22:22:32 1994  Gerald Baumgartner  <gb@cygnus.com>

	* Makefile.in cp-call.c cp-class.c cp-cvt.c cp-decl.c cp-decl2.c
	cp-error.c cp-init.c cp-lex.c cp-lex.h cp-method.c cp-parse.y
	cp-spew.c cp-tree.c cp-tree.h cp-type2.c cp-typeck.c cp-xref.c
	gplus.gperf toplev.c: Incorporated C++ signature extension.
	* cp-sig.c: New file, contains most of signature processing.
	* cp-hash.h: Regenerated from gplus.gperf.

	* gcc.1 g++.1: Added explanation for  the `-fhandle-signatures'
	and `-fno-handle-signatures' command line flags.

	* gcc.texi: Changed the last-modification date.
	* invoke.texi: Added `-fhandle-signatures' in the list of
	C++ language options.  Added explanation for this option.

Tue Dec 28 21:10:03 1993  Mike Stump  <mrs@cygnus.com>

	* cp-init.c (expand_vec_init): Remove comptypes test, as it is too
	harsh here.

Tue Dec 28 13:42:22 1993  Mike Stump  <mrs@cygnus.com>

	* cp-pt.c (do_pending_expansions): Decide to expand a template
	member function, based upon it's class type, not the class type of
	the first place it was declared.

Tue Dec 28 05:42:31 1993  Mike Stump  <mrs@cygnus.com>

	* cp-class.c (is_normal): New routine, use to determine when the
	given binfo is the normal one.  (The one that should have the simple
	vtable name.)
	* cp-class.c (modify_other_vtable_entries): Use DECL_ASSEMBLER_NAME
	to check if two fndecls are `the same'.  Sometimes this routine can
	modify the main vtable, and normal should be 1, in that case, so use
	is_normal() to determine if this is the main vtable for the class.
	Don't recurse down virtual bases, as they are shared, and we take
	care of them elsewhere.
	* cp-class.c (modify_vtable_entries): If we have already updated the
	vtable with the new virtual, don't do it again.
	* cp-class.c (finish_struct): Set CLASSTYPE_VFIELD_PARENT as
	appropriate.  Do virtual function overriding in virtual bases, after
	normal overriding, so that the base function list in DECL_VINDEX is
	not overridden, before we have a chance to run through the list.
	Use DECL_ASSEMBLER_NAME to check if two fndecls are `the same'.
	Make sure we pass the right address into modify_vtable_entries.
	* cp-tree.h (CLASSTYPE_VFIELD_PARENT): New field to indicate which
	binfo is the one that has the vtable that we based our vtable on.

Fri Dec 24 09:40:52 1993  Michael Tiemann  <tiemann@blues.cygnus.com>

	* cp-typeck.c (c_expand_start_case): Use default_conversion to
	convert expression from reference type if necessary.

Wed Dec 22 17:58:43 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-typeck.c (build_unary_op): Make sure that it's a TREE_LIST before
	trying to read its TREE_VALUE.

	* cp-class.c (finish_struct_methods): Clear DECL_IN_AGGR_P here.
	(finish_struct): Instead of here.

Tue Dec 21 14:34:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't
	have TYPE_PTRMEMFUNC_P set before we try to build its
	CLASSTYPE_ID_AS_LIST.
	(get_decl_list): Likewise, when trying to read it.

	* cp-tree.h (VTABLE_NAME): No def with NO_{DOLLAR,DOT} defined.
	(VTABLE_NAME_P): Use it instead of VTABLE_NAME_FORMAT.

Mon Dec 20 13:35:03 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-typeck.c (rationalize_conditional_expr): New function.
	(unary_complex_lvalue): Use it.
	(build_modify_expr): Use it, since trying to do an ADDR_EXPR of it
	with build_unary_op won't cut it.  Don't wrap the COND_EXPR with a
	SAVE_EXPR either.

	* cp-decl2.c (explicit_warn_return_type): Deleted variable.
	(lang_decode_option): Set warn_return_type, not explicit_*, for
	-Wreturn-type and -Wall.  This is what rest_of_compilation uses to
	decide if it should go into jump_optimize or not.
	* cp-tree.h (explicit_warn_return_type): Deleted.
	* cp-decl.c (grokdeclarator): Use warn_return_type, not explicit_*.
	(finish_function): Also complain about no return in a non-void fn if
	we're being pedantic (don't rely on use of -Wreturn-type).

Fri Dec 17 15:45:46 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-decl.c (grokdeclarator): Forbid declaration of a function as
	static if it's being done inside another function.

	* cp-search.c (compute_visibility): Check for friendship both ways.

Fri Dec 17 14:28:25 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-cvt.c (build_default_binary_type_conversion): Make error
	messages more helpful.

	* cp-error.c (op_as_string): New function, returns "operator =="
	given EQ_EXPR or suchlike.

Fri Dec 17 13:28:11 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (print_n_candidates): New function.
	(build_overload_call_real): Use it when we complain about a call
	being ambiguous.

Fri Dec 17 12:41:17 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-call.c (build_method_call): Fix checking for static call
	context.

	* cp-method.c (build_opfncall): Call build_indirect_ref on argument
	to operator new.

	* cp-init.c (build_new): Don't mess with rval when building
	indirect ref.

Thu Dec 16 16:48:05 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-lex.c (default_assign_ref_body): add check when TYPE_NESTED_
	NAME(type) may not be exist. It's not a problem for old compiler.

Thu Dec 16 14:46:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (CLASSTYPE_ALTERS_VISIBILITIES_P): Delete macro, it's
	never used for anything.
	(struct lang_type, member type_flags): Delete field
	`alters_visibility', and up `dummy' by 1.
	* cp-class.c (finish_base_struct): Delete code that copies the
	setting of CLASSTYPE_ALTERS_VISIBILITIES_P.
	(finish_struct): Delete code that sets it.

Thu Dec 16 14:44:39 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c, cp-init.c, cp-typeck.c: Fix arguments to
	build_method_call that I messed up before.

	* cp-search.c (get_base_distance): If protect > 1, allow immediate
	private base.

	* cp-class.c (finish_base_struct): Set cant_synth_* correctly.
	(finish_struct): Likewise.  Well, nigh-correctly; it won't deal
	properly with the case where a class contains an object of an
	ambiguous base class which has a protected op=.  Should be fixed
	when the access control code gets overhauled.
	(finish_struct_methods): Set TYPE_HAS_NONPUBLIC_* correctly.

Thu Dec 16 12:17:06 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-lex.c (real_yylex): Turn the code back on that deals with
	__FUNCTION__ and __PRETTY_FUNCTION__.  Don't use lookup_name, to
	avoid the ambiguity problems that led to it being turned off in the
	first place.

	* cp-method.c (hack_identifier): Also check for a TYPE_PTRMEMFUNC_P
	to see if something is a method.

Wed Dec 15 18:35:58 1993  Mike Stump  <mrs@cygnus.com>

	* cp-typeck.c (build_modify_expr): Avoid error messages on small
	enum bit fields.
	* cp-typeck.c (convert_for_assignment): Add missing argument to
	cp_warning and cp_pedwarn calls.

Wed Dec 15 18:25:32 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-parse.y (member_init): ANSI C++ doesn't forbid old-style base
	initializers; it's just anachronistic.

	* cp-decl.c (finish_decl): Don't require external-linkage arrays
	to have a complete type at declaration time when pedantic.

Tue Dec 14 11:37:23 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (pushdecl): Don't set DECL_CONTEXT if it's already set.

	* cp-call.c (build_method_call): Don't dereference pointer given
	as instance.

	* cp-decl.c (finish_function): Don't pass pointer to
	build_method_call.
	(finish_function): Likewise.

	* cp-typeck.c (build_x_function_call): Likewise.

	* cp-method.c (build_component_type_expr): Likewise.

	* cp-init.c (build_member_call): Likewise.
	(build_new): Likewise.

Mon Dec 13 18:04:33 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-decl.c (xref_tag): fix regression created by changes made 
	in Dec. 7 1993.
	* cp-decl.c (xref_defn_tag): fix parallel nested class problem.

Fri Dec 10 12:40:25 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print
	out the final evaluation of the function, so we can see if ELLIPSIS,
	USER, and EVIL were set at the end.

	* cp-call.c (convert_harshness_ansi): When the parm isn't an lvalue,
	only go for setting TRIVIAL_CODE if we are dealing with types that
	are compatible.

Thu Dec  9 18:27:22 1993  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (flag_huge_objects): New flag to allow large objects.
	* toplev.c (lang_options): Likewise.
	* cp-decl2.c (flag_huge_objects, lang_f_options): Likewise.
	* cp-decl.c (delta_type_node): New type for delta entries.
	* cp-tree.h (delta_type_node): Likewise.
	* cp-decl.c (init_decl_processing): Setup delta_type_node.
	* cp-decl.c (init_decl_processing, build_ptrmemfunc_type): Use
	delta_type_node instead of short_integer_type_node. 
	* cp-class.c (build_vtable_entry): Likewise.

Thu Dec  9 16:19:05 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-tree.h (OPERATOR_TYPENAME_P): Define outside of
	NO_{DOLLAR,DOT} macro checks, so it always gets defined.
	(VTABLE_NAME_P): Define for NO_DOT && NO_DOLLAR_IN_LABEL.

Wed Dec  8 17:38:06 1993  Mike Stump  <mrs@cygnus.com>

	* cp-decl.c (finish_decl): Make sure things that can go into
	"common", do go into common, if -fcommon is given.

Wed Dec  8 13:01:54 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (print_harshness) [DEBUG_MATCHING]: New function.
	(compute_conversion_costs_ansi) [DEBUG_MATCHING]: Print out
	argument matching diagnostics to make instantly clear what the
	compiler is doing.

	* cp-call.c (convert_harshness_ansi): If the parm isn't an lvalue,
	then check to see if the penalty was increased due to
	signed/unsigned mismatch, and use a TRIVIAL_CODE if it wasn't.

Tue Dec  7 18:29:14 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-decl.c (xref_tag, pushtag): Fix nested class search/resolution
	problem.

Tue Dec  7 16:09:34 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Before synthesizing methods, if no
	methods have yet been declared then set nonprivate_method.  Don't
	set non_private method after synthesizing a method.

	* cp-lex.c (extract_interface_info): If flag_alt_external_templates
	is set, tie emitted code to the location of template instantiation,
	rather than definition.

	* cp-tree.h: Declare flag_alt_external_templates.

	* cp-decl2.c (lang_decode_option): Support -falt-external-templates.

	* toplev.c (lang_options): Likewise.

Mon Oct  4 12:50:02 1993  Chip Salzenberg  <chip@fin.uucp>

	[changes propagated from 930810 snapshot]
	* cp-decl.c (init_decl_processing): Make long long available for use
	as SIZE_TYPE and PTRDIFF_TYPE.
	(finish_decl): Allow file-scope static incomplete array.
	(grokdeclarator): Don't pass on const and volatile fron function
	value type to function type.
	Warn here for volatile fn returning non-void type.
	* cp-parse.y (attrib): Accept attributes `volatile' with alias
	`noreturn', and `const'.
	* cp-typeck.c (default_conversion): Don't lose const and volatile.
	(build_binary_op_nodefault): Generate pedantic warning for comparison
	of complete pointer type with incomplete pointer type.
	(build_c_cast): Be careful that null pointer constant be INTEGER_CST.

Tue Dec  7 10:46:48 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (expand_vec_init): When creating a temporary for copying
	arrays, use the type of the source, not the target.

	* cp-cvt.c (convert): Pass an argument for errtype to
	convert_to_reference.

	* cp-error.c (dump_expr, COMPONENT_REF & CALL_EXPR): Deal with
	methods, -> and `this'.

Mon Dec  6 17:12:33 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-error.c (parm_as_string): New function; returns `this' or arg
	number.  Corresponds to %P.
	(dump_expr): Deal with method calls.

	* cp-cvt.c (convert_to_reference): Stop using warn_for_assignment.
	* cp-typeck.c (convert_for_assignment): Likewise.
	(warn_for_assignment): Lose.

Mon Dec  6 11:33:35 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (ideal_candidate_ansi): Delete code that was never
	doing anything useful.  Instead, sort once, and DO NOT wipe
	out any codes with EVIL_CODE, since that's what we use as a
	marker for the end of the list of candidates.

	* cp-cvt.c (convert_to_aggr): Make sure to always set H_LEN.

Mon Dec  6 12:49:17 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-init.c (get_aggr_from_typedef): New function, like
	is_aggr_typedef but returns the _TYPE.

	* cp-call.c, cp-init.c, cp-method.c: Eradicate err_name.

Sun Dec  5 18:12:48 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-lex.c (readescape): Pedwarn when a hex escape is out of range.

Thu Nov 25 23:50:19 1993  Chip Salzenberg  <chip@fin.uucp>

	Delay language context change until beginning of next decl.

	* cp-lex.h (c_header_level): Removed.
	(pending_lang_change): Declared.
	* cp-lex.c (c_header_level): Renamed from in_c_header, made static.
	(pending_lang_change): Defined.
	(check_newline): Rework code that recognizes line number and
	filename changes.  Instead of pushing and popping lang context,
	increment and decrement pending_lang_change.
	(do_pending_lang_change):  Push and pop lang context according
	to value of pending_lang_change.
	* cp-parse.y (extdefs): Use lang_extdef instead of extdef.
	(extdef): Same as extdef, but call do_pending_lang_change() first.

Mon Nov 15 15:39:15 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-typeck.c (build_binary_op_nodefault): Warn for ordered
	compare of ptr with 0 only if pedantic in both cases.

Thu Nov 25 13:31:37 1993  Chip Salzenberg  <chip@fin.uucp>

	Reinstate the below patch, which got lost in the Cygnus merge:
	Tue Nov 23 13:59:24 1993  Hallvard B Furuseth  (hbf@durin.uio.no)
	* cp-parse.y (maybe_type_qual): Don't fail to set $$.

Wed Nov 17 19:03:30 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-parse.y (attrib): Allow "ident(ident)" like the C front end.

Fri Oct 22 20:43:37 1993  Paul Eggert  <eggert@twinsun.com>

	* cp-lex.c (real_yylex): Diagnose floating point constants
	that are too large.

Wed Nov 17 19:10:37 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-type2.c (build_functional_cast): ARM page 16: When a class
	and an object, function or enumerator are declared in the same
	scope with the same name, the class name is hidden.

Wed Nov 17 19:07:18 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-call.c (convert_harshness_ansi): Distinguish float, double,
	and long double from each other when overloading.
	(compute_conversion_costs_{ansi,old}, build_method_call,
	build_overlay_call_real, convert_to_aggr): Always set and
	always use H_LEN member of candidate structure.

Mon Oct 11 23:10:53 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (duplicate_decls): Note redeclarations of library
	functions, and generate distinct warnings for them.

Mon Oct  4 12:26:49 1993  Chip Salzenberg  <chip@fin.uucp>

	Support format warnings in G++.

	* cp-tree.h: Protect against multiple inclusion.
	Declare all public functions in c-common.c (copy from c-tree.h).
	(STDIO_PROTO): Define.
	(warn_format): Declare.
	(record_format_info): Remove declaration.
	* cp-decl.c (init_decl_processing): Call init_function_format_info.
	* cp-decl2.c (lang_decode_option): Make "-Wall" include warn_format.
	* cp-typeck.c (build_function_call_real): Call check_function_format.
	(record_format_info): Remove -- obsolete stub.

Sat Jul 24 12:04:29 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (duplicate_decls): Don't warn for non-extern var decl
	following an extern one (for -Wredundant-decls).
	* cp-parse.y (primary): In statement expression case, if compstmt
	returns something other than a BLOCK, return it unchanged.

Thu Dec  2 20:44:58 1993  Chip Salzenberg  <chip@fin.uucp>

	* cp-decl.c (warn_extern_redeclared_static): New function made
	from code extracted from pushdecl.
	(duplicate_decls, pushdecl): Call new function.
	(lookup_name_current_level): Allow for IDENTIFIER_GLOBAL_VALUE
	to be a TREE_LIST when function is declared in 'extern "C" {}'.

Fri Dec  3 16:01:10 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (duplicate_tag_error): Use cp_error.
	(finish_base_struct): Check for ambiguity with direct base, and don't
	generate op= or copy ctor if it exists.

Fri Dec  3 15:32:34 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-init.c (expand_member_init): when initializer name is null,
	don't try to build it now because emit_base_init will handle it.

Fri Dec  3 12:28:59 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-lex.c (init_lex): Initialize input_filename to "<internal>" for
	code such as ExceptionHandler::operator=.

Fri Dec  3 10:32:08 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Don't try to print out dname when
	complaining about arrays of references if decl_context==TYPENAME,
	since it will be null.

	* cp-decl2.c: Default to flag_ansi_overloading.

Thu Dec  2 18:05:56 1993  Kung Hsu  <kung@cirdan.cygnus.com>

	* cp-call.c (build_method_call): use binfo from instance if it's
	different from binfo (basetype_path) passed from above.

Wed Nov 17 19:14:29 1993  Chip Salzenberg  <chip@fin.uucp>

	cp-error.c (dump_expr): Use unsigned chars to output a
	TREE_REAL_CST in hex.

Thu Dec  2 11:05:48 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Fix typo in setting
	cant_synth_asn_ref.

	* cp-tree.h (TYPE_NESTED_NAME): New macro, does
	DECL_NESTED_TYPENAME (TYPE_NAME (NODE)).

	* cp-lex.c (default_copy_constructor_body): Change
	DECL_NAME (TYPE_NAME (btype)) to TYPE_NESTED_NAME (btype).
	(default_assign_ref_body): Likewise.
	(default_copy_constructor_body): Call operator= explicitly for
	base classes that have no constructor.

Thu Dec  2 10:47:15 1993  Michael Tiemann  <tiemann@blues.cygnus.com>

	* cp-call.c (build_method_call): If the instance variable is
	converted to error_mark_node when we're trying to convert it to the
	base type of a method we're looking up, return error_mark_node.

Thu Dec  2 10:41:16 1993  Torbjorn Granlund  <tege@cygnus.com>

	* cp-typeck.c (build_binary_op_nodefault): In *_DIV_EXPR *_MOD_EXPR
	cases, tests for unsigned operands by peeking inside a NOP_EXPR.

Wed Dec  1 13:33:34 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-call.c (compute_conversion_costs_ansi): Use the size of struct
	harshness_code, not the size of short, for clearing out the
	ansi_harshness.

	* cp-call.c (print_candidates): New function.
	(build_method_call): When we had some candidates, but didn't get a
	usable match, don't report that we got an error with the first
	candidate.  Instead, say there were no matches, and list the
	candidates with print_candidates.  In the second pass, make sure we
	clear out ever_seen, so we can accurately count the number of
	functions that qualified.

Wed Dec  1 09:53:59 1993  Torbjorn Granlund  <tege@cygnus.com>

	* cp-typeck.c (build_binary_op_nodefault): Shorten for *_MOD_EXPR
	only if op1 is known to be != -1.
	(build_binary_op_nodefault): Handle *_DIV_EXPR likewise.

Tue Nov 30 14:07:26 1993  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* cp-method.c (hack_identifier): If the field itself is private, and
	not from a private base class, say so.

Mon Nov 29 03:00:56 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grokdeclarator): Always warn on initialization of
	const member.

Wed Nov 24 00:49:35 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-class.c (finish_struct): Set TYPE_GETS_CONST_* properly.
	(finish_base_struct): Set cant_synth_asn_ref properly.

	* cp-lex.c (cons_up_default_function): Add section for operator=.
	(default_assign_ref_body): New function, mostly cribbed from
	default_copy_constructor_body.

	* cp-class.c (base_info): Add members cant_synth_copy_ctor,
	cant_synth_asn_ref, no_const_asn_ref.
	(finish_base_struct): Update no_const_asn_ref, note that you should
	update cant_synth_*, propagate TYPE_GETS_ASSIGN_REF.
	(finish_struct): Add decls for cant_synth_*, no_const_asn_ref, and
	initialize them properly.  Set no_const_asn_ref properly.  Set
	cant_synth_* in some of the situations where they should be set.
	Propagate TYPE_GETS_ASSIGN_REF.  Use cant_synth_copy_ctor.  Add call
	to cons_up_default_function for operator=.

Tue Nov 23 20:24:58 1993  Mike Stump  <mrs@cygnus.com>

	* cp-cvt.c (convert_force): Add code to perform casting of pointer
	to member function types.
	* cp-typeck.c (build_ptrmemfunc): Add FORCE parameter to indicate
	when the conversion should be done, regardless.
	* cp-tree.h (build_ptrmemfunc): Likewise.
	* cp-type2.c (digest_init): Likewise.
	* cp-typeck.c (convert_for_assignment): Likewise.

Tue Nov 23 18:06:58 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-error.c (dump_expr): Do the right thing for variables of
	reference type.

	* cp-decl.c (grok_op_properties): Set TYPE_HAS_ASSIGN_REF
	and its kin properly.
	(xref_tag): Propagate TYPE_GETS_ASSIGN_REF.

Tue Nov 23 12:26:13 1993  Mike Stump  <mrs@cygnus.com>

	* cp-method.c (build_opfncall): Don't count pointer to member
	functions as aggregates here, as we don't want to look up methods in
	them.  The compiler would core dump if we did, as they don't have
	normal names.
	* cp-typeck.c (build_indirect_ref): Improve wording on error
	message.

Mon Nov 22 14:22:23 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c (grok_op_properties): Allow operator?: with pedwarn
	(since it's supported in other compiler bits).

	* cp-method.c (report_type_mismatch): Use cp_error; ignore err_name
	argument.

	* cp-error.c (dump_function_decl): Don't print return type for
	constructors and destructors.

	* cp-cvt.c (cp_convert_to_pointer): Import code from
	convert_to_pointer so we can return error_mark_node in the case of an
	error, and to allow more meaningful error messages.
	(build_type_conversion): Don't go through void* when trying
	to convert to a pointer type.

	* cp-decl.c (grokfndecl): Move call to grok_op_properties back
	after grokclassfn so that it's dealing with the right decl.
	(grok_op_properties): Don't assert !methodp for op new and op delete.

	* cp-init.c (build_delete): Don't use TYPE_BUILT_IN (there are now
	no uses of it in the compiler).

	* cp-call.c (build_scoped_method_call): Fix for destructors of simple
	types.
	(build_method_call): Likewise.

Fri Nov 19 12:59:38 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.c (count_functions): Abstraction function.

	* cp-call.c (build_overload_call_real): Deal with new overloading
	properly, remove dead code.

	* gcc.c (default_compilers): Generate and use .ii files in the
	intermediate stage of compiling C++ source.

Fri Nov 19 11:26:09 1993  Jim Wilson  <wilson@sphagnum.cygnus.com>

	* cp-expr.c (cplus_expand_expr): Make call_target a valid memory
	address before using it, so it can be later safely compared.

Fri Nov 12 15:30:27 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-pt.c (tsubst): Deal with new overloading.

	* cp-typeck.c (fntype_p): is the arg function type?
	(comp_target_parms): pedwarn on conversion from (anything) to (...).
	(build_x_function_call): Deal with new overloading.

	* cp-tree.c (decl_list_length): Deal with new overloading.
	(decl_value_member): Like value_member, but for DECL_CHAINs.

	* cp-decl.c (duplicate_decls): Deal with new overloading.
	(start_decl): Likewise.

	* cp-class.c (instantiate_type): Deal with new overloading.

	* cp-call.c (convert_harshness_ansi): Deal with new overloading.
	(convert_harshness_old): Deal with new overloading.
	(build_overload_call_real): Likewise.

Mon Nov  8 13:50:49 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-tree.c (get_unique_fn): New function; returns FUNCTION_DECL
	if unambiguous, NULL_TREE otherwise.
	(get_first_fn): Returns the first appropriate FUNCTION_DECL.
	(is_overloaded_fn): Returns whether or not the passed tree is
	a function or list of functions.

	* cp-init.c (init_init_processing): use `get_first_fn' to find
	the FUNCTION_DEFN for new and delete.

	* cp-decl.c (push_overloaded_decl): Use new overloading strategy, cut
	code size in half (I spit on special cases).

Tue Sep  7 20:03:33 1993  Jason Merrill  <jason@deneb.cygnus.com>

	* cp-decl.c: Allow references and template type parameters as well
