DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: C T

⟦48ab3fc56⟧ TextFile

    Length: 110073 (0x1adf9)
    Types: TextFile
    Names: »ChangeLog«

Derivation

└─⟦a05ed705a⟧ Bits:30007078 DKUUG GNU 2/12/89
    └─⟦6f889378a⟧ »./g++-1.36.1.tar.Z« 
        └─⟦3aa9a3deb⟧ 
            └─⟦this⟧ »g++-1.36.1/ChangeLog« 

TextFile

Mon Nov  6 00:51:43 1989  Michael Tiemann  (tiemann at arkesden)

	* crt1.c: Changes from Eirik Fuller (Cornell Theory Center) to fix
	incremental linking.
	* gnulib3.c (__do_global_cleanup): Also from Eirik: fixed braino
	that was not reinitializing __DLI.

	* cplus-method.c (build_overload_name): Mangle member functions
	with qualifiers differently than member functions without
	qualifiers.  Also, add 'F' before argument list for METHOD_TYPE,
	since cfront 2.0 seems to do so.
	* cplus-method.c (dump_type_suffix): Make formatting of these
	kinds of METHOD_TYPEs right.
	* cplus-dem.c (do_type): Grok these changes.

	* cplus-except.c (exception_object_name): Don't crash in case
	of ``raise all'', which comes encoded as VOID_TYPE_NODE.
	@@ Handle it correctly in next release.

	* cplus-decl2.c (grok_method_quals): New function.  Incorporate
	`const' and `volatile' qualifiers into FUNCTION_DECLs and
	TYPE_DECLs.  Uses code broken out of `grokclassfn'.
	* cplus-decl2.c (grokclassfn): Caller changed.
	* cplus-decl.c (grokdeclarator): Call `grok_method_quals' when
	QUALS is non-zero in declarator grokking loop.

Sat Nov  4 20:21:54 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-init.c (build_new): If TYPE_NEEDS_CONSTRUCTING (TYPE),
	then always wrap RVAL in an RTL_EXPR, since we don't know that we
	aren't one of the arms of a ?: operation.  RVAL can now be a
	SAVE_EXPR (normally) or a VAR_DECL (in the case of array
	initialization).

	* cplus-init.c (build_new): Fix braino that was causing array
	types to be collapsed into their element types, causing
	`build_new' to return a point to the element type, rather then a
	pointer to the array type.

	* cplus-decl2.c (grokfield): Check DECL_NAME (VALUE) before
	dereferencing it.

	* cplus-init.c (expand_vec_init): Do not fail to initialize
	element of an array which receive default initialization.

	* cplus-type2.c (digest_init): If TYPE needs constructing,
	don't convert INIT to TYPE.  The only time when this happens
	is when called upon to initialize an ARRAY_TYPE, and
	`expand_vec_init' will handle that case.

	* cplus-class.c (build_method_call): Error reporting for bad
	argument list was screwed for static member functions in static
	call context.

	* config.g++: Add MIPS-based configurations.

	* toplev.c: Make up for systems which do not have unistd.h (like
	many BSD systems).
	* Makefile: Add HAVE_UNISTD_H flag.

	* cplus-dem.c: Sequentize the code.

	* cplus-init.c (expand_cplus_expr_stmt): Warn if statement is just
	a reference to, and not a call of, some function.

Thu Nov  2 10:03:50 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-method.c (build_overload_name): Don't crash if we built a
	TREE_LIST which contains VOID_TYPE_NODE and which is not
	VOID_LIST_NODE.  This happens if one of the parameters is of type
	VOID_TYPE.

	* stmt.c (expand_return): Even when RETVAL has type VOID_TYPE, we
	must expand it (it may be a call to another void function).

	* integrate.c (copy_rtx_and_substitute): Moved one to many insns
	to BEFORE_INLINE_FP_RTX.

	* cplus-typeck.c (convert_for_initialization,actualparameterlist):
	Don't defaultly convert ARRAY_TYPE when converting to
	REFERENCE_TYPE.

Wed Nov  1 04:43:46 1989  Michael Tiemann  (tiemann at teacake)

	* stmt.c (init_function_start): Initialize MAX_PARM_REG to
	FIRST_PSEUDO_REGISTER.

	* cplus-init.c (expand_vec_init): This function can be called to
	initialize a non-aggregate vector.

Tue Oct 31 13:38:42 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-type2.c (process_init_constructor): Don't even try
	initializing a structure from EMPTY_INIT_NODE.

	* cplus-init.c (build_new): Handle case where SAVE_EXPR_RTL of
	new'd value is 0 by putting it CONST0_RTX.

	* cplus-typeck.c (build_component_ref): If the COMPONENT_REF is
	really a reference to a member function, do the right thing if the
	member function is virtual.

Mon Oct 30 00:39:18 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-class.c (build_method_call): Removed code that seemed to
	build (superflouously) an INDIRECT_REF for INSTANCE just before
	heading to found/found_and_ok (where INSTANCE was just
	reinitialized).  Also, fixed bug so that if INSTANCE was of fixed
	type, that fact remained known even if INSTANCE_PTR became more
	distanct due to going through a NOP_EXPR.

	* cplus-init.c (get_member_function): Add parameter EXP_ADDR_PTR
	which is a pointer to the tree representing the address of EXP.
	Also, add hairy code which does the right thing wrt. modifying
	`this' pointer when it is argument to call.
	@@ This modification causes GNU C++ to generate stupid
	conditional-branch code when optimizing.  Hopefully future
	versions of the optimizer will understand and optimize it.
	* cplus-typeck.c (build_x_function_call): Caller changed.

	* cplus-tree.h (lang_type): Added new field GOT_SEMICOLON to
	TYPE_FLAGS field, to record whether a type has been `finished' or
	not.  Attempt to catch bugs like `struct s { .. } main () { .. }'.
	* cplus-parse.y (various rules): Add call to `note_got_semicolon'.
	* cplus-decl.c (start_function): Check that we have a `finished'
	type.
	* cplus-lex.c (note_got_semicolon): Set the bit here.
	* cplus-class.c (finish_struct): Whenever we start afresh with a
	class type, zero the bit here.

	* cplus-type2.c: Rename file cplus-typeck2.c to fit brain-damaging
	SVID 14 char name limit.

	* cplus-typeck.c (build_modify_expr): Handle case where assignment
	comes from friend, rather than member function.

	* cplus-tree.c (lang_printable_name): Handle case where DECL's
	language specific field is nonexistent.
	* cplus-method.c (fndecl_as_string): Here too.

	* cplus-decl.c (finish_decl): Initialization of a reference from
	`*this' was falling down because nodes for `$this' were getting
	shared too much.

	* cplus-tree.h (TREE_HAS_CONSTRUCTOR): Reincarnate use of this
	flag--for SAVE_EXPR it means that underneath lies a call to
	`new' for a given type.
	* cplus-init.c (build_new): Set the flag.
	* cplus-method.c (dump_init): Test it.

	* cplus-tree.h (PARM_DECL_EXPR): Use this flag to distinguish
	parsing initializers for PARM_DECLs from initializers for global
	variables.
	* cplus-decl2.c (finish_file): Don't emit anything from
	STATIC_AGGREGATES that was really just for default parameters.
	* cplus-decl.c (grokparms): Set PARM_DECL_EXPR on SAVE_EXPRs.
	* cplus-method.c (dump_init): Same.

Sun Oct 29 23:23:48 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-method.c (build_opfncall): Don't check visibility here for
	operators `new' and `delete' unless within a constructor or
	destructor.
	* cplus-decl.c (finish_function): Add checks for visibility of
	those operators here instead.

	* cplus-decl2.c (groktypefield): Handle case where field name
	conflicts with a typedef.

Fri Oct 27 01:02:20 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-search.c (get_virtuals_named_this): Return a baselink
	instead of a FUNCTION_DECL.  Also, walk through FIELDS as
	baselinks.  I.e., use `next_baselink' instead of TREE_CHAIN.

	* cplus-search.c (get_first_matching_virtual): Caller changed.

Thu Oct 26 16:09:07 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-search.c (get_first_matching_virtual): Only complain about
	a particular property of a virtual function once.

	* cplus-class.c (finish_struct): If ASSOC winds up being zero,
	don't frob the vtable.

	* cplus-decl.c (shadow_tag): Handle case where exception does not
	have any fields.
	* cplus-parse.y (component_decl): Handle case where exception does
	not have any fields.

	* cplus-parse.y (structsp): Call `finish_exception' with only two
	parameters.

	* cplus-parse.y (stmt): Forgot ';' after `RAISE' stmt.

	* cplus-class.c: Gather statistics on number of elments in virtual
	function tables, number of entries we build for them, and number
	of virtual function table entries we search using linear lookup.

	* cplus-parse.y (aggr,opt.component_decl_list): Call
	`build_tree_list' instead of `decl_tree_list', because of nested
	structures.  Would be better to make TEMP_DECL_OBSTACK pushable
	like the momentary obstack, but we don't for now.

Tue Oct 24 06:26:13 1989  Michael Tiemann  (tiemann at arkesden)

	* integrate.c (copy_rtx_and_substitute): Don't change something to
	a memory address unless it really is `memory_address_p'.

	* cplus-decl.c (finish_decl): Handle array initialization if type
	of array needs constructor.  Also, implement initialization
	without INIT0 crutch.
	* cplus-init.c (expand_vec_init): Handle array initialization from
	{...} where type of array needs constructor.

	* cplus-typeck.c (build_binary_op_nodefault): Make compiler give
	error, not warning, if comparing pointers with integers.

	* cplus-typeck.c (build_component_ref): Call `lookup_fnfields' to
	get a list of methods.

Mon Oct 23 17:29:03 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-tree.h (lang_decl): Add bit `COMPILER_GENERATED' to
	indicate whether this FUNCTION_DECL was generated automatically by
	the compiler.
	* cplus-lex.c (cons_up_dtor_for_type): Set this bit.
	* cplus-decl.c (redeclaration_error_message): Give better error
	message if user redeclares something that was implicitly created
	by the compiler.

	* cplus-decl.c (finish_decl): Test DECL_LANG_SPECIFIC before
	testing DECL_IN_AGGR_P in case of init-free reference decl.

Sat Oct 21 10:29:09 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-class.c (build_method_call): Forgot to increment b_or_d as
	we go through class hierarchy.  Probably fell out as a result of
	`next_baselink' change on Friday, Oct 13.

	* cplus-cvt.c (build_up_reference): When calling
	`convert_to_nonzero_pointer', use TYPE_MAIN_VARIANT so that
	TYPE_POINTER_TO is defined.

	* cplus-search.c ({push,pop}_memoized_context): Plug memory leak
	by freeing pushing and popping the TYPE_OBSTACK irrespective of
	whether we are memoizing lookups or not.

	* cplus-decl2.c (grokclassfn): Don't make `this' TREE_READONLY
	inside of destructors.

	* cplus-search.c (get_abstract_virtuals): New function.  Returns
	the list of virtual functions that are considered abstract for a
	given type (i.e., those which are ` = 0' in declaration).
	* cplus-class.c (finish_base_struct): Call it.

	* All GNU C++ files: change names containing `UNINHERIT*' to names
	containing `ABSTRACT'.  Eliminate use of
	CLASSTYPE_HAS_ABSTRACT_VIRTUALS in favor of testing
	CLASSTYPE_ABSTRACT_VIRTUALS directly.

	* cplus-decl.c (start_function): Handle case where user names and
	internal names conflict.

	* cplus-typeck.c (build_conditional_expr): Put type instantiation
	back in.

	* cplus-decl.c (start_function): Use DECL_STATIC_CONTEXT instead
	of DECL_CONTEXT for pushing into context of static function.

	* cplus-decl.c (auto_function): Like `builtin_function', but
	builds an overloadable function.
	* cplus-decl.c (init_decl_processing): Call it for __builtin_new,
	__builtin_delete and similar functions.

Fri Oct 20 02:22:06 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-decl.c (finish_decl): Set TREE_USED bit of DECL if DECL is
	a const VAR_DECL at TOPLEVEL.

	* cplus-class.c (modify_vtable_entry): Still more fixes to code
	which computes derived vtable.

Thu Oct 19 11:14:55 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-class.c (finish_struct): Move code that sets
	TYPE_USES_MULTIPLE_INHERITANCE from here...
	* cplus-decl.c (xref_tag): ...to here.

	* cplus-decl.c (finish_decl): Oct 12 change to implement
	initialization of class members so that their initializers could
	use private members did not test DECL sufficiently.  In addition
	to checking DECL_CONTEXT, must also check that TREE_CODE (DECL) ==
	VAR_DECL.  Otherwise redeclaration of member functions cause
	crashes.

Tue Oct 17 03:34:05 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-method.c (hack_identifier): Use `error', not
	`error_with_decl' to report that a non-static member is being
	referenced in a static member function.

	* cplus-decl.c (duplicate_decls): TREE_INLINE was not being set
	for OLDDECL, which is really where it matters.

	* cplus-typeck2.c (merge_component_comparisons): Track TEM1 in
	addition to TEM0 in loop which computes BITPOS0.

	* cplus-decl2.c (grokfield): Set CLASSTYPE_LOCAL_TYPEDECLs from
	CURRENT_CLASS_TYPE rather than DECL_CONTEXT (VALUE), since the
	latter is not set up for TYPE_DECLs.

	* cplus-decl.c (xref_tag): Set CLASSTYPE_DECLARED_CLASS each time
	we see an xref to this tag until we see the actual type defined
	for this tag.

Mon Oct 16 01:48:27 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-tree.h (DECL_VIRTUAL_P): If set in an IDENTIFIER_NODE, it
	means that somebody has defined a virtual function with this name.
	* cplus-decl.c (grokfndecl): Set it.
	* cplus-search.c (get_first_matching_virtual): Use it.

	* cplus-decl.c (cplus-tree.h): Define DECL_EXTERNAL as synonym for
	TREE_LANG_FLAG_3, which means for a VAR_DECL to mean that `extern'
	was specified in for that VAR_DECL.
	* cplus-decl.c (grokvardecl): Set DECL_EXTERNAL.
	* cplus-decl.c (duplicate_decls): Set TREE_PUBLIC of `const'
	variables based on TREE_STATIC and DECL_EXTERNAL.

Sun Oct 15 00:44:01 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-decl.c (start_function): Set CURRENT_EXTERN_INLINE from
	TREE_PUBLIC of DECL1 if DECL1 came pre-parsed.

	* cplus-decl2.c (finish_file): Don't write out inline functions
	which had their address taken if they were declared
	`extern inline'.

	* cplus-decl.c (grokdeclarator): Don't set TREE_PUBLIC based on
	INLINEP here.  Also, don't treat RID_INLINE as being a storage
	class for `multiple storage classes' error message.
	* cplus-decl2.c (grokfield): Do it instead here.
	* cplus-init.c (do_friend): And here.
	* cplus-decl.c (duplicate_decls): And change this to more match
	how GCC does things.

	* cplus-lex.c [USG_STDIO]: Use this instead of USG, for turncoats
	who have enough of System V that their stdio is broken, and too
	much Berkeley for USG to be the right thing.

	* cplus-decl.c (grokdeclarator): Grok declarations of the form
	`X x(args)[size]' to mean ARGS is an initializer to the array
	constructor for X[SIZE].
	* cplus-decl2.c (finish_file): Handle new case.

	* cplus-method.c (build_opfncall): Don't abort if user makes a bad
	call to operator new.  It's not the compiler's fault.

	* cplus-init.c (finish_base_init): Unmark virtual baseclasses
	which have explicit initializers.

	* cplus-init.c (expand_aggr_init_1): Change PROTECT parameter to
	FLAGS parameter.  All callers changed.

	* cplus-decl.c (finish_function): In destructor code, it is
	CLASSTYPE_VSIZE, not TYPE_VIRTUAL_P, which is the operative
	value to test when building base destructor code.  See Sept 1
	change for more info.

	* cplus-parse.y (unary_expr): Arguments to build_vbase_delete were
	wrong: was passing POINTER_TYPE and address when should have been
	passing object type and object.

Sat Oct 14 06:45:34 1989  Michael Tiemann  (tiemann at arkesden)

	* stmt.c (expand_anon_union_decl): For anonymous unions in memory,
	don't call `change_address'.  Just cast the memory reference
	ourselves.

	* cplus-typeck2.c (store_init_value): Don't test PEDNATIC to see
	whether to permit initialization of static variable from
	non-constant, since C++ 2.0 defines it to work.

	* cplus-init.c (expand_aggr_init_1): PARM_SLOTS was allocating
	sizeof (char) instead of sizeof (struct rtx_def*).

	* cplus-decl.c (grokfndecl): Call to `get_first_matching_virtual'
	must be followed by code which, under certain cases, goes all the
	way down the inheritance hierarchy to match the virtual function.
	Otherwise, the wrong virtual function tables come in to play when
	the time comes to reconcile them (in modify_vtable_entry).  Note
	that the call to `get_first_matching_virtual' does the right thing
	within `finish_struct'.  In that case, since we pull BASE_FNDECL
	from a virtual base class's virtual function table, there is no
	issue where it should be thought of as coming from.

	* cplus-search.c (rank_mi_virtuals): Spurious TREE_TYPE made it
	look like we were trying to compare PARM_DECLs instead of _TYPE
	nodes in our list at some time.

	* cplus-search.c (get_first_matching_virtual): Friday the 13th
	change was wrong.  Instead, make `get_first_matching_virtual'
	handle the instance variable itself, and call `compparms' as
	before.

	* cplus-lex.c (reinit_parse_for_method): Null character was being
	inserted if USG hack to round up buffer length was being used.

	* cplus-class.c (compute_conversion_costs): When trying a type
	conversion, use the actual type that the function wants.  No
	reference-bashing here!

	* cplus-search.c: Add a new obstack BRIDGE_OBSTACK which contains
	the class declarations across scopes.  This is an alternative to
	building their lists on the permanant_obstack.
	* cplus-search.c (push_search_level): Record the obstack for which
	this level was pushed.
	* cplus-search.c (pop_search_level): Remove OBSTACK parameter.
	Get that value from the search level that is being popped.

	* cplus-tree.h (lang_type): Add a slot for the instance variable.
	* cplus-decl.c (start_function): Use it.

	* tree.c (build_nt0): New function.  Use this to build declarators
	instead of `build_nt'.  Uses new obstack `temp_decl_obstack'.

	* cplus-cvt.c (build_type_conversion): Distinguish void* from
	const void* if we are trying to convert from some arbitrary
	pointer to a void* variant.

	* cplus-class.c (finish_struct_bits): New function.  Code broken
	out of `finish_struct'.  Extend to handle both conversions to
	const pointers and conversions to non-const pointers.

	* cplus-tree.h (lang_type):  Extend to handle both conversions to
	const pointers and conversions to non-const pointers.

	* cplus-decl.c (start_function): FNTYPE was not re-set after
	calling `pushdecl'.  Consequently, static member functions with
	default arguments were breaking.

	* cplus-class.c (pushclass): When pushing tags into the class
	binding level, push the TYPE_DECL, not the _TYPE into the
	IDENTIFIER_CLASS_VALUE slot.

	* cplus-method.c (fndecl_as_string): Don't skip first parameter if
	FNDECL is a static member function.

	* gplus.gperf [CATCH]: Add it.

	* cplus-init.c (build_member_ref): Nodes returned from
	lookup_fnfields are not saved on the permanent obstack, regardless
	of CURRENT_OBSTACK.  This is usually ok, since they are usually
	only used as a structure through which search machinery will
	traverse looking for values that do live on the permanent obstack.
	One exception is when `build_member_ref' builds an expression
	which requires type instantiation at top-level.

	* cplus-decl.c (finish_decl): Give better error messages for
	initialization of references, and remove invalid messages as well.
	Initialization of type-qualified references is different than
	initialization of type-qualified pointers in the following way:
	you can initialization a `X&' from a `const X&', but you cannot
	initialize a `X*' from a `const X*'.  This is because the compiler
	can convert the `const X&' to a `const X', create a new temporary,
	and take a reference from that.

	* cplus-init.c (is_friend): In testing for friendly classes, allow
	for static member functions to be considered friends.

Fri Oct 13 00:03:18 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-decl.c (grokdeclarator): If DECL_CONTEXT is FIELD for
	building a TYPE_DECL, allocate using `build_lang_field_decl'
	instead of `build_decl'.

	* cplus-decl.c (xref_tag): Undo Sept 10 change.  It causes
	problems for InterViews.  Better to work around in ET++.

	* cplus-decl.c (lookup_name): When looking up NAME, if
	CURRENT_CLASS_TYPE is being defined, check its baseclasses for a
	definition of a TYPE_DECL.

	* cplus-decl.c (grok_enum_decls): Return DECL, not NULL_TREE if
	TYPE has already been recorded.

	* cplus-search.c (dfs_pushdecls): Push class-local TYPE_DECLs into
	IDENTIFIER_CLASS_VALUEs.

	* cplus-typeck.c (c_expand_return): Call `expand_cleanups_to' with
	NULL argument in case the return value generated cleanups for its
	call.

	* stmt.c (expand_anon_union_decl): Fixed so that MEM anon unions
	are correctly handled.

	* cplus-decl2.c (finish_anon_union): Handle non-global static
	anonymous unions.

	* cplus-decl.c (shadow_tag): Change int variable OK to enum
	tree_code OK_CODE, remembering the value of the code we though was
	ok.  This avoids being confused when other legitimate DECLSPECS
	(such as `static') appear after one like `union ...'.

	* cplus-class.c (popclass): When popping from a class's scope,
	back to another class's scope, restore CURRENT_VTABLE_DECL only if
	we had one before.

	* cplus-decl2.c (grokfield): Push TYPE_DECL into class level as
	soon as we see it.

	* cplus-class.c (instantiate_type): In ADDR_EXPR case, complain if
	type we are instantiating to is not POINTER_TYPE.

	* cplus-decl.c (start_method): Call `preserve_data' to save the
	parameters (which were read into the maybepermanent obstack).

	* cplus-typeck2.c (digest_init): Handle case of union with
	constructor.

	* cplus-init.c (build_member_ref): Vestigial bug from change in
	representation of method lists (from list of lists to list of
	chains).

	* cplus-class.c (instantiate_type): Rewrite TREE_LIST case to use
	`next_baselink' when appropriate, and to try overloading based on
	non-member functions if that looks appropriate.

	* cplus-search.c (next_baselink): New function.  Contains code
	broken out of `build_method_call' to advance to next chain of
	FUNCTION_DECLs.

	* cplus-init.c (build_member_ref): If member ref is a reference to
	non-unique member function, return a BASELINK (which is a list of
	lists) rather than a list containing just that type's methods with
	that name.

	* cplus-init.c (resolve_member_ref): Handle uninstantiated method
	types.

	* cplus-decl.c ({start,finish}_decl): Call pushclass/popclass for
	decls which are static class members, in order to perform
	visibility computations for initializers correctly.
	* cplus-decl.c (grokvardecl): If static class member, set
	DECL_CONTEXT of the decl to the containing class type.

	* cplus-search.c (get_first_matching_virtual): Must call comptypes
	starting from first parameter, not its TREE_CHAIN, since one
	version of the function may have a this which is `*const' while
	the other does not.

	* cplus-decl.c (finish_decl): Permit static class members of
	reference type to be uninitialized in class declaration.  They
	will get initialized elsewhere, presumably.

	* cplus-method.c (dump_type_prefix): `const' and `volatile' were
	being put in the wrong places.  Type like `const *const ...' were
	being dumped as `const const *...'.

	* cplus-decl2.c (finish_file): Don't try to initialize anything
	which has ERROR_MARK_NODE in its initializer.

Thu Oct 12 02:41:34 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-init.c (resolve_member_ref): Catch case when we are in
	static member function context by reference is to (apparently)
	non-static member.

	* cplus-method.c (fndecl_as_string): Check PARMTYPES before
	chaining down, in case of syntax error.

	* cplus-init.c (do_friend): Take QUALS parameter.  Needed for
	`grokclassfn'.  Also take CTYPE instead of CNAME parameter.
	* cplus-decl.c (grokdeclarator): Caller changed.

	* cplus-init.c (do_friend): Set DECL_CONSTRUCTOR_P bit if we get a
	constructor.

	* cplus-tree.c (layout_basetypes): Don't allocate a virtual
	baseclass pointer if we can share one with a non-virtual
	baseclass.

	* tree.c (make_node): Build PARM_DECL nodes on the
	maybepermanent_obstack, not on the permanent_obstack.

	* cplus-typeck.c (build_unary_op): If addressing a reference and
	the reference is a variable, we need to check DECL_INITIAL, in
	case the variable is being initialized by a function call at top
	level.

	* cplus-decl.c (grokdeclarator): Be more careful when looking for
	function name when giving error that parameter list is random.

	* cplus-decl.c (grokdeclarator): Change handling of STATICP for
	member functions.  Eliminate variable MEMFUNC_STATICP.

	* cplus-decl.c (init_decl_processing): Don't disable profiling
	anymore.

Wed Oct 11 05:37:12 1989  Michael Tiemann  (tiemann at arkesden)

	* c plus-except.c [_JBLEN]: More systems have more ways to fail to
	define this value.  Implement yet another way to get it.

	* cplus-typeck.c (build_component_ref): Have to really check
	whether FIELD comes from a virtual baseclass.

	* cplus-init.c (is_aggr_typedef): Renamed
	`is_aggr_typedef_or_else' to `is_aggr_typedef', and gave it
	OR_ELSE parameter.  All callers changed.
	* cplus-parse.y (member_init): Call `is_aggr_typedef' with zero
	value for OR_ELSE.  We just want to know if the member looks like
	a virtual baseclass member or not.

	* cplus-method.c (build_decl_overload): Handle case where error
	has us building an overloaded name for something with a signature
	of X::f (...).  That signature is technically erroneous, but can
	arise in the face of certain syntax errors.

	* cplus-lex.c (yylex): Handling of extern language strings was
	broken.  If we were unlucky and got a file name string while
	reading a declaration, it could cause YYLVAL.TTYPE to contain the
	filename, rather than the type that was read in.  Fixed by
	assigning to YYLVAL.TTYPE after checking for possible language
	string identifier.

	* cplus-init.c (build_new): We cannot expand `new' inside of base
	or member initializers, so instead put the expansion into an
	RTL_EXPR.  CURRENT_VTABLE_DECL is ERROR_MARK_NODE in that case.
	* cplus-parse.y (.set_base_init): Set CURRENT_VTABLE_DECL to
	ERROR_MARK_NODE to indicate we are in initialization.
	* cplus-class.c (build_vfn_ref): Don't use cached vtable if
	calling function from base or member initializer.

Tue Oct 10 22:47:47 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-typeck.c (unary_complex_lvalue): Can't take pointer to
	member through virtual baseclass.
	* cplus-typeck.c (convert_for_assignment): Same change.

	* stmt.c (assign_parms): Don't let BLKmode parameter get
	``rounded'' off its word boundary...`access_parm_map' does not
	know what to do if that should happen for an inline function.

	* cplus-decl.c (grokdeclarator): Distinguish STATICP, which has
	roughly the usual `C' meaning, from MEMFUNC_STATICP, which means
	that the declaration is a static member function.

Mon Oct  9 00:55:19 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-method.c (build_overload_name): Change naming scheme so
	that GNU calling convention (which passes objects in the stack) is
	distinct from cfront/PCC convention.

	* cplus-decl.c (push_overloaded_decl): Don't compare DECL_LANGUAGE
	of previously overloaded decl if it is not a FUNCTION_DECL.

	* cplus-decl.c (grokfndecl): Use parameter CHECK to control
	behavior of `grokclassfn' in non-constructor case (already used in
	constructor case).

	* cplus-class.c (finish_struct): Give warning if struct or union
	has no data members if PEDANTIC *or* EXTRA_WARNINGS.

	* cplus-typeck.c (convert_for_initialization): Don't forget to
	change TREE_READONLY VAR_DECLs into their constant initial value
	if they have one.

	* cplus-parse.y (.set_base_init): Change grammar to not go into
	error mode if a base initializer shows up for a non-member
	function.  Otherwise, compiler will push binding levels (in
	`start_function' and `store_parm_decls') which it will not pop,
	leaving us not at global_bindings_p at function end.

	* cplus-class.c (ideal_candidate): In the event that there is no
	ideal candidate, restore PARMS by moving value from TREE_PURPOSE
	values back into the TREE_VALUE slots.

Mon Oct  2 02:28:43 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-lex.c (cons_up_dtor_for_type): Call to `start_method'
	could yield VOID_TYPE_NODE in case of errors.  Handle that.
	* cplus-class.c (finish_struct): Caller of `cons_up_dtor_for_type'
	changed.

	* cplus-decl.c (pushtag): Don't call `pushdecl' on for tags which
	are TREE_NONLOCAL.
	* cplus-class.c (pushclass): Set TREE_NONLOCAL before calling
	`pushtag'.

Sun Oct  1 00:05:49 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-tree.h [DECL_VINDEX]: Change definition from being a
	FUNCTION_DECL to being a list of FUNCTION_DECLs, in the event that
	multiple baseclasses define the same virtual function.  This only
	affects code where DECL_VINDEX was assumed to be a FUNCTION_DECL,
	namely in cplus-decl.c (grokfndecl) and cplus-class.c
	(add_virtual_function).

	* cplus-typeck.c (convert_for_initialization): If we are
	converting to an ARRAY_TYPE, don't call `default_conversion' on an
	initializer which is also of ARRAY_TYPE.

	* cplus-decl.c (finish_decl): If FIELD_DECL is of type ARRAY_TYPE
	that has not yet been laid out, we must go through the code which
	calls `complete_array_type' for TYPE and `layout_decl' for DECL.

	* cplus-init.c (expand_aggr_init_1): See whether initializer can
	go through a type-conversion operator rather than an X(X&)
	constructor, since wel will save one constructor that way.  I.e.,
	trying to go through an X(X&) constructor may lead us to needing
	to go through a type-conversion operator, but the result of that
	conversion must still go through the original X(X&) constructor.

	* cplus-decl.c (finish_decl): For FUNCTION_DECLs with default
	argument, we build sub-FUNCTION_DECLs to catch calls to this
	function with fewer than the total number of arguments.  We set
	TREE_USED of the sub-FUNCTION_DECLs to keep GNU C++ from
	complaining about the function being when compiling with -Wall.
	We also need to set TREE_ASM_WRITTEN and DECL_INITIAL of the
	function to really ensure that GNU C++ does not spuriously
	complain about these sun-FUNCTION_DECLs.
	* cplus-decl.c (grokdeclarator): Set TREE_PUBLIC of after calling
	`grokfndecl' on all paths.

	* cplus-typeck.c (build_function_call): Set TREE_USED for
	FUNCTION_DECL if TREE_INLINE is zero.

	* cplus-decl2.c (grok_enum_decls): Move to cplus-decl.c since it
	now needs access to `struct binding_level'.
	* cplus-decl.c (grok_enum_decls): When looking for class-local
	enum tags, warning if we find them in a class binding level other
	than the current one.  It probably indicates a parse error in the
	file.

	* cplus-decl.c (lang_decode_option): Recognize new option
	-Wenum-clash, which gives warnings when enumeral types are
	used in suspect ways, such as assigning from one enumeral
	type to another.

	* cplus-typeck.c (message_2_types): Was previously called
	`error_2_types'.  Now takes argument PFN which is pointer to
	the function which will actually print the message.
	* cplus-typeck.c (convert_for_assignment): Give error for
	passing incompatible enums only if pedantic.  Otherwise, give
	warning.

	* cplus-init.c (finish_base_init): Add argument T which is the
	type for which the base initialization is being finalized.  When
	finished initializing fields which come from anonymous unions,
	call `finish_base_init' on that anonymous union, which will unmark
	interesting fields recursively.
	* cplus-decl.c (finish_function): Caller changed.

	* cplus-method.c (hack_identifier): Permit calls through
	REFERENCE_TYPE fields which overload `operator ()'.

	* cplus-cvt.c (convert): Remove warning ``assignment to virtual
	aggregate type''.

	* cplus-decl.c (finish_decl): Make sure to destroy function-local
	static objects if they had been initialized.  Set TREE_STATIC bit
	for elements of STATIC_AGGREGATES which are function-local
	objects.
	* cplus-decl2.c (finish_file): Rest of that implementation.

Sat Sep 30 20:34:52 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-typeck.c (actualparameterlist): Don't let objects with
	operator= or X(X&) constructors be passing into `...'.  If
	PEDANTIC, give error, otherwise, give warning.

	* cplus-typeck.c (convert_for_assignment): Get tougher on
	conversions to/from enumeral data types.

	* cplus-typeck.c (build_modify_expr): Make `operator=' an
	inheritable operator.

	* cplus-decl.c (push_overloaded_decl): Give error message if
	overloaded functions from different language contexts have the
	same type signature.

	* cplus-cvt.c (build_default_binary_type_conversion): If the types
	are not C++ types, then give error message saying that no type
	conversion operator exists.  Call function `typedecl_for_tag' to
	get name for error message.
	* cplus-decl.c (typedecl_for_tag): New function.  Return the
	TYPE_DECL (if any) assoicated with TAG.

	* cplus-class.c (build_functional_cast): Handle case where `A (B)'
	does not mean pass `B' to A's constructor, but rather call
	B.operator A ().

	* cplus-search.c (get_first_matching_virtual): If argument types
	differ only in their qualifiers, admit a match, but warn the user
	that this match was made.

	* cplus-lex.c (yyungetc): New function.  Give parser routines the
	ability to adjust input tokens if initial lexing was a little bit
	wrong.

	* cplus-method.c (build_overload_name): Distinguish reference
	types from non-reference types.

	* cplus-typeck.c (process_init_constructor): Give error messages
	about types of objects which cannot be initialized from an
	initializer list.

Wed Sep 27 00:22:16 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-class.c, cplus-init.c (various places): Handle cases that
	fields of struct are really local type declarations.

	* cplus-decl2.c (grokclassfn): Added new parameter CTYPE, in order
	to remove dependence on class name-class type equivalence.  This
	was done for exception handling.
	* cplus-decl.c, cplus-init.c, cplus-except.c: All callers changed.
	* cplus-lex.c (cons_up_dtor_for_type): Added parameter NAME, for
	same reason.
	* cplus-class.c (finish_struct): Caller changed.

	* cplus-decl.c (duplicate_decls): If OLDDECL's type must change,
	remove OLDDECL from STATIC_AGGREGATES if it was there.
	* cplus-decl2.c (finish_file): Handle VARS being ERROR_MARK_NODE.

	* cplus-class.c (build_method_call): When calling `build_new',
	pass BASETYPE, not NAME, as the thing to be new'd.

	* cplus-parse.y (raise_identifiers): Permit qualified names, i.e.,
	`raises List::NotFound'.
	* cplus-decl.c (grokdeclarator): Handle nested exception scopes.
	* cplus-except.c (finish_exception_decl): Ditto.
	* cplus-class.c (build_method_call): Ditto.

	* cplus-except.c (init_exception_processing): Build in `setjmp'
	and `longjmp'.

	* cplus-except.c (expand_cplus_{start,end}_exception): If the
	exception object has elements which need cleanpus, call those
	cleanups after handling the exception.

	* cplus-except.c (finish_exception_decl): Set TYPE_HAS_CONSTRUCTOR
	bit, since call to `grokdeclarator' is subverted.

	* cplus-except.c (init_exception_processing): Size of `handler'
	field in built-in `ExceptionHandler' type was too big by one.

	* cplus-init.c (build_delete): Don't call non-virtual destructor
	with first argument of zero.

	* cplus-parse.y (except_stmts): Handle default exception as last
	exception (so that fall-through does the right thing).  Also, give
	error message if multiple `default' clauses appear within an
	`except_stmt'.

	* cplus-decl.c (finish_decl): If a variable needs a cleanup, pass
	the cleanup to `expand_decl', whether or not that variable has RTL
	or not.
	* cplus-except.c (expand_start_try): Call `finish_decl' instead of
	`expand_aggr_init' to initialize the exception handler for the
	try.  Otherwise, the exception handler's destructor will not be
	called at the end of the try.

	* cplus-decl.c (store_parm_decls): Don't call `__main' from `main'
	until after the parameters have been dealt with.

Tue Sep 26 09:41:29 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-parse.y (stmt): Deal with case of TRY statement without
	corresponding EXCEPT clause.

	* cplus-decl.c (duplicate_decls): Don't call `compexcepttypes'
	until after calling `commontype', lest default parameters cause
	identical exception lists to look different.

	* cplus-except.c (end_exception_decl): New function clears
	exception declaration state.
	* cplus-parse.y (datadef): Call end_exception_decl when we are at
	the end of a declaration which could be an exception declaration.

	* cplus-class.c (modify_vtable_entry): Reenable stubbed out code
	which is used when baseclass is virtual.
	* cplus-class.c (finish_struct): When base class is virtual, check
	CLASSTYPE_VBASECLASSES using `value_member' instead of
	CLASSTYPE_ASSOC using `assoc_value'.

	* dbxout.c (dbxout_tags): Ensure that fully output types have
	their typedefs output as well.  Needed to support -fminimal-debug.

Sun Sep 24 11:22:41 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-method.c (report_type_mismatch): Don't tweak I if the
	function was FUNCTION_TYPE.  Let TTF and TTA be advanced according
	to CP->U.BAD_ARG only.

	* expr.c (expand_expr): PROTECT argument missing in call to
	`expand_delete'.
	* cplus-init.c (build_delete): Call `convert_force' instead of
	`convert' if PROTECT is 0.

	* cplus-typeck2.c (digest_init): When initializing a RECORD_TYPE
	object, call `convert_for_initialization' as a last resort.

	* cplus-tree.c (build_exception_variant): Used TREE_CHAIN for look
	when should have used TYPE_NEXT_VARIANT.

	* cplus-decl.c ({start,finish}_decl): Handle decls which are
	CLASSTYPE_DECLARED_EXCEPTION.  For `start_decl', nothing needs to
	be done.  For `finish_decl', call `finish_exception_decl'.

	* cplus-except.c (finish_exception): When user defines an
	exception, make the compiler generate that exception's constructor
	automatically.

	* cplus-typeck.c (build_binary_op_nodefault): Associate
	(((a && b) && c) && d) to ((a && b) && (c && d)) to get better
	merging of component references when possible.
	* cplus-typeck2.c (merge_component_comparisons): Permit
	non-contiguous bitfield tests if bitfields are comparisons against
	integers.

	* cplus-tree.c (layout_basetypes): Give each basetype the
	alignment it wants.

	* cplus-lex.c (yylex): Recognize >?= and <?= operators (like +=
	for min and max operators).

	* cplus-decl.c (grokdeclarator): Set TREE_PUBLIC bit of
	FUNCTION_DECLs in FIELD_CONTEXT if they are !INLINEP.

	* cplus-decl.c (finish_function): Don't pay attention to
	`current_function_returns_null' when compiling constructors.

Sat Sep 23 00:03:52 1989  Michael Tiemann  (tiemann at arkesden)

	* stmt.c (assign_parms): Take care of case where parm arrives on
	the stack, but `__builtin_saveregs' might be called.  In that
	case, get bits from stack into registers, so that
	`__builtin_saveregs' will not overwrite with garbage.
	* expr.c (expand_builtin): Modify expansion of BUILT_IN_SAVEREGS
	to protect stack args that need protecting.

	* cplus-decl.c (grokdeclarator): Never build a METHOD_TYPE if
	CTYPE is NULL_TREE.  Was doing that when declaration of illegal
	construct ``virtual friend'' was parsed.

	* cplus-parse.y (do_array:): Don't try to call `build_array_ref'
	if $3 is ERROR_MARK_NODE (cuts down on spurious error messages).

	* cplus-decl.c (grokfndecl): Move setting of DECL_VIRTUAL_P bit to
	after we know whether the function is virtual.  Remove setting
	CLASSTYPE_VSIZE.  This will be set more accurately by
	`finish_struct'.

Fri Sep 22 15:36:32 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-cvt.c (convert_to_pointer): PATH was reversed for
	computing nested virtual base accesses.

	* cplus-except.c (finish_exception): Call POPCLASS at end.

	* cplus-class.c (build_field_call): New function containing code
	broken out of `build_method_call'.  Extended to grok calls through
	fields of exception objects which overload `operator()()', or are
	otherwise callable.
	* cplus-class.c (build_method_call): Now about 100 lines shorter.

	* cplus-decl.c (grokdeclarator): Take new argument RAISES
	specifying the exceptions that a function will raise.
	* cplus-decl.c (grokfield): Implement RAISES semantics by passing
	them to `grokdeclarator'.

	* cplus-decl.c (grok{fn,var}decl): Two new functions containing
	code broken out of `grokdeclarator'.
	* cplus-decl.c (grokdeclarator): Now about 250 lines shorter.

Thu Sep 21 16:51:11 1989  Michael Tiemann  (tiemann at arkesden)

	* cplus-search.c (get_vbase_types): Sort was totally broken.
	Completely rewritten.

Wed Sep 20 00:47:36 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl2.c (finish_file): Change !defined(SDB_DEBUGGING_INFO)
	to defined(DBX_DEBUGGING_INFO).

	* cplus-class.c (finish_struct): Argument to `alloca' was off by
	9.

	* cplus-init.c (build_new): If type requires alignment >
	BITS_PER_WORD (which is what ``__builtin_new'' is supposed to
	give), then get more space and round manually.

Tue Sep 19 03:08:58 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl.c (finish_decl): Don't call `comptypes' if INIT is
	error_mark_node.

	* cplus-cvt.c (convert_to_reference): Set TREE_VOLATILE bit for
	assignment from one reference to another (for
	build_compound_expr).

	* cplus-decl2.c (finish_file): If we are compiling on Suns, bind
	local label ``_fini'' to static file cleanup function and
	``_init'' to static file initialization function. STUBBED OUT FOR
	NOW.

	* cplus-parse.y: Put `type_quals' in 3rd operand position of a
	CALL_EXPR.  Interface to `start_function', `start_method'
	and `grokfield' changed.
	* cplus-decl.c (grokdeclarator): Get QUALS from
	TREE_OPERAND (CALL_EXPR, 2). [n.b.: First operand is
	TREE_OPERAND (CALL_EXPR, 0)].

	* cplus-tree.h (TYPE_RAISES_EXCEPTIONS): For FUNCTION_TYPE and
	METHOD_TYPE, a list of the exceptions that may be raised.
	* cplus-decl.c (duplicate_decls): Remove assumption that
	TYPE_LANG_SPECIFIC implies that type IS_AGGR_TYPE.

Mon Sep 18 14:08:02 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-class.c (add_virtual_function): If WRITE_VIRTUALS == 2,
	only set the TREE_ADDRESSABLE bit on a virtual function if the
	virtual function table is actually being output in this file.
	* cplus-decl.c (grokdeclarator): If WRITE_VIRTUALS == 2, make
	inline virtual functions TREE_PUBLIC if we are writing out this
	virtual function's virtual function table.
	* cplus-lex.c (reinit_parse_for_method): Don't clobber the above
	setting of TREE_PUBLIC for virtual functions.

	* cplus-lex.c: Process inline functions in declaration order.

Sun Sep 17 01:46:14 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-declc. (grokdeclarator,start_method,start_function): Merge
	``extern inline'' change.

	* cplus-typeck2.c (merge_component_comparisons): New function.
	Optimizes operations on contiguous component references provided
	that operations and alignments permit.
	* cplus-typeck2.c (make_merged_ref): Subroutine of above function
	to actually get the combined references.

	* cplus-typeck2.c: New file.  Contains error-reporting
	functionality from cplus-typeck.c, and other functionality which
	could be easily moved out.

	* cplus-typeck.c (unary_complex_lvalue): Must test against
	{FUNCTION,METHOD,OFFSET}_TYPE before testing whether ARG is a
	MEMBER_REF.  If the former holds, then we have an expression like
	X::Y.  In the latter case, we have an expression like (X->*Y).

Sat Sep 16 11:31:21 1989  Michael Tiemann  (tiemann at teacake)

	* toplev.c (main): Recognize `+' options again.

	* cplus-decl.c (lang_decode_option): Implement `+e2' option, which
	writes out only virtual function tables specified in #pragma
	vtable.
	* cplus-decl2.c (finish_file): Implement semantics of `+e2'
	option.
	* cplus-lex.c (yylex): Recognize `#pragma vtable'.

	* cplus-decl2.c (finish_file): Charge time used against
	VARCONST_TIME, not PARSE_TIME.

Thu Sep 14 18:04:10 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-init.c (build_new): If FLAG_THIS_IS_VARIABLE is non-zero,
	then generate call to constructor with zero as first argument.
	Otherwise, use `expand_aggr_init' to initialize the storage
	returned from whatever storage allocator was called.
	Initialization of virtual baseclasses simplified.  Memory
	management made more complex (though more general) because we may
	have `new' expressions not being evaluated until `finish_file' is
	called.
	* cplus-decl2.c (finish_file): Handle a `new' expreesion at top
	level.

	* cplus-decl.c (finish_function): Change call from `build_x_new'
	to `build_new'.
	* cplus-init.c (build_x_new): Deleted.

	* cplus-init.c (build_new): Give error if arguments are given to a
	`new' expression for which no constructor is defined.

	* cplus-decl.c (decode_lang_option): Use option table from
	toplev.c to decode -f options.

	* cplus-method.c (flush_repeats,build_overload_name): Change
	naming convention to avoid ambiguous names if type index or number
	of repeats is more than nine.

	* cplus-except.c (init_exception_processing): Use <setjmp.h> to
	find length of setjmp buffer.

Wed Sep 13 05:32:50 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl.c (start_method): Set TREE_INLINE bit if
	FLAG_DEFAULT_INLINE is nonzero.
	* cplus-decl.c (lang_decode_option): Recognize -fdefault-inline.

	* cplus-init.c (do_friend): Call `pushdecl_top_level' instead of
	`pushdecl'.

	* cplus-decl.c (start_method): Only need to copy node if it is not
	a friend.
	* cplus-decl.c (finish_method): In that case, return
	VOID_TYPE_NODE if the method was really a friend, but save it to
	CLASSTYPE_INLINE_FRIENDS so it can be processed properly later.
	It would be nice to have an obstack for this list so it could be
	freed at the end of this class's processing.

Tue Sep 12 05:22:03 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl.c (start_function): Make C++ FUNCTION_DECL inherit
	DECL_ASSEMBLER_NAME from old C FUNCTION_DECL if their types are
	identical.  This makes C<->C++ calls *much* easier to deal with.

	* cplus-decl.c (xref_tag): Don't set CLASSTYPE_DECLARED_CLASS bit
	if REF is CURRENT_CLASS_TYPE (??? or on the CURRENT_CLASS_STACK).

	* cplus-search.c (lookup_field_1): Give the user the virtual
	function table field if the name is `_vptr'.
	* cplus-decl2.c (grokfield): Don't let user declare anything with
	that name.

	* cplus-cvt.c (build_type_conversion): If we are trying to convert
	to type `void*' and no conversion to ptr_type_node exists, but a
	some other pointer conversion for TYPE exists, then convert to
	that pointer type, unless there is more than one such conversion,
	in which case return ERROR_MARK_NODE.  The caller will emit an
	error message in that case.  All callers changed.
	* cplus-cvt.c (convert_to_{integer,real,pointer}): Removed `saving
	throw' case which would try converting aggregate to a default type
	if requested conversion did not succeed.  `build_type_conversion'
	knows how to perform such `saving throws'.
	* cplus-tree.h (lang_type): New field `ptr_type_conversion'.
	* cplus-decl.c (grokdeclarator): Record whether a type has a
	type conversion operator here.
	* cplus-class.c (finish_struct): Set up `ptr_type_conversion'.
	Also, don't need to trudge through all methods to find out there
	are no type conversion methods.

Mon Sep 11 10:45:01 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-class.c (finish_struct): If we must cons up a destructor
	for a type, and METHOD_VEC was 0, set TREE_VEC_LENGTH (METHOD_VEC)
	to 1 after allocating METHOD_VEC.

	* cplus-class.c (finish_struct): Finish processing METHOD_VEC
	before making other calls out which may call `hash_tree_chain'.

	* cplus-class.c (finish_struct): Add BASE_LAYOUT_DECL to eliminate
	need for callback in stor-layout.c.

	* cplus-typeck.c (build_binary_op): Special case situation where
	we compare ARG1 with INTEGER_ZERO_NODE and ARG1 is of aggregate
	type.  This is what comes from `truthvalue_conversion'.

	* cplus-cvt.c (build_type_conversion): New argument CODE says for
	what purpose the conversion is taking place.  Important ones are
	truthvalue operations, which permit us to convert to different
	types then the ones we asked for.  All callers changed.
	* cplus-cvt.c (build_default_{binary,unary}_type_conversion): Same
	change.  All callers changed.

	* cplus-class.c (finish_{base_}struct): Set
	TYPE_NEEDS_CONSTRUCTING bits when basetype or member type needs
	constructing.

	* cplus-search.c (compute_visibility): Use TYPE_MAIN_VARIANT to
	see if field is public member of private baseclass.

	* cplus-init.c (expand_aggr_init_1): When bad arguments were
	passed to constructors for base initialization, only half the
	error message would appear.

	* Makefile: Remove dependencies on unexec.c and unex-addr.c.

	* cplus-decl.c (push_overloaded_decl): Can't use `value_member' to
	find previously declared function.  Use DECL_NAME of function
	instead, since that must be unique (as a type signature/name
	combination).

	* cplus-lex.c (yylex): typo in assert macro.
	* cplus-cvt.c (convert_to_nonzero_pointer): Ditto

	* All GNU C++ files: implement initialized constant fields.  Make
	them non-static, non-addressable VAR_DECLs.

Sun Sep 10 09:19:22 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-method.c (build_opfncall): Remove METHOD_REF case.
	* tree.def: Remove definition of METHOD_REF.

	* cplus-decl.c (finish_decl): If a static member needs
	constructing, but it does not have an initializer, make it
	TREE_EXTERNAL.
	* cplus-decl2.c (grokfield): Set DECL_IN_AGGR_P before calling
	`finish_decl' for VAR_DECLs.

	* cplus-parse.y (forhead.2): New rule to keep GNU C++ gives better
	error handling when multiple variables are declared in the first
	part of a `for' stmt.

	* cplus-lex.c (finish_method): Handle case when `start_method'
	returns VOID_TYPE_NODE (two definitions of the same method in the
	same class.

	* cplus-decl.c (grok_op_properties): Make static operators (other
	than new and delete) trigger error messages.  If operator new or
	delete has no arguments (due to syntax errors), rebuild their
	types.  They have the right names, because `build_operator_fnname'
	knows how to do that.

	* stor-layout.c (make_{un}signed_type): Cache size nodes for
	pointers, functions, and methods.
	* stor-layout.c (layout_type): Use cached types.

	* cplus-decl{2}.c: Use `hash_tree_chain' instead of `tree_cons'
	where possible.

	* cplus-decl.c (expand_static_init): If variable has already been
	initialized, give complaint, but don't store the initializer.
	That way we don't have to preserve it on the temporary obstack.

	* cplus-parse.y (identifier_or_opname): Accept new C++ destructor
	syntax, which is effectively "scoped_identifier '~' identifier".
	* cplus-class.c (build_scoped_method_call): Accept calls using new
	C++ destructor syntax here.
	* cplus-class.c (build_method_call): Reject calls through here
	which don't use a leading `scoped_identifier'.

	* cplus-init.c (build_new): Don't permit arrays of `void'.  Better
	error message emitted for newing `void'.

	* cplus-typeck.c (build_conditional_expr): Don't call
	`default_conversion' on the arms of the conditional if both are of
	the same enumeral type.  Otherwise, if EXTRA_WARNINGS, give
	warning if enumeral type appears in either (or both) arm(s) of the
	conditional.

	* cplus-cvt.c (build_type_conversion): Don't convert from `int' to
	`void*'.  Don't convert a `void*' to an `int'.

	* cplus-decl.c (xref_tag): If we get an old reference to a C
	struct name, and we are in C++ langauge context, give it a
	TYPE_DECL.

	* cplus-class.c (build_method_call): Don't call
	`default_conversion' on MEMBER_REFs because they might be enums.
	Instead, call `resolve_member_ref', and then if the type is
	something we would rather convert before calling
	compute_conversion_costs, convert that.

	* cplus-init.c: Set TREE_VOLATILE bit after all
	``build (CALL_EXPR, ...)'' calls.

	* cplus-init.c (expand_vec_init): If at global binding level,
	return a TREE_VEC which contains the initialization parameters for
	the vector.  `expand_vec_init' is no longer static.
	* cplus-decl.c (finish_decl): Handle INIT being result of
	`expand_vec_init' at top-level.
	* cplus-decl2.c (finish_file): Ditto.

Sat Sep  9 12:44:48 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-class.c (finish_struct): Move error message about static
	members in unions from stor-layout.c to here.

	* varasm.c, stor-layout.c: Merged with GCC.
	* cplus-class.c (finish_struct): Use special FIELD_DECL in
	TYPE_FIELDS of T before calling `layout_type' to have effect of
	passing basetype layout information to `layout_record'.

	* cplus-typeck.c (build_c_cast): Typo in call to
	cleanup_after_call.

Fri Sep  8 11:16:01 1989  Michael Tiemann  (tiemann at teacake)

	* All GNU C++ files: replaced calls to `abort' with assertion
	macros where appropriate.  Also removed some unneccessary tests
	against ERROR_MARK_NODE in various function calls.

	* cplus-lex.c (check_newline): Changed to take NEXTCHAR into
	account.

Thu Sep  7 06:15:56 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl.c (store_parm_decls): Change where
	DECL_REFERENCE_SLOT is initialized.  Eliminate a second loop
	through the parms.

	* cplus-method.c (hack_identifier): Don't need to test against
	FUNCTION_DECL before testing if the TREE_TYPE is REFERENCE_TYPE.

	* cplus-lex.c (yylex): If reading `0' or `1', return
	INTEGER_ZERO_NODE or INTEGER_ONE_NODE respectively.
	* cplus-decl.c (build_enumerator): If we got one of these two
	as a value, make a copy.

	* tree.c,cplus-lex.c,cplus-class.c,cplus-search.c
	[GATHER_STATISTICS]: Now only gather statistics if this macro is
	defined.

	* tree.c (make_node,build_int_2,tree_cons,build_tree_list): Merge
	Bryan Boreham's ``deluxe'' memory profiling code.

	* cplus-decl.c (finish_decl): Only complain about uninitialized
	refs and consts if there is no constructor for the type.  If there
	is a constructor, then that constructor should say whether it did
	not initializer certain fields or not.

	* cplus-init.c (expand_aggr_init): When initializing, nothing is
	`const'.

	* cplus-decl.c (store_parm_decls): No need to call
	expand_decl_init on a PARM_DECL.  In fact, now it is wrong.

	* tree.h: rearranged tree_decl layout and defined
	tree_function_decl type for FUNCTION_DECLs.  Now space
	requirements for FUNCTION_DECLs do not impose on other kinds of
	_DECL nodes.  Also, PARM_DECL nodes use less than a full decl
	node's worth of space.
	* toplev.c (rest_of_decl_compilation): Don't permit ASMSPEC to
	appliy to PARM_DECL nodes.
	* varasm.c (make_decl_rtl): Abort if called for a PARM_DECL node.
	* print-tree.c (dump): PARM_DECL nodes are not full.
	FUNCTION_DECL nodes have more fields then regular _DECLs now.
	* tree.c (make_node): Use TREE_CODE_LENGTH when allocating _DECL
	nodes.  Also, don't set DECL_SOURCE_* for PARM_DECL nodes.
	Instead, set their DECL_CONTEXT to CURRENT_FUNCTION_DECL.
	* tree.c (build_decl): Don't set DECL_ASSEMBLER_NAME for PARM_DECL
	nodes.
	* cplus-decl.c (start_decl): Don't not push DECL if DECL is a
	PARM_DECL.

	* cplus-lex.c (yylex): Remove tests about whether we *really* saw
	a keyword or not.  Instead, use `init_lex' to do most of the work
	for us (since lang_c's reserved word set is a subset of
	lang_cplusplus).

	* cplus-decl.c,cplus-decl2.c,cplus-typeck.c,cplus-class.c,
	cplus-lex.c, cplus-method.c: change tests of the form
	(TREE_VALUE (t) == void_type_node) to (t == void_list_node).

	* cplus-decl2.c (grokopexpr): Added argument CTYPE to help
	distinguish whether operators NEW and DELETE belong to a class, or
	are the global operators NEW and DELETE.
	* cplus-decl.c (grokdeclarator): Caller changed.
	* cplus-method.c (hack_operator): Caller changed.

Wed Sep  6 10:29:45 1989  Michael Tiemann  (tiemann at teacake)

	* dbxout.c (dbxout_type): Handle static member functions.

	* cplus-typeck.c (c_expand_return): Change test from
	TYPE_NEEDS_CONSTRUCTING to TYPE_NEEDS_CONSTRUCTOR to see whether
	`expand_aggr_init' must be called.

	* cplus-decl2.c (grokfield): Use `digest_init' to digest
	CONSTRUCTOR initializers of fields.

	* cplus-decl.c (grokdeclarator): Permit ARRAY_TYPE field decls to
	get their types from their initializer (if they were incomplete).

	* cplus-lex.c (build_operator_fnname): If there is more than one
	parameter to NEW_EXPR, then it is `__user_new'.

	* cplus-decl.c (store_parm_decls): Remove code to deal with case
	that function was declared without prototypes.  It is never
	executed.

	* cplus-typeck.c (unary_complex_lvalue): Handle (x->*y) as an
	lvalue.

	* cplus-decl.c (start_decl): Put in check that temporary obstack
	starts out empty when we start parsing an initializer.
	* cplus-decl.c (expand_static_init): If the initializer was read
	into the temporary obstack, preserve all space that it used.  I
	don't think it is safe to always read the initializer into the
	permanent_obstack and then free the space if it doesn't look
	interesting, because types may be created dynamically as a result
	of reading it in (such as array types), and we don't want them to
	get freed.

	* cplus-decl.c (finish_decl): Don't set DECL_ASSEMBLER_NAME of the
	decl to ASMSPEC if ASMSPEC is 0.

	* cplus-decl.c (finish_function): Set named_label_uses to
	NULL_TREE at end of function.

Tue Sep  5 05:24:18 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-except.c: New file.  Implements exception handling scheme
	designed by Michael Powell.

	* cplus-method.c (build_overload_name): Overload constructor names
	as '__' instead of whatever their original name was.
	* cplus-method.c (build_decl_overload): Distinguish constructors
	from other kinds of member functions.
	* cplus-decl2.c (grokclassfn): Call changed to
	`build_decl_overload' to take this into account.

	* cplus-decl.c (duplicate_decls): Don't crash if NEWDECL is a
	VAR_DECL, and there is an old VAR_DECL on the chain.  Happens for
	strange parse errors.

Mon Sep  4 01:36:07 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-decl2.c: New file.  Contains functions which used to be
	defined in cplus-decl.c, but could be easily broken out. Also
	moved some functions out of cplus-tree.c which did not really
	belong there, but were put there to make compilation less painful.

	* cplus-class.c (build_method_call): Use ERR_NAME in more places
	when printing error messages.

	* cplus-decl.c (grokdeclarator): Special case NEW_EXPR and
	DELETE_EXPR when grokking an OP_IDENTIFIER.  Make these guys
	static member functions.  Callers in cplus-init.c changed.
	* cplus-tree.c (coerce_new_type,coerce_delete_type): Force the
	type of `operator new' and `operator delete' to wind up with the
	right types.
	* cplus-lex.c (build_operator_fnname): Handle `operator new' and
	`operator delete' correctly, warning when the wrong number of
	parameters show up.

	* expr.c (expand_expr): Add NEW_EXPR to the list of tree codes
	for which INIT_EXPR and MODIFY_EXPR don't need to deal with
	noncopied_parts.

	* cplus-class.c (finish_struct): Initialize TREE_PURPOSE of
	TYPE_NONCOPIED_PARTS to the virtual function table for the type.

	* cplus-cvt.c (build_type_conversion_1): Compiler was getting into
	infinite recursion when asked to convert something from its own
	type to its own type.

	* cplus-parse.y: Added RERAISE statement.
	* cplus-lex.c: Added __reraise keyword.

	* cplus-cvt.c (build_type_conversion): Build type conversions to
	type variants (i.e., given `operator char * ()', convert to a
	`const char *').

	* dbxout.c (dbxout_tags): Callback to language-specific files to
	see whether a type should actually be output.
	* dbxout.c (dbxout_symbol): Same change.
	* cplus-tree.c (lang_output_debug_info): New function.
	* cplus-decl.c (finish_function): Memoize information for
	lang_output_debug_info.

	* Merged latest changes from Bryan Boreham for incremental
	compilation via dumping.

	* cplus-parse.y: Recognize `::new' and `::delete'.
	* cplus-init.c (build_new): Handle `::new' by new interpretation
	of USER_PARMS.  Only callers in cplus-parse.y needed changing.
	* cplus-init.c (build_{x_}delete): Handle `::delete' by accepting
	new argument USE_GLOBAL_DELETE.  All callers changed.

Sun Sep  3 12:42:38 1989  Michael Tiemann  (tiemann at teacake)

	* expr.c (expand_cleanups_to): New function.
	* cplus-init.c (expand_cplus_expr_stmt): Call it after all is said
	and done.

	* expr.c (expand_expr): When encountering a NEW_EXPR, it is
	possible that the NEW_EXPR did not know (when it was built) what
	its cleanup needed to be.  If its cleanup is 0, try building one
	if a new temporary was built for it.

	* cplus-decl.c (duplicate_decls): Warn if function type qualifiers
	don't match only if PEDANTIC (following change made by rms).

	* cplus-typeck.c (build_function_call): If pedantic, don't permit
	`main' to be called.

	* cplus-typeck.c (convert_for_assignment): Don't let ints
	convert to enums.

	* cplus-decl.c (start_function): Ensure that `main' is
	always declared to return an integer type.
	* cplus-decl.c (finish_function): Make it so that `main' always
	returns 0 by default.

	* cplus-decl.c (grokdeclarator): Make it now an error to specify
	return types for constructors and destructors.

	* cplus-typeck.c (comp_target_{parms,types}): Loosen up to permit
	contravariance violations, though not without warning.

	* cplus-method.c (build_overload_name): Change from old
	overloading scheme to one more or less compatible with type-safe
	linkage scheme proposed in Stroustrup's 1988 USENIX paper.

Sat Sep  2 09:16:01 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-typeck.c (convert_for_initialization): Permit
	initialization of reference from incomplete type: that type will
	be converted to REFERENCE_TYPE, and that is just as good as a
	pointer to incomplete type.

	* cplus-decl.c (finish_decl): Handle case of static reference
	initialized from non-constant initializer.  Break out code to
	initialize static variables as function `expand_static_init'.

	* cplus-decl.c (finish_decl): Don't call constructors on external
	variables.

	* integrate.c (copy_for_inline): Canonicalize PLUS expressions so
	that CONST_INTs appear on the right, and `FRAME_POINTER_RTX'
	and/or `ARG_POINTER_RTX' on the left.
	* integrate.c (copy_rtx_and_substitute): Take advantage of this
	fact and test fewer things while integrating.

	* cplus-typeck.c (c_expand_return): Try to get away with not
	issuing a call to `use_variable' for the DECL_RESULT of the
	function.  If that fails, calling it only if
	`any_pending_cleanups' returns nonzero.

	* cplus-init.c (expand_recursive_init_1): Handle multi-demensional
	arrays which need constructing.
	* cplus-init.c (expand_vec_init): Handle multi-demensional arrays.
	Say sorry if we try to use an explicit initializer in that case,
	however.

	* cplus-parse.y: Permit the integer zero to be deleted (though who
	would want to?).

	* varasm.c (make_function_rtl): Replace call to lang_rtl_name with
	use of DECL_ASSEMBLER_NAME.
	* cplus-decl.c (lang_rtl_name): Removed.

	* cplus-decl.c (grokclassfn): Set DECL_ASSEMBLER_NAME after
	changing DECL_NAME.
	* cplus-init.c (do_friend): Ditto.

	* cplus-decl.c (start_function): If CURRENT_FUNCTION_DECL is a
	destructor, set up DESTRUCTOR_LABEL.
	* cplus-decl.c (finish_function): If DESTRUCTOR_LABEL is nonzero,
	expand just before calling base destructors.
	* cplus-typeck.c (c_expand_return): If DESTRUCTOR_LABEL is
	nonzero, jump there instead of just expanding the return.

	* collect.c (process): Change from
	(andrew%frip.wv.tek.com@relay.cs.net) to skip auxiliary entries.

	* All GNU C++ files merged from 1.35.97+ to 1.35.98.

	* cplus-decl.c (define_label): If a newly declared variable in the
	label's binding contour will need a cleanup, it must live in a new
	binding contour.
	* cplus-decl.c (define_case_label): New function.  Same goes for
	case labels.
	* cplus-parse.y (stmt): Call `define_case_label' for CASE
	statements.

	* cplus-decl.c (lookup_label): Record in variable NAMED_LABEL_USES
	for each label the variables currently in scope at the use of the
	label.
	* cplus-decl.c (define_label): Give error message if jump to label
	crosses variable initialization in the current scope.

	* cplus-decl.c (struct binding_level): Change field
	`more_cleanups_ok' from char to bitfield.  Added field
	`have_cleanups'.  Change other fields to bitfields so that
	`struct binding_level' fits in 7 words, which can be
	malloc'd in total of 32 bytes.
	* cplus-decl.c (PUSH_BINDING_LEVEL,maybe_build_cleanup):
	Initialize and set field `have_cleanups'.
	* cplus-decl.c (expand_label): Set `more_cleanups_ok' to zero when
	we cross a label.

	* stmt.c (struct stack_block): Added field `initialized_decls_p'
	for blocks which need their decls expanded before used.
	* stmt.c (expand_decl{_init}): Set field initialized_decls_p when
	appropriate.

Fri Sep  1 04:29:44 1989  Michael Tiemann  (tiemann at teacake)

	* Exception handling constructs recognized (but nothing working).

	* cplus-decl.c (init_decl_processing): Call `set_identifier_size'
	with a length, not a number of bytes.

	* cplus-class.c (build_class_init_list): Braino.

	* cplus-init.c (expand_aggr_init_1): Reinitialize virtual base
	class virtual function tables if they are set to wrong values by
	their constructors.
	* cplus-init.c (expand_aggr_init): Initialize virtual base class
	virtual function tables if they are not set any other way.

	* cplus-class.c (finish_struct): Use CLASSTYPE_VSIZE instead of
	TYPE_VIRTUAL_P to determine whether a particular class has virtual
	functions which belong in its vtable.  A type can be
	TYPE_VIRTUAL_P, meaning that *somewhere* it relies on virtual
	functions, but CLASSTYPE_VSIZE could be zero, meaning that it
	itself may not even have a virtual function table pointer.
	* cplus-decl.c (finish_file): Same changes.
	* cplus-decl.c (setup_vtbl_ptr): Same changes.
	* dbxout.c (dbxout_type): Same changes.
	* cplus-tree.c (layout_basetypes): Same changes.

	* cplus-class.c (finish_base_struct): Return 0 if all virtual
	functions come only from virtual baseclasses.  Also, do not put
	into VFIELDS those fields which come from virtual baseclasses.
	* cplus-class.c (modify_vtable_entry): Instead, run through by
	hand the virtual baseclasses whose virtual function tables need to
	be modified.  This means really using exactly the right
	associations for both base, context, and derived types.
	* cplus-class.c (prepare_fresh_vtable): Change parameter TYPE to
	CONTEXT_ASSSOC.  All callers changed.

Thu Aug 31 08:17:45 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-class.c (finish_struct): Test MAX_HAS_VIRTUAL, not
	HAS_VIRTUAL to assign TYPE_VIRTUAL_P (T).

	* integrate.c (save_for_inline): Add new variable
	PARM_INITIALIZATION which is nonzero during parameter
	initialization (either from the stack or registers).
	* integrate.c (copy_for_inline): Only zero TREE_READONLY of parm
	if PARM_INITIALIZATION is zero.
	* integrate.c (expand_inline_function): Back out Aug 30
	TREE_INLINE change for PARM_DECLs.
	* cplus-decl.c, cplus-typeck.c: Ditto.

	* cplus-decl.c (finish_decl): Take into account case where static
	variable must be initialized ``by hand''.

	* cplus-typeck.c (store_init_value): Return VALUE if
	initialization could not be trivially performed for static
	variable.  Otherwise return NULL_TREE.

	* cplus-decl.c (get_temp_name): Add parameter STATICP.  All
	callers changed.

	* integrate.c (copy_rtx_and_substitute): Significantly simplify
	PLUS and MEM case after finding out that code from tList.cc could
	break the complex cases on Sparc.  Net effect: maybe more work for
	optimizer in later passes, and maybe more space occupied by inline
	insns during compilation.

	* expr.c (store_one_arg): Add test to see if we can avoid calling
	convert_units if possible.

Wed Aug 30 04:01:15 1989  Michael Tiemann  (tiemann at teacake)

	* toplev.c (main): Change +e[01] to -f+e[01], and move to
	lang_decode_option.
	* cplus-decl.c (lang_decode_option): Incorporate new flags.

	* integrate.c (copy_rtx_and_substitute): Don't build a SUBREG of a
	CONST_INT.

	* integrate.c (expand_inline_function): Change test of FORMAL from
	TREE_READONLY to TREE_INLINE.
	* cplus-typeck.c (build_modify_expr,build_unary_op): When
	modifying a PARM_DECL, set TREE_INLINE to 0.
	* cplus-decl.c (store_parm_decls): Set TREE_INLINE of PARM_DECL to
	1.

	* cplus-decl.c (finish_function): When finishing constructors, if
	simple case holds (no cleanups), just store CURRENT_CLASS_DECL
	into the DECL_RESULT of FNDECL and fall through.

	* integrate.c (expand_inline_function): Don't emit
	NOTE_INSN_DELETED notes.

	* cplus-parse.y (compstmt): Only save binding contour information
	if there actually were decls.

	* cplus-decl.c (finish_file): Argument LINENO was missing in calls
	to finish_function.

Tue Aug 29 23:03:17 1989  Michael Tiemann  (tiemann at teacake)

	* cplus-typeck.c (unary_complex_lvalue): Treat INIT_EXPR like
	MODIFY_EXPR.  Also, handle WITH_CLEANUP_EXPR case.

	* expr.c (expand_expr): Brainos in WITH_CLEANUP_EXPR case.

	* cplus-cvt.c (build_up_reference): Handle case where ARG is a
	WITH_CLEANUP_EXPR.

	* stmt.c (expand_function_end): *Don't* set REG_FUNCTION_VALUE_P.

	* tree.def [NEW_EXPR]: Change from 2 arguments to 3.  Third
	argument, if non-NULL, is cleanup expression to run after the
	new'd expression is used.  All users of NEW_EXPR changed.

Sun Aug 27 01:13:09 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)

	* stor-layout.c (layout_basetypes): Move from this file.
	* cplus-tree.c (layout_basetypes): To this one.

	* make-links.g++ (borrowed_files): typeclass.h is now a
	borrowed file.

	* cplus-decl.c (cleanup_after_call): New function.
	* cplus-typeck.c (build_compound_expr): Call it if neccesary.
	* cplus-typeck.c (build_c_cast): Ditto.
	* cplus-init.c (expand_cplus_expr_stmt): Ditto.
	* expr.c (expand_call): Remove code to allocate destructable stack
	slot if function return value is not used.

	* cplus-decl.c (init_decl_processing): `built_in_vec_delete' is
	NOT_BUILT_IN.
	* expr.c (expand_builtin): Don't try to expand EXPAND_VEC_DELETE.

	* cplus-init.c (build_vec_delete): Build the vector delete here;
	don't make a call to `__builtin_vec_delete'.

	* expr.c (expand_expr): Merge INIT_EXPR and MODIFY_EXPR.
	* expr.c (init_noncopied_parts): New function.

	* gcc.c: Merged completely.  Use GCC from standard distribution.

Sat Aug 26 10:38:14 1989  Michael Tiemann  (tiemann at hobbes.ai.mit.edu)

	* cplus-typeck.c (build_binary_op): Perform type instantiation if
	necessary.

	* cplus-class.c (instantiate_type,build_instantiated_decl): Change
	"type instantiation" to "overload" in various error messages.
	* cplus-class.c (instantiate_type): Also fix error message to
	report overload resolution failure only if function has more than
	one type signature declared.

	* cplus-class.c (instantiate_type): Call `mark_addressable' on
	result of instantiating something for an ADDR_EXPR.

	* 1.35.96 to 1.35.97+ changes:
	* Makefile: Change name of `cplus-parse.tab.*' to `cplus-tab.*'.
	* cplus-lex.c: Change #includes to reflect this.
	* cplus-decl.c: All merged except CURRENT_EXTERN_INLINE.
	* toplev.c: Changes for extern inlines not merged.

	* cplus-decl.c (finish_file): Reset FNNAME from DECL_NAME of the
	current function, since `start_function' may cause it to change if
	overloaded.  Also, push into C language context during the
	generation of file-level initializer/cleanup functions, since we
	don't want the extra-long names that overloading will give us.

	* cplus-decl.c,cplus-class.c,cplus-search.c: #include "obstack.h"
	instead of "cplus-obstack.h".

	* gnulib3.c: New file.  Provides initialization and cleanup
	services for GNU C++.  This should obviate the need for crt0.c.
	* crt1.c: Changed completely for new initialization/cleanup model.
	* cplus-decl.c (store_parm_decls): Put in special hooks to call
	`__main' from `main' for such purposes.

Thu Aug 24 02:11:42 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-lex.c (check_newline): Only call unexec #ifndef
	DONT_HAVE_UNEXEC.

	* cplus-lex.c (reinit_parse_for_method)[USG]: If the buffer given
	to setvbuf is shorter than eight bytes long, setvbuf will (in
	violation of its man page) ignore the buffer and call malloc to
	get a bigger one.  Fixed.

	* cplus-typeck.c (comp_target_types): Permit converting from a T**
	to a T** which has different qualifiers.

	* gcc.c (collect_spec): Changes for sun386.
	* collect.c: Ditto.
	* config.g++: Ditto.

	* cplus-parse.y (primary): Handle case where unfound
	identifier comes from base class during class declaration.

	* cplus-init.c (build_member_ref): Handle uses of class-local
	enums and static members before type is completed.

	* cplus-decl.c (pushdecl_class_level): Put enums and static
	members into class scope as soon as they are seen.
	* cplus-decl.c (poplevel_class): Make sure to take them out upon
	leaving scope.

	* cplus-lex.c (build_lang_field_decl): Take new argument CODE to
	say what kind of decl to build.
	* cplus-decl.c,cplus-parse.y: All callers changed.
	* cplus-decl.c (grok_enum_decls): Call `build_lang_field_decl'
	instead of `build_lang_decl'.  Saves memory.
	* cplus-decl.c (grokdeclarator): Same change for VAR_DECLs local
	to structs.
	
	* cplus-typeck.c (build_modify_expr): Fix logic so that when
	assigning to `this', the error message about not being within a
	constructor or destructor is only emitted at the appropriate time.

	* cplus-tree.h [OPERATOR_NEW_FORMAT,OPERATOR_DELETE_FORMAT]:
	Define these.
	* cplus-method.c (build_opfncall): Use them.

	* cplus-tree.h [OPERATOR_MODIFY_FORMAT,OPERATOR_MODIFY_LENGTH,
	OPERATOR_CALL_FORMAT,OPERATOR_CALL_LENGTH,OPERATOR_ARRAY_FORMAT,
	OPERATOR_ARRAY_LENGTH]
	Define these.
	* cplus-decl.c (grok_op_properties): Use them.
	* cplus-init.c (add_friends): Ditto.

	* cplus-tree.h [VTBL_PTR_TYPE]: Define this.
	* cplus-decl.c (init_decl_processing): Use it.

	* cplus-tree.h [OPERATOR_METHOD_FORMAT,OPERATOR_METHOD_LENGTH]:
	Define these.
	* cplus-class.c (build_method_call): Use them.

	* cplus-class.c (compute_conversion_costs): Fix typo which would
	cause error message to be generated for calling a const member
	function with a non-const object.

	* Aug 24 03:10 g++.xtar.Z on ~ftp/pub

	* cplus-init.c (build_new): Braino involving -fthis-is-variable
	removed.

Wed Aug 23 00:12:29 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (finish_decl): Cannot forever remove READONLY
	attribute from decl needing initialization.

	* cplus-method.c (report_type_mismatch): Report error if calling
	non-const member function with const object.

	* cplus-class.c (convert_harshness,build_method_call): Finish
	implementing code to catch calls to non-const member functions
	with const objects.

	* cplus-class.c (build_method_call): No longer need to get to
	TYPE_MAIN_VARIANT for type information, such as TYPE_NEEDS_....

	* cplus-class.c (finish_struct): Set flags in all type variants.
	* cplus-parse.y (various places): Ditto.

	* integrate.c (expand_inline_function): No longer call abort if
	TREE_TYPE (arg) != TREE_TYPE (formal) for BLKmode parameter.  This
	can happen when TREE_TYPE (formal) == ERROR_MARK_NODE.

Tue Aug 22 09:06:32 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (ideal_candidate): Use `function' member instead
	of `u.field' member of candidates.  The former is always properly
	set up, whereas the latter is set to 0 if the function used is a
	non-member function.

	* cplus-decl.c (groktypefield): Handle case where IDENTIFIER_NODE
	comes in which is not an aggregate type name.

	* cplus-method.c (hack_operator): Return ERROR_MARK_NODE if
	operator name is missing.
	* cplus-parse.y: Callers changed to deal with this.

	* cplus-search.c (various places): Most calls to
	`error_with_aggr_type' were wrong, leading to backward error
	messages (such as `member `A' not found for class `memfunc').
	Changed back to call `error' with appropriate parameters.

	* cplus-search.c (lookup_fnfields): Braino in printing error
	message: TREE_VALUE (entry) is a BASELINK (a TREE_LIST of
	TREE_LISTs), not a TREE_LIST.

	* cplus-decl.c (grokdeclarator): Handle missing operator name for
	for OP_IDENTIFIER case.

	* cplus-init.c (finish_base_init): If the vtable installed by the
	constructor was not the right one, fix after call to base
	constructor, before derived initialization.

	* cplus-decl.c (store_parm_decls): New parm PRESERVE is nonzero if
	we should preserve the data containing the function parameters.
	This is normally done for inline functions, but also needs to be
	done for constructors of classes which use virtual baseclasses.
	* cplus-decl.c (finish_function): Don't set DECL_ARGUMENTS (FNDECL)
	to zero if above condition holds.
	* cplus-decl.c, cplus-parse.y: all callers of store_parm_decls
	modified.

	* cplus-tree.c (hash_tree_chain): New function.  Simplified
	version of hash_tree_cons.
	* cplus-parse.y (declmods): Use `hash_tree_chain' to build up
	lists which are not destroyed during parsing.  They can be reused
	throughout the rest of the parse.

Mon Aug 21 09:51:47 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-init.c (expand_aggr_init_1): Replace PARM_DECL rtl's with
	actual values to parameters.

	* cplus-init.c (expand_aggr_vbase_init): Only try initializing
	base classes here if FNDECL is nonzero.
	* cplus-init.c (expand_aggr_init_1): Try initializing them here in
	that case instead.

	* cplus-decl.c (finish_decl): We can initialize a const& from a
	const int, etc.

	* cplus-init.c (expand_vec_delete): Only warn about ignored array
	size expressions if EXTRA_WARNINGS.

	* cplus-init.c (build_new): Don't forget to allocate space for
	vectors.

	* cplus-init.c (add_friend): If the friend is not of METHOD_TYPE,
	set CTYPE = ERROR_MARK_NODE.  This prevents false friend matches
	due to fact that `is_friend' assumes that if CURRENT_CLASS_TYPE ==
	TREE_PURPOSE (friends), that a class-match has occured.

	* stmt.c (expand_end_bindings): Don't let cleanups affect ({...})
	constructs.

	* cplus-decl.c (finish_decl): When initializing one reference from
	another, make sure that we wrap the initializer in a SAVE_EXPR if
	it is TREE_VOLATILE.

	* cplus-class.c (compute_conversion_costs): Check that FORMAL_TYPE
	is not ERROR_MARK_NODE.

	* tree.h (tree_type): Delete unused field `parse_info'.

	* cplus-decl.c (setup_vtbl_ptr): Add tests for OPTIMIZE and that
	CURRENT_FUNCTION_DECL is not DECL_STATIC_FUNCTION_P.

Sun Aug 20 12:09:30 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c,cplus-typeck.c (various places): Check for
	CONST_DECL in addition to TREE_READONLY VAR_DECLs when needing
	constants for various purposes.

Sat Aug 19 12:27:41 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (build_method_call): Handle case where
	INSTANCE_PTR is integer_zerop.  This can happen with casts like
	{ return ((Object*)0)->Object::IsA(); }

Fri Aug 18 01:14:02 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (build_method_call): Complain about using abstract
	function only if INSTANCE is of known abstract type.

	* cplus-class.c (add_method): Don't crash if FIELDS is 0.

	* dbxout.c (dbxout_type): Don't crash if type only defines
	constructors and destructors.

	* cplus-typeck.c (build_component_ref): If METHOD_VEC is 0, break
	out of loop.

	* cplus-decl.c (finish_file): Don't abort if INIT is 0.

Thu Aug 17 21:55:35 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-parse.y (LC): If the type we get left of a '{'
	!IS_AGGR_TYPE, then make a fake node which can hold our types for
	us.

	* cplus-init.c (do_friend): Argument missing in call to
	grokclassfn.

	* cplus-decl.c (poplevel): Only call `expand_end_bindings' if the
	level being popped needed an `expand_start_bindings' to get going.
	This only happens if the level is specifically to hold
	temporaries (i.e., when the KEEP field is < 0).

	* cplus-decl.c (finish_decl): Emit a sorry message if the _DECL
	needs constructing, and is not at toplevel.

	* cplus-class.c (build_method_call): Complain about incomplete
	types only if (FLAGS&LOOKUP_COMPLAIN).

Wed Aug 16 17:11:22 1989  Michael Tiemann  (tiemann at yahi)

	* toplev.c (compile_file), cplus-lex.c (yylex): Use setjmp/longjmp
	to communicate fact that dump was just performed.  This prevents
	duplicate bytes being written to the asm file, due to inline
	functions being written out by both original and dumped compilers.

	* toplev.c (compile_file): Hack to make dumped compiler move bytes
	quickly from old asm file to new.

	* cplus-search.c (build_mi_virtuals,free_mi_matrix): Pointer
	arithmetic for mi_vmatrix accesses were off by 1.

	* cplus-class.c (build_method_call): Handle case where INSTANCE
	has a POINTER_TYPE type.  This is when it is a dummy argument for
	`operator new ()'.

Tue Aug 15 00:05:49 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (grokclassfn): `const' member function information
	was being lost.

	* cplus-class.c (build_method_call): Generate error message when
	passing const objects to non-const member functions.

	* cplus-class.c (finish_struct): METHOD_VEC must track the object
	being grown on the class obstack.

	* cplus-method.c (dump_type{_prefix}): Print `class' instead of
	`struct' if declared as class.

	* cplus-method.c (build_{decl,typename}_overload,do_actual_overload,
	fndecl_as_string): Distinguish `const' member functions from
	normal member functions.

	* cplus-search.c (get_base_type): Distinguish whether we want to
	know if a public field of baseclass is protected, or whether a
	conversion from derived to base class is protected by passing
	either 1 or 2 to the argument PROTECT.
	* cplus-search.c (get_base_distance): If protect is non-zero,
	always emit an error message if conversion from derived to base
	class is across a private visibility boundary.

	* cplus-cvt.c (convert_to_reference): Don't violate visibility
	rules when converting to references.  Add parameter PROTECT to
	control this behavior.  All callers changed.
	* cplus-cvt.c (build_up_reference): Ditto.

Mon Aug 14 00:03:46 1989  Michael Tiemann  (tiemann at yahi)

	* stmt.c (expand_end_case): Incorporate rfg's bugfix for
	optimizing case statements with signed negative test term.

	* cplus-search.c (reinit_search_statistics): New function.
	* toplev.c (compile_file): Call that function if BEEN_HERE_BEFORE.

	* cplus-decl.c: Remove explicit initializations from static
	variables--let them sit in common rather than data space.
	* cplus-method.c: Ditto.

	* Makefile,toplev.v, cplus-decl.c, cplus-lex.c: Incorporated
	changes from Bryan Boreham <kewill!bryan@uunet.uu.net> to dump a
	running GNU C++ for later reexecing.
	* unexec.c,lastfile.c: borrowed from GNU Emacs
	* unex-addr.c,getpagesize.h: New files

	* Aug 14 13:07 g++.xtar.Z on ~ftp/pub

	* cplus-decl.c (finish_file): Handle case where initializer for
	one static aggregate is another.  Do so by disabling code which
	assumed the wrong thing in that case.

	* cplus-search.c, cplus-tree.c, cplus-class.c: Major surgery on
	assoc lists.  Virtual baseclasses are no longer represented in the
	main assoc list of a type.  CLASSTYPE_VBASECLASSES already holds
	such information.  Various functions changed and/or simplified to
	use value from that assoc list when needed.

	* cplus-decl.c (grokdeclarator): Don't get confused by
	non-storageclass bits in SPECBITS when DECL_CONTEXT == FIELD.

	* cplus-init.c (expand_aggr_init_1): Only check whether a new
	value has been assigned to `this' by the base class if
	FLAG_THIS_IS_VARIABLE is nonzero.

	* cplus-init.c (expand_aggr_init_1,build_new): Function
	`expand_aggr_vbase_init_1' was the wrong thing.  Change these
	functions to call `expand_aggr_vbase_init' instead.
	Also, #ifdef'd out `expand_aggr_vbase_init_1'.

	* cplus-search.c: Move assoc code from here...
	* cplus-tree.c: ...to here.

	* cplus-decl.c (lang_printable_name): Don't print return type for
	constructors or destructors.

	* cplus-class.c (finish_struct): Set TYPE_NEEDS_CONSTRUCTING bit
	if any default members.

	* cplus-decl.c (finish_file): Remove test for
	TYPE_NEEDS_CONSTRUCTING when considering vars in
	STATIC_AGGREGATES.  If something made it to this list, it should
	be initialized.

Sun Aug 13 14:25:55 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c: Rename static variable GLOBAL_AGGREGATES to
	STATIC_AGGREGATES.
	* cplus-decl.c (finish_decl): Put static aggregates on the
	STATIC_AGGREGATES list if the VAR_DECL is TREE_STATIC.  It does
	not have to be at the global_binding_level to get this treatment.
	Also, rename variable OLDGLOBAL to OLDSTATIC, and remove error
	messages which are no longer needed due to this change.

	* cplus-typeck.c (comptypes): Qualifiers must match.  (Fix taken
	from GCC).

	* cplus-init.c (expand_aggr_{vbase}_init,expand_recursive_init):
	provide arguments INPUT_FILENAME and LINENO to
	`expand_asm_operands'.
	* cplus-search.c (init_vbase_pointers,build_vbase_vtables_init):
	Ditto.

	* cplus-class.c (push_lang_context): Don't set current_lang_name
	if it is not a name we recognize.

	* All GNU C++ files: Merged changes from 1.35.95 to 1.35.96.

Sat Aug 12 00:27:43 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (finish_function): Call use_variable on
	CURRENT_VTABLE_DECL if it is non-NULL.

	* cplus-decl.c (finish_decl): Call build_indirect_ref instead of
	building the INDIRECT_REF by hand when setting the decl reference
	slot.

	* cplus-obstack.h: New file.  Defines obstack_int_grow and
	obstack_ptr_grow.  Cuts many calls to bcopy.
	* cplus-class.c: Use cplus-obstack.h instead of obstack.h.
	* cplus-search.c: Ditto.

	* cplus-parse.y (aggr): Fix minor nits in error messages.

	* cplus-class.c (finish_struct): Removed code which redundantly
	called `finish_decl' on static class members.

	* cplus-decl.c (finish_decl): C++ 2.0 now permits static class
	members to be of types with constructors.

	* cplus-search.c (bfs_unmark_finished_struct): Don't call
	assoc_value if TYPE == CURRENT_CLASS_TYPE.

	* cplus-search.c (assoc_value): Call compiler_error if we have
	multiple baseclass hits.  Also, make this function look for
	matches recursively.  This saves having to flatten out the
	hierarchy all the time, saving storage.

	* cplus-init.c (expand_recursive_init_1): Take into account fact
	that there is no virtual function table initialization needed if
	CLASSTYPE_NEEDS_VIRTUAL_REINIT set TREE_VALUE (init_list) to
	NULL_TREE.
	* cplus-class.c (build_class_init_list): Set up init lists
	correctly if the derived class just takes virtual function table
	initialization from the base class.

	* cplus-init.c (finish_base_init): Unmark fields initialized which
	belong to base classes.

	* cplus-decl.c (grokdeclarator,duplicate_decls): Implement C++ 2.0
	interpretation of `const'.

	* Aug 12 08:33 g++.xtar.Z on ~ftp/pub

	* cplus-typeck.c (commontype): Case for REFERENCE_TYPE appeared to
	be missing.
	* cplus-typeck.c (comptypes): Ditto.

	* cplus-typeck.c (comp_target_parms): Braino caused this function
	to return after processing just the first argument!

	* cplus-typeck.c (comp_target_parms,compparms): Take
	contravariance into account for argument lists.

Fri Aug 11 04:58:40 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-tree.c (list_hash): Implement hashing scheme for
	unchanging list nodes, such as compose TYPE_BASELINKS.
	Several new functions and data structures implement this.
	* cplus-search.c (get_baselinks): Call hash_tree_cons instead of
	tree_cons to get fresh nodes.

	* tree.c (init_tree): Remove call to bzero for hash_table.

	* cplus-init.c (expand_aggr_init): Typo in call to
	expand_vec_init.

	* newld.c (decode_command): Fix failure to bzero all entries in
	FILE_TABLE.

	* cplus-lex.c (cons_up_dtor_for_type): Add missing QUALS
	parameter in call to start_method.

	* cplus-decl.c (start_function): Set TREE_READONLY and
	TREE_VOLATILE bits of C_C_D.
	* cplus-class.c (popclass): Ditto.

	* cplus-tree.c (build_cplus_method_type): New function.  Like
	`build_method_type', but permits qualifiers for the instance
	variable.
	* cplus-tree.h: Declare it.
	* cplus-decl.c (grokdeclarator,grokclassfn): Call this function
	instead of build_method_type.

	* tree.c (build_method_type): Set TYPE_METHOD_BASETYPE from the
	TYPE_MAIN_VARIANT of BASETYPE.

	* cplus-lex.c (gplus.input): Change `friend' from TYPE_QUAL to
	SCSPEC.

	* cplus-parse.y (fn.def1): Permit const and volatile member
	functions.
	* cplus-method.c (stash_inline_prefix): Handle case of const and/or
	volatile member functions declared inside class.
	* cplus-decl.c (start_{method,function}): Grok const and volatile
	member functions.
	* cplus-decl.c (grokdeclarator): New parameter QUALS.

	* cplus-typeck.c (readonly_warning_or_error): If ARG is a
	PARM_DECL, print its name.  Also, if the message is due to the
	underlying structure of a COMPONENT_REF, tell user the
	member name instead of trying to hunt down the structure name.
	also, if ARG is a reference variable or parameter, name the
	reference as well.

	* cplus-cvt.c (build_up_reference): Handle case where we build a
	reference to a sub-object of an object which uses multiple
	inheritance.

	* cplus-class.c (finish_struct): Simplify conditions under which
	CLASSTYPE_NEEDS_VIRTUAL_REINIT is used, and use it.

Thu Aug 10 00:13:03 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-parse.y (member_init): If base class is virtual, save the
	intializer on the permanent_obstack.

	* cplus-init.c (expand_aggr_vbase_init_1): New function.  Called
	to actually walk the virtual baseclass initialization list.

	* cplus-init.c (expand_aggr_vbase_init): New argument DECL is
	the FUNCTION_DECL for the constructor by which this object is
	initialized.  From that constructor comes the virtual base class
	initialization list.

	* cplus-init.c (finish_base_init): Store initializers for virtual
	base classes.

	* cplus-tree.h (lang_decl): Add new field `vbase_init_list'.
	Holds initializers for virtual base classes.

	* cplus-init.c (build_new): Arrange to initialize virtual
	baseclasses before calling constructor if FLAG_THIS_IS_VARIABLE
	is zero.  Otherwise, constructor will call it on allocation.

	* cplus-cvt.c (convert_to_nonzero_pointer): If EXPR is already
	of type TYPE, don't build a NOP_EXPR; instead, just return
	EXPR.

	* cplus-class.c (build_method_call): If INSTANCE is NULL_TREE,
	then pre-allocate storage for the constructor.  After that, if
	there are virtual baseclasses to initialize, initialize them right
	away.  Then call constructor with resulting argument.

	* cplus-decl.c (flag_this_is_variable): Change default from 1 to 0.
	* cplus-decl.c (lang_decode_option): Recognize
	`-fthis-is-variable' on command line.
	* cplus-decl.c (finish_function): Don't emit test for whether `this'
	is zero if FLAG_THIS_IS_VARIABLE is zero.  Check both constructor
	and destructor case.
	* cplus-decl.c (grokclassfn): Make `this' a *const if
	!FLAG_THIS_IS_VARIABLE.

	* cplus-search.c (build_mi_matrix): Initialize MI_SIZE when
	reusing an old mi-matrix.

	* cplus-cvt.c (convert_to_nonzero_pointer): Abort if argument is
	integer_zerop.

	* cplus-class.c (build_method_call): Simplify code, mostly for
	speed.

	* cplus-search.c (lookup_field): Use my_tree_cons instead of
	tree_cons for looking up fields.

	* cplus-search.c (my_{tree_cons,build_string}): Use SET_TREE_CODE
	to set tree code.

	* cplus-decl.c (finish_decl): Initialize globals whose type needs
	constructing, but ! IS_AGGR_TYPE (type), with empty_init_node to
	keep assemble_variable from crashing.

	* cplus-search.c (build_mi_matrix): Take into account
	CLASSTYPE_N_VBASECLASSES when computing MI_SIZE.
	* cplus-class.c (finish_struct): Braino: set
	CLASSTYPE_N_VBASECLASSES after calling layout_vbasetypes.

	* cplus-class.c (finish_base_struct): Set MAX_HAS_VIRTUAL
	regardless of whether base class is a virtual baseclass or not.
	* cplus-class.c (finish_struct): Also, set MAX_HAS_VIRTUAL
	taking into account virtual baseclasses.
	* cplus-tree.c (layout_vbasetypes): Takes new arg PMAX which
	passes info of maximum number of virtual functions defined in
	virtual baseclasses from this function to finish_struct.

	* cplus-class.c (finish_struct): Set MAX_HAS_VIRTUAL if
	HAS_VIRTUAL is set.

	* cplus-class.c (modify_vtable_entry): If VFIELD can be
	NULL_TREE, if the current class has no virtual function except
	those inherited from a virtual baseclass.  In such a case,
	NORMAL will be zero.

	* cplus-lex.c (copy_type_lang_specific): Copy the array of
	basetypes so that CLASSTYPE_BASECLASS (t, i) gives the right
	baseclass.

Wed Aug  9 10:41:17 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-typeck.c (c_expand_return): Don't pass return value though
	a temporary if there are no pending cleanups.
	* stmt.c (no_pending_cleanups): New function to support above
	change.

	* stmt.c (assign_parms): Add test to see if we can avoid calling
	convert_units if possible.

	* cplus-decl.c (grokparms): Use variables LAST_RESULT and
	LAST_DECL to eliminate need to call `chainon'.

	* stmt.c (expand_fixup,expand_start_bindings): Use static variable
	EMPTY_CLEANUP_LIST to short-circuit cleanup checking, and also
	cut down on calls to tree_cons, in new binding contours, which are
	quite frequent in C++ (20% of calls to tree_cons, and 5% of total
	TREE_LIST nodes).

	* stmt.c (expand_start_*): Build new nesting level structure on
	obstack instead of calling malloc.  New variable STMT_OBSTACK.
	New function `init_stmt'.
	* toplev.c: Call `init_stmt'.

	* obstack.h (obstack_{ptr,int}_grow): New macros.

	* cplus-cvt.c (build_default_{binary,unary}_type_conversion):
	Handle case where one (or both) incoming types are "C" types, not
	"C++" types.

	* cplus-cvt.c (convert_to_pointer): If we go through any virtual
	base pointers, make sure that casts to BASETYPE from the last
	virtual base class use the right value for BASETYPE.

	* cplus-search.c (dfs_find_vbases): VBASES are now TREE_VECs,
	not TREE_LISTS.  Change variable named OFFSET_INFO to ASSOC,
	and use accordingly.

	* cplus-search.c (dfs_get_vbase_types): Make assocs in VBASE_TYPES
	contain the true basetype, not its MAIN_VARIANT.

Tue Aug  8 00:19:43 1989  Michael Tiemann  (tiemann at yahi)

	* stor-layout.c (layout_basetypes): Don't inherit assoc info.
	Synthesize it instead.

	* cplus-class.c (finish_struct): Reenable code which fills in
	virtual function tables of virtual baseclasses.

	* cplus-class.c (finish_struct): Fill in virtual function table
	with values which come from virtual or non-leftmost baseclasses.
	These are not filled in correctly by `modify_vtable_entry', which
	for these cases, only correctly allocates their skeleton.

	* cplus-class.c (modify_vtable_entry): Only call get_base_distance
	when BASE != CONTEXT.

	* cplus-search.c (get_base_distance): Don't push a search_stack
	level until we know we need it and will use it.

	* cplus-class.c (modify_vtable_entry): Once we know what vtable is
	of interest, set BASE to the best approximation of T's vtable we
	know.  I.e., set it to the vtable for the immediate super-class of
	T.

Mon Aug  7 17:12:31 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (finish_struct): When extending the bounds of the
	virtaul function table, keep VFIELDS as it was; don't move it up
	the inheritance tree.

	* cplus-class.c (finish_struct): No need to allocate a lang_decl
	for the virtual function table pointer FIELD_DECL.  Others need
	bits, but not bytes that FUNCTION_DECLs need.

	* cplus-init.c (build_virtual_init): For now, assume that FOR_TYPE
	and TYPE may be distinct, so use assoc lists to find the right
	vtable.

	* cplus-init.c (expand_recursive_init_1): Initialize the virtual
	function table of sub-components of aggregates driven by
	sub-component.  Otherwise, we have to initialize the virtual
	function table driven by the caller who knows what sub-components
	must be initialized.  Question: will this cause multiple
	initialization of vtables which are not down the left-hand side?
	Answer is probably yes.

	* tree.c (make_tree_vec): New function.

	* tree.c (copy_node): Now handles TREE_VEC correctly.

	* cplus-search.c ({make,copy}_assoc,assoc_value,debug_dump_assoc):
	Change representation of assoc list from TREE_LIST to TREE_VEC
	representation.
	* cplus-tree.h (ASSOC_* macros): Also here.

	* cplus-typeck.c (process_init_constructor): Don't complain about
	non-initialization of static class members, regardless of whether
	they are in global scope or not.  (Previously only complained when
	at global scope.)

	* cplus-class.c (finish_struct): Allocate method_vec if members
	need destructors.

Sun Aug  6 10:23:31 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (finish_struct): Eliminate redundant
	initialization of class fields to 0.

	* cplus-parse.y (parm rules): Use void_list_node instead of
	build_tree_list (NULL_TREE, void_type_node) where possible.

	* print-tree.c (dump): Handle TREE_VEC case.

	* cplus-init.c (add_method): Modified, and moved to cplus-class.c.

	* cplus-tree.h (lang_type): Change representation of list of
	member functions from list of lists to vector of lists.
	* cplus-class.c (finish_struct,build_method_call): Also here.
	* cplus-method.c (do_inline_function_hair): Also here.
	* cplus-decl.c (grokclassfn): Also here.
	* cplus-init.c (build_delete,build_member_ref): Also here
	* cplus-ptree.c (walk_lang_type): Also here.
	* cplus-search.c (lookup_fnfields{_1},get_baselinks,dfs_pushdecls,
	dfs_compress_decls,dfs_popdecls): Also here.
	* cplus-typeck.c (build_component_ref): Also here.
	* dbxout.c (dbxout_type): Also here.

	* cplus-class.c (build_method_call): Remove vestigal use of
	OVERLOAD_MAX_LEN.

Sat Aug  5 09:49:48 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (grokparms): Reuse TREE_LIST node in usual case of
	parameter processing.

	* cplus-decl.c (init_decl_processing): Do things here which used
	to be done in toplev.c
	* toplev.c (various places): Merge with GCC.

Fri Aug  4 17:47:24 1989  Michael Tiemann  (tiemann at yahi)

	* stor-layout.c (genop): Avoid creating new nodes when old ones
	will do.
	* stor-layout.c (build_int): Cache sizes we have made for types.

Thu Aug  3 21:44:04 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (pushdecl): Canonicalize enum typedefs same as
	struct, class, and unions.

	* cplus-init.c (resolve_member_ref): When member is of
	METHOD_TYPE, return logical address of the member, not the member
	itself.  The member itself has type METHOD_TYPE, which has mode
	EPmode, which is not a valid mode for expand_expr.

	* cplus-init.c (expand_vec_delete): When calling vector delete on
	store which does not need destructors, just ignore the argument,
	and delete the container (array) instead.

	* cplus-decl.c (start_function): Handle case where OLDDECL comes
	back as a TREE_LIST.

Wed Aug  2 10:54:54 1989  Michael Tiemann  (tiemann at yahi)

	* collect.c (process): Initialize ldptr to NULL if COFF is defined.

	* cplus-method.c (stash_inline_prefix): String name of function is
	IDENTIFIER_POINTER (DECL_NAME (...)), not DECL_NAME.

Mon Jul 31 12:14:35 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (finish_decl): Handle case where INIT can be a
	TREE_LIST when initializing a named return value.  Specifically,
	translate a TREE_LIST into a COMPOUND_EXPR when initializing a
	referece.

	* toplev.c (compile_file): Gripe about *non*-extern functions
	declared static but not defined.

	* cplus-init.c (build_delete): Keep ADDR parameter from being
	evaluated multiple times if TREE_VOLATILE.

	* cplus-decl.c (grok_function_init): Note whether DECL is an
	uninheritable virtual (i.e., a virtual function of an "abstract
	class").
	* cplus-tree.h (lang_decl): Add bit to record above info.
	* cplus-class.c (build_method_call): Give error if compiler can
	detect that user is attempting to call this function for an object
	whose type is that of the "abstract class".

	* gcc.c (link_spec): Make libg++.a available via %s rather than
	from -lg++.

Fri Jul 28 00:22:14 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-typeck.c (comp_target_types): Take contravariance into
	account for OFFSET_TYPE.

	* cplus-decl.c (grokdeclarator): When declaring an array, always
	call suspend momentary, since the TYPE_DOMAIN of the array may be
	needed later, for instance by expand_vec_delete.
	* cplus-parse.y (nonmomentary_expr): Second change needed to
	ensure that above condition is met.

	* cplus-decl.c (grokdeclarator): Handle case of derived class
	declaring member function static when derived class declared
	member function virtual.

	* cplus-decl.c (grokparms): Permit functions which have default
	arguments to end with `...'.
	cplus-typeck.c (actualparameterlist): Handle this new case.

	* cplus-typeck.c (c_expand_return): Handle case where conversion
	to return type of function returns ERROR_MARK_NODE.

	* cplus-init.c (build_delete): Handle case where member type is
	ARRAY_TYPE.

	* cplus-parse.y (component_decl): Handle case of missing ';'
	before '}'.

	* cplus-typeck.c (c_expand_start_case): Handle case where switch
	quantity is a MEMBER_REF.

	* cplus-method.c (build_component_type_expr): Handle case of
	calling non-virtual type conversion operators.

	* cplus-decl.c (shadow_tag): Make permanent any type created here.

	* gcc.c (struct compiler compilers[]): add -D__GNUC__ to files
	which are compiled using GNU C++.

	* cplus-parse.y (primary <- IDENTIFIER): If the identifier is a
	class-local enumeral value, check visibility--it may be a private
	member of a base class.

	* cplus-cvt.c (convert_force): New function.  Permit conversion from
	sub-type to private super-type.
	* cplus-typeck.c (build_c_cast): Call convert_force instead of
	convert.

	* cplus-typeck.c (build_x_function_call): Don't crash if asked to
	resolve a function which has been declared overloaded, but does
	not yet have any signatures.

	* cplus-class.c (finish_decl): Don't crash when warning (or
	flagging as error) that array types in static objects cannot need
	constructors.

Thu Jul 27 02:26:27 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-tree.c (build_cplus_array_type): Make array type permanent
	if ELT_TYPE is permanent.  This is needed because the array type
	may exist within an inline function, and that inline function may
	be expanded at any future time.

	* cplus-typeck.c (build_scoped_ref): Typo caused fn call to have
	virtually no effect.

	* cplus-init.c (expand_recursive_init): Make usage of global
	INIT_PTR reentrant.

	* cplus-search.c (dfs_pushdecls): Don't try initializing a
	TYPE_DECL, just continue through it.

	* integrate.c (access_parm_map): Don't compensate for
	BYTES_BIG_ENDIAN if parm is BLKmode.

	* stmt.c (various places): Make stmt.c agree much more closely
	with GCC's stmt.c.  Now only a few places where there are
	differences.  These have to do with calling do_pending_adjust
	before running cleanups, and using `lang_printable_name' instead
	of DECL_PRINT_NAME to assign to `current_function_name'.

Wed Jul 26 15:04:45 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-decl.c (finish_decl): If decl is static, but initialized
	by non-static initializer (such as an object initialized by a
	constructor), use a special initializer to make the decl lay down
	in data rather than bss space.
	* varasm.c (assemble_variable): Remove C++-specific code for above
	case.

Tue Jul 25 13:10:19 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (modify_vtable_entry): If the base fndecl is
	not contained in the vtable, don't try to modify the vtable.
	This automatically includes virtual functions from virtual base
	classes.
	* cplus-class.c (modify_vtable_entry): If the virtual function
	does come from a virtual base class, remember to change its
	DECL_VINDEX from a FUNCTION_DECL to an INTEGER_CST before
	continuing with the loop.  Use the DECL_VINDEX of the base
	FUNCTION_DECL.

	* cplus-search.c (debug_dump_assoc): New function.

Mon Jul 24 11:22:50 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (finish_struct): Break out code to initialize a
	struct with information deriving from its base classes.
	* cplus-class.c (finish_base_struct): New function where that code
	now lives.

	* cplus-search.c (dfs_get_vbase_types): Make full association
	list; Don't do so only when TREE_VIRTUAL bit is set.

Sun Jul 23 20:31:57 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (modify_vtable_entry): Braino caused base
	association to overwrite derived associate, causing base
	virtual functions to appear in derived virtual function tables
	when they shouldn't have.

Sat Jul 22 14:48:51 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-lex.c (yylex): Characters are of type `char'
	* cplus-decl.c (lang_decode_option): No longer a need for
	flag_char_charconst.
	* flags.h: ditto.

	* All GNU C++ files: Merged changes from 1.35 to 1.35.95.

Thu May 25 02:56:16 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-init.c (expand_aggr_init_1): make sure to emit error
	  message when following an error path.

	* stor-layout.c (layout_decl): call this function instead of
	  cplus_size_in_bytes.  This saves many calls to `convert_units'.

	* cplus-typeck.c (cplus_size): new function, just returns the size
	  of the type we are interested in (no units conversion is done).

	* cplus-decl.c (init_decl_processing): preallocate
	  IDENTIFIER_NODES for `this' and `__delete_me__'; saves calls to
	  get_identifier.

	* cplus-parse.y, cplus-lex.c: tried to speed things up.  Removed
	  vestigial `@' construct from cplus-parse.y.  Also parse '(' ')'
	  as a single token.

	* cplus-init.c (add_friend): make sure to return void_type_node if
	  we want our callers not to see anything.  Also, undo having set
	  TREE_GETS_{NEW,DELETE} if the friend we get is global operator new or
	  global operator delete.

Tue May 23 01:10:51 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-typeck.c (build_modify_expr): Recursive memberwise
	  assignment must work on all type variants, not just the main
	  variant.  Otherwise, we can't assign a const B& to a B&.

	* cplus-cvt.c (convert_to_pointer): convert to virtual baseclasses
	  through virtual baseclass pointers.  Also, give error if
	  converting up from a virtual baseclass type.

Mon May 22 22:03:24 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (finish_struct): remember to give dynamic classes
	  a vfield even if they don't define virtual functions (-fSOS).

	* cplus-decl.c (init_decl_processing): fixed typo: TYPE_POINTER_TO
	  does not build a pointer type, but build_pointer_type does.

	* cplus-decl.c, cplus-init.c: allow builtin functions to be
	  declared friends.

	* cplus-class.c (ideal_candidate): if the best candidates require
	  user-defined type conversions, don't reject as ambiguous the
	  case where one candidate comes from one class, and the other
	  candidates come from base classes of that class.

	* stor-layout.c (layout_type): after laying out a type, make sure
	  that all type variants get the type's size.

Fri May 19 13:20:07 1989  Michael Tiemann  (tiemann at yahi)

	* cplus-class.c (popclass): don't kill out prev_class_type's decls
	  if not at the global binding level.

	* cplus-decl.c: added new field `class_shadowed', which may some
	  day be used to implement nested clases.

	* newld.c (various places): round up size to double word boundary
	  if defined(sparc) || defined(sun).

	* tree.c (lvalue_p): A CALL_EXPR is an lvalue if the return type
	  is an addressable type.

	* cplus-init.c (make_friend_class): fix typo in error message.

	* cplus-class.c (finish_struct): Don't give error message if class
	  is does not define virtual functions which must be defined if
	  that class has some of its own.

	* cplus-class.c (instantiate_type): handle case where user
	  requests member function using object, i.e., `x.f'.  If f is
	  virtual, return the function found in the virtual function table.

	* stor-layout.c (layout_basetypes): language dependent code
	  removed, put in cplus-class.c

	* stmt.c (expand_goto_internal, expand_end_bindings,
	  fixup_cleanups): if cleanups were called on leaving a binding
	  contour, and EXIT_IGNORE_STACK is not defined, call
	  do_pending_stack_adjust.

	* gcc.c: recognize ".cxx" as a C++ file name extension.

	* cplus-typeck.c (convert_for_initialization,
	  convert_for_assignment): convert MEMBER_REFs, if possible, to
	  members or component refs as appropriate.

	* cplus-typeck.c (build_member_ref): recognize member refs which
	  are not associated with any object in particular (i.e., could
	  be, but need not be `this').

	* cplus-search.c (get_vbase_types): orders the virtual base
	  classes so that initialization and anti-initialization are 
	  performed in correct order.  A virtual baseclass is not
	  destroyed until all parts of the object which could be using
	  that virtual base class are destroyed.

	* cplus-parse.y: call build_vbase_delete if appropriate.

	* cplus-init.c (expand_delete): call build_vbase_delete if
	  appropriate.  No longer deletes parts of objects via virtual
	  base classes.

	* cplus-init.c: new function build_vbase_delete, performs
	  destructors on objects with virtual base classes.  new function
	  build_x_delete calls free-store deallocator on objects without
	  running destructors.

	* cplus-decl.c (pushdecl, shadow_tag, and xref_tag): implement
	  C-like behavior in "C" language scope vis a vis type
	  declarations.

	* cplus-decl.c: define macros PUSH_BINDING_LEVEL and
	  POP_BINDING_LEVEL.  Use these macros where appropriate.  Fixed
	  bug in popping binding contours in the presence of syntax
	  errors.

	* README, config.g++, make-links.g++: fixed minor glitches

Wed May 17 20:34:29 1989  Michael Tiemann  (tiemann at yahi)

	* stor-layout.c: move code which deletes an incomplete base type
	  to cplus-class.c.

	* cplus-class.c (finish_struct): call `propagate_basetype_offsets'.

	* cplus-class.c: new function `propagate_basetype_offsets' gives
	  correct offsets to base types which are not immediate base types
	  in a multiple inheritance lattice.

Tue May 16 09:40:00 1989  Michael Tiemann  (tiemann at yahi)

	* Started using ChangeLog for version 1.35.0