386BSD 0.0 development
authorWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Sun, 7 Jan 1990 16:17:39 +0000 (08:17 -0800)
committerWilliam F. Jolitz <wjolitz@soda.berkeley.edu>
Sun, 7 Jan 1990 16:17:39 +0000 (08:17 -0800)
Work on file usr/src/usr.bin/g++/cc1plus/ChangeLog89

Co-Authored-By: Lynne Greer Jolitz <ljolitz@cardio.ucsf.edu>
Synthesized-from: 386BSD-0.0/src

usr/src/usr.bin/g++/cc1plus/ChangeLog89 [new file with mode: 0644]

diff --git a/usr/src/usr.bin/g++/cc1plus/ChangeLog89 b/usr/src/usr.bin/g++/cc1plus/ChangeLog89
new file mode 100644 (file)
index 0000000..6562817
--- /dev/null
@@ -0,0 +1,3581 @@
+Sun Dec 31 10:47:51 1989    (tiemann at calvin)
+
+       * cplus-cvt.c (build_up_reference): Take multiple inheritance into
+       account in all (instead of just some) cases.  Take virtual
+       baseclasses into account in all (instead of no) cases.
+
+       * cplus-init.c (build_vbase_delete): Convert ADDR before calling
+       destructr.  Otherwise privately derived baseclasses will give
+       problems.
+
+       * cplus-init.c (expand_aggr_init_1): Distinguish case where
+       initializer list fails because virtual baseclass lacks default
+       initializer and other bad argument lists.
+
+Sat Dec 30 13:09:43 1989    (tiemann at calvin)
+
+       * cplus-tree.h (lang_type): Added bit for MARKED6.  Used to use
+       MARKED3 to mean `base class initialized', but that conflicts with
+       use meaning `virtual baseclass processed' in cplus-search.c.
+       * cplus-init.c (finish_base_init): Use _MARKED6 instead of
+       _MARKED3 to indicate a baseclass has been initialized.
+
+       * cplus-init.c (expand_aggr_init_1): If TYPE_HAS_CONSTRUCTOR(TYPE)
+       but no constructor takes the initializer, and there is no X(X&)
+       constructor, generate code for X(X&) constructor by hand.
+
+       * cplus-typeck.c (build_modify_expr_1): Substantially simplified
+       using assumption that LHS and RHS are type-compatible as a
+       consequence of being elements of isomorphic structures.
+
+       * cplus-init.c (expand_aggr_init): If EXP is initialized from
+       an object of its same type, and EXP does not have an X(X&)
+       constructor, have build_modify_expr do the work.
+
+Fri Dec 29 00:29:45 1989    (tiemann at calvin)
+
+       * cplus-class.c (finish_struct): Don't build default functions by
+       default.  Instead, rely on compiler doing the Right Thing when
+       handling INIT_EXPR and MODIFY_EXPR.
+
+       * cplus-typeck.c (build_modify_expr): Don't copy virtual function
+       table fields or virtual baseclass fields when performing
+       memberwise copying.
+       Instead, split `build_modify_expr' into two functions, a recursive
+       form `build_modify_expr_1' which doesn't do any copying for
+       virtual baseclasses, and a non-recursive form `build_modify_expr',
+       which does handle these at top level.
+
+Thu Dec 28 12:37:37 1989    (tiemann at calvin)
+
+       * cplus-decl.c (build_default_constructor): Typo--used
+       DECL_VIRTUAL_P (...) when VFIELD_NAME_P (DECL_NAME (...)) was
+       meant.  Also, take into account fact that second arg might be "in
+       charge" arg.
+
+       * cplus-class.c (finish_base_struct): Move setting of
+       TYPE_USES_VIRTUAL_BASECLASSES from here...
+       * cplus-decl.c (xref_tag): ...to here.  Needed because
+       constructors for virtual baseclasses now need new type signatures.
+
+       * cplus-decl2.c (grokclassfn): Rewrote code that inserts
+       parameters so that SOS will work with virtual baseclasses.
+       @@ But rest of SOS code must be changed to deal with this.
+
+       * cplus-init.c (expand_aggr_vbase_init): Changed interface.  Last
+       arg is no longer FUNCTION_DECL, rather, it is the list of
+       initializations that the constructor must perform (if in charge).
+       All virtual baseclasses, whether they need constructors or not,
+       will be initialized one way or another.
+
+       * cplus-decl.c (finish_function): Don't do special things for
+       constructors with virtual baseclasses.  Leave that up to
+       `finish_base_init'.
+       * cplus-init.c (finish_stmt): Same change.
+
+       * cplus-init.c (finish_base_init): Test "in charge" variable and
+       conditionally do all virtual baseclass initialization.
+
+       * cplus-class.c (build_method_call): New flag LOOKUP_HAS_IN_CHARGE
+       which means that parameter list comes with the "in charge"
+       parameter already set up.  If the call is to a constructor, and
+       this flag is not set, then say we are "in charge" iff constructor
+       called is for new object.
+       * cplus-init.c (expand_aggr_init_1): Add "in charge" parameter
+       when appropriate, and set FLAGS in those cases.
+
+       * cplus-method.c (fndecl_as_string): Don't print "in charge"
+       variable when formatting constructors for objects with virtual
+       baseclasses.
+
+       * cplus-tree.h (lang_decl): Add bit for constructors which build
+       objects with virtual baseclasses.  These constructors take a new
+       extra argument after the `this' pointer that says whether they are
+       "in charge" of initializing virtual baseclass things or not.
+       * cplus-decl2.c (grokclassfn): Set DECL_CONSTRUCTOR_WITH_VBASE_P
+       bit when appropriate.  Also, add extra parameter in that case.
+       * All GNU C++ files: Change name of AUTO_DELETE_IDENTIFIER to
+       IN_CHARGE_IDENTIFIER, since that is the correct generalization of
+       its function, and thus allows the same identifier to be used in
+       constructors and destructors.
+
+Thu Dec 21 12:58:05 1989  Michael Tiemann  (tiemann at hudson)
+
+       * cplus-init.c (expand_aggr_init): If initializing from a GNU C
+       CONSTRUCTOR, consider the elts in the constructor as parameters to
+       an implicit GNU C++ constructor.
+
+Wed Dec 20 10:45:46 1989  Michael Tiemann  (tiemann at hudson)
+
+       * cplus-decl.c (duplicate_decls): Don't know why I turned off
+       propagation of DECL_IN_AGGR_P bit, but it needs to be
+       on--otherwise we cannot catch duplicate method declarations in
+       class scope.  Was it turned off (erroneously) for efficiency
+       reasons?
+
+       * cplus-class.c (convert_harshness): Don't see two functions
+       needing user-defined type conversions as ambiguous is one comes
+       from immediate class, when the other comes from a base class.
+
+       * cplus-decl.c (grokdeclarator): Don't permit storage class
+       specifiers in parameter declarations.
+
+       * cplus-typeck.c (mark_addressable): Say we're sorry if named
+       return value much change from register to memory.  Also, since
+       TREE_ADDRESSABLE is checked at top, no need to recheck in various
+       other parts.
+       * cplus-cvt.c (build_up_reference): Same change.
+
+       * stmt.c (expand_function_start): If function value is in a
+       register, set TREE_REGDECL of the DECL_RESULT.
+
+       * cplus-class.c (convert_harshness): Conversion of enum to int
+       costs an extra penalty.  Also, don't permit one kind of enum to
+       convert to another.
+
+       * cplus-search.c (dfs_pushdecls): Only set TREE_USED to zero for
+       FIELD_DECLS.  If we zero it out for e.g. VAR_DECLs, they won't get
+       written out at end of file.
+
+Tue Dec 19 17:19:31 1989  Michael Tiemann  (tiemann at hudson)
+
+       * cplus-decl.c (finish_decl): If we are at top level and
+       allocation is temporary, switch to permanent allocation before
+       calling `grok_reference_init'.  Also, initialization of references
+       was losing when initializer was a constructor.
+       @@ Problem that must be better solved: The compiler was confused
+       about what NEW_EXPR meant--when it when looking for temp space for
+       the reference, it was grabbing space from the file-level
+       initialization function, not from static space.  What's needed is
+       objects which really know how to get the kind of space they are
+       looking for when they are really expanded.
+
+       * cplus-type2.c (build_functional_cast): Check that type is
+       defined before testing various constructor bits.
+
+Thu Dec 14 15:14:12 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-tree.c (make_deep_copy,copy_to_permanent): New functions.
+       * cplus-init.c (build_new): Dec 12 change was wrong.  Instead,
+       call copy_to_permanent if we need to stash away the initializer.
+
+Tue Dec 12 01:16:31 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-init.c (build_new): Check that INIT is not NULL_TREE
+       before checking its permanence.
+
+       * cplus-decl.c (decls_match): If TREE_TYPE (NEWDECL) is
+       ERROR_MARK_NODE, don't call comptypes.
+
+       * cplus-decl2.c (grokclassfn): Parameters for constructors with
+       virtual baseclasses must be build on permanent_obstack.
+
+       * cplus-parse.y (member_init): If using old-style member
+       initialization for base class, remember to move allocation to the
+       permaent_obstack before reading the initializer.
+
+       * cplus-class.c (build_method_call): If global member function is
+       good, record that fact in BEST.  That way our early-out for member
+       functions won't accidently call an inferior member function.
+
+       * cplus-decl.c (grokdeclarator): If TREE_CODE (decl) ==
+       ERROR_MARK, then silently continue processing, rather than
+       aborting compilation.
+
+       * cplus-parse.y (except_stmts): Call `expand_start_catch' and
+       `expand_end_catch' instead of `expand_exit_except' when expanding
+       default catch clause.  Otherwise, we scream out to the next
+       handler, not to the point after the handler.
+
+       * cplus-class.c (build_overload_call): continue statement missing
+       in TYPE_DECL case.
+
+Sat Dec  9 23:27:56 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-decl.c (xref_tag): Mark REF in addition to all its
+       basetypes so we can protect against the user declaring recursive
+       types by accident.  Also fixed Braino in testing value of I after
+       the BINFO loop.
+
+Thu Dec  7 16:37:28 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-search.c (dfs_record_inheritance): Check that MI_SIZE is
+       nonzero before entering loop which uses it as stride.
+
+       * cplus-typeck.c (build_component_ref_2): Make subroutine of code
+       which builds the final COMPONENT_REF structure because it must be
+       recursive in the case we have a field from a base class of a
+       virtual base class.
+
+Wed Dec  6 08:05:59 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-class.c (build_scoped_method_call): Dec 2 introduced a bug
+       by attempting to optimize tree node allocation.  Fixed by always
+       converting EXP.
+
+       * cplus-decl.c (grokdeclarator): If TYPE becomes ERROR_MARK_NODE,
+       and we are chasing down the declarator, must chase to TREE_OPERAND
+       (DECLARATOR, 1) if TREE_CODE (DECLARATOR) is SCOPE_REF.
+
+       * cplus-class.c (finish_struct): Change criterion for building
+       init list from != CONST_DECL to == FIELD_DECL.  Also, don't count
+       a class as needing constructing or needing constructor based on
+       static members.
+
+       * cplus-init.c (expand_vec_init): Call itself recursively with
+       FROM_ARRAY nonzero if TREE_TYPE (init) is same as TREE_TYPE (exp).
+       Also, if coming FROM_ARRAY, only call `expand_aggr_init' if there
+       is a constructor to call.  Otherwise, call `expand_assignment'.
+
+       * cplus-class.c (finish_struct): Can't have a default constructor
+       if the class has reference types without default initial values.
+
+       * cplus-tree.h (TYPE_RAISES_EXCEPTIONS): Use TYPE_NAME instead of
+       (tree) TYPE_LANG_SPECIFIC.
+       * cplus-decl.c (duplicate_decls): Now TYPE_LANG_SPECIFIC implies
+       IS_AGGR_TYPE always.
+
+       * cplus-init.c (build_default_constructor): Don't build
+       initializer for default members.
+
+       * cplus-class.c (finish_struct): If FUNCTION_DECL has
+       IDENTIFIER_ERROR_LOCUS set, then don't keep the function in the
+       class.  It is evil.
+
+       * cplus-init.c (expand_member_init): Don't permit initialization
+       of member from base class--unless baseclass is virtual and has no
+       constructor.
+       * cplus-init.c (member_init_ok_or_else): New function
+       encapsulating this and other checks for validity of member
+       initialization.
+
+       * cplus-type2.c (build_functional_cast): Try going through type
+       conversion function if no constructors apply.
+
+       * cplus-typeck.c (c_expand_return): When returning a named return
+       value, call `use_variable' on the result, in case it is in a
+       register.
+
+       * cplus-class.c (compute_conversion_costs): Don't warn about
+       contravariance violations (or other problems) as a result of
+       calling `comp_target_types' (via call to `instantiate_type').
+
+       * cplus-init.c (expand_aggr_init): Check that INIT is nonzero
+       before accessing its TREE_TYPE.
+
+Tue Dec  5 00:13:33 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * integrate.c (copy_rtx_and_substitute): If we folded something
+       completely into a constant, don't try to make it a legitimate
+       memory reference out of it.
+
+       * cplus-class.c (propagate_basetype_offsets): Forgot to set
+       ASSOC_TYPE (ASSSOC) when building the new basetype.
+
+       * cplus-init.c (expand_aggr_init): When initializing const array,
+       turn off const bits during initialization.  Otherwise constructor
+       can't be called (since it is calling from const object to
+       non-const member function).
+
+       * cplus-method.c (build_overload_name): Set PARMTYPE to
+       TYPE_MAIN_VARIANT (PARMTYPE) after extracting interesting bits.
+
+Mon Dec  4 04:56:08 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-decl.c (finish_decl): wrt Nov 14 change, only change
+       DECL_NAME of TTYPE if DECL is not a FUNCTION_DECL.  It screws up
+       consing up of default functions.
+       * cplus-decl.c (grokdeclarator): When replacing anonymous aggr
+       names with reasonable aggr names, change the names of any default
+       constructors and/or destructors.
+
+       * cplus-tree.h (type_flags): Added bits for
+       TREE_GETS_CONST_{ASSIGN,INIT}_REF.
+       * cplus-decl.c (grok_{ctor,op}_properties): Set bits here.
+       * cplus-class.c (finish_base_struct): Read bits here.
+       * cplus-class.c (finish_struct): If 
+
+       * cplus-init.c (expand_vec_init): Implement copy initialization
+       from one vector to another (to make X(X&) work if members
+       are vectors of X).  Added parameter FROM_ARRAY to signify this
+       fact.
+       * All callers changed.  
+
+       * cplus-decl.c (grokdeclarator): Test for validity of destructor
+       declaration was too harsh.  It was not allowing one to declare
+       that a destructor from a base class had public visibility in the
+       current class.  
+
+       * cplus-method.c (hack_identifier): Vestigial double TREE_VALUE.
+       Now that we use baselinks, everything is one level of list.
+
+       * expr.c (expand_builtin): Fixed for BUILTIN_SAVEREGS case, again.
+       This time, loop was failing because there was only one insn being
+       protected.  Now, emit a note, so that loop terminates properly.
+
+       * cplus-decl.c (build_default_constructor): Handle initialization
+       of anonymous unions by bitwise copy.
+       * cplus-init.c (finish_base_init): Handle wholesale initialization
+       of anonymous unions, i.e., the whole union, rather than just any
+       one member.
+
+Sun Dec  3 13:32:29 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-decl.c (grok_ctor_properties): Add argument CTYPE to say
+       what class type we are grokking for.
+
+       * All GNU C++ files: Changed tests against IS_AGGR_TYPE when test
+       against TYPE_LANG_SPECIFIC tests the property in which we are
+       interested.
+
+       * cplus-decl.c (grok_ctor_properties): Notice whether constructor
+       can be used as default constructor, i.e., X ().
+       * cplus-class.c (base_info): Add new fields `needs_default_ctor'
+       and `cant_have_default_ctor'.  Set the former if any of the
+       basetypes define a default constructor.  Set the latter if and of
+       the basetypes define constructors, but not the default
+       constructor.
+       * cplus-class.c (finish_struct): If NEEDS_DEFAULT_CTOR and not
+       CANT_HAVE_DEFAULT_CTOR, then cons up a default constructor for T.
+       * cplus-lex.c (cons_up_default_function): Handle this new kind of
+       default constructor.
+       * cplus-decl.c (finish_function): Ditto.
+
+       * cplus-typeck.c (build_modify_expr): Change assignment to this
+       from error to warning if FLAG_THIS_IS_VARIABLE.
+
+       * cplus-class.c (finish_struct): Build default X(X&) constructor
+       if there are *any* constructors, not just if there are inherited
+       X(X&) constructors.
+
+       * integrate.c (function_cannot_inline_p): Raise threshold from 3
+       to 4, since we copy more NOTEs now.
+
+       * cplus-decl.c (finish_function): If DECL_CONSTRUCTOR_P (FNDECL)
+       and DECL_COMPILER_GENERATED_P (FNDECL), do the default thing for
+       this constructor (memberwise initialization).  Done by calling
+       `build_default_constructor'.
+       * cplus-decl.c (build_default_constructor): New function.
+
+       * cplus-lex.c (cons_up_dtor_for_type): Change name to
+       `cons_up_default_function'.  Takes new argument KIND saying what
+       kind of default function to build.  Cons up destructor or X(X&)
+       constructor depending on KIND.
+       * cplus-init.c (expand_aggr_init_1): Test TYPE_HAS_INIT_REF, not
+       TYPE_GETS_INIT_REF.
+       * cplus-typeck.c (convert_for_initialization): Ditto.  If !HAS,
+       but GETS, then abort for now.
+
+       * cplus-class.c (finish_base_struct): Propagate
+       TYPE_GETS_ASSIGN_REF.
+       * cplus-class.c (finish_struct): If TYPE_GETS_ASSIGN_REF (T)
+       but not TYPE_HAS_ASSIGN_REF (T), then default.
+       * cplus-decl.c (grok_ctor_properties): Set TYPE_HAS_INIT_REF along
+       with TYPE_GETS_INIT_REF.
+
+       * cplus-init.c (build_delete): Don't check PROTECT when converting
+       the object to be destroyed from derived type to base type.
+       Leave it up to whether the destructor is visible or not
+       to make that decision.
+
+       * cplus-typeck.c (actualparameterlist): New parameter FLAGS.
+       * cplus-typeck.c (convert_for_initialization): Ditto.
+       * cplus-cvt.c (convert_to_reference): Change PROTECT to FLAGS.
+       * cplus-cvt.c (build_up_reference): Ditto.
+       * All callers changed.
+
+       * cplus-init.c (build_delete): When deleting members, use PROTECT
+       rather than 1 as value for calling `build_delete' recursively.
+
+       * cplus-decl2.c (grokfield): If the initializer winds up being
+       `error_mark_node', wrap it in a NOP so `decl_constant_value' will
+       do the right thing.
+
+       * cplus-decl.c (grokparms): If default parameter needs
+       type instantiation, do it.
+
+       * cplus-typeck.c (build_modify_expr): Cast first expression in a
+       COMPOUND_EXPR to VOID_TYPE_NODE to suppress warning from
+       warn_if_unused_value.
+
+Sat Dec  2 16:57:52 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-class.c (build_scoped_method_call): Extra TREE_TYPE around
+       TREE_TYPE (decl) in two places.  Improved comments.  Make DECL be
+       consistently of aggregate type.
+
+       * cplus-tree.h (lang_type): `type_flags' substructure was not
+       multiple of 4 bytes.
+
+Fri Dec  1 05:08:57 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * integrate.c (try_fold_cc0): Argument to `emit_jump' was wrong:
+       called with LABEL_REF rtx instead of underlying CODE_LABEL.
+
+       * cplus-class.c (add_virtual_function): Handle case where virtual
+       function is declared twice in the same class.
+
+       * cplus-decl.c (finish_decl): Length argument to `bcopy' was off
+       by one for anonymous aggregate names was off by one.
+
+Thu Nov 30 16:29:42 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * expr.c (expand_builtin): In BUILTIN_SAVEREGS case, advance
+       SAVING_INSNS after noting stores.
+
+Wed Nov 29 05:35:59 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-except.c (expand_cplus_reraise): If an exception was not
+       on the legal list of exceptions to reraise, don't bother
+       protecting the raised object by assigning zero to its pointer.
+
+       * cplus-class.c (build_method_call): When calling a non-const
+       member function from a const member function, tell which non-const
+       member function is being called.  Also, return ERROR_MARK_NODE if
+       we are not looking up to complain.
+
+       * cplus-type2.c (build_functional_cast): Due to typedefs, we must
+       pull NAME from TYPE.
+
+       * cplus-typeck.c (build_compound_expr): If TREE_VALUE of list is a
+       VAR_DECL, use result of calling `decl_constant_value'.
+
+       * stmt.c (expand_end_except): PREV was uninitialized.
+
+       * stmt.c (expand_exit_except): New function, like
+       `expand_exit_loop'.  Used to explicitly exit an except contour.
+       * cplus-parse.y,cplus-except.c: Replace calls to
+       `expand_exit_something' with calls to `expand_exit_except'.
+       * cplus-decl.c (start_function): If FLAG_HANDLE_EXCEPTIONS, build
+       an exception contour around the outermost binding level.
+       * cplus-decl.c (finish_function): If FLAG_HANDLE_EXCEPTIONS, clean
+       up that countour after the last binding contour goes away.
+       * stmt.c (in_{try,except}_block): Added LEVEL parameter.
+       * stmt.c (in_exception_handler): Added LEVEL parameter.
+       * cplus-except.c: All callers to `in_try_block' as about level 1
+       instead of immediate level, because outermost try block doesn't
+       really count.
+
+       * cplus-except.c (cplus_expand_end_except): Call abort if catching
+       unhandled exception at outermost level.
+
+Tue Nov 28 06:51:48 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-except.c (expand_cplus_raise): Interface changed to take
+       third parameter which is the already-constructed object to be
+       raised, allowing `expand_cplus_reraise' to call this function.
+
+       * cplus-parse.y (try RERAISE raise_identifiers): Actually
+       implement this now.
+       * cplus-except.c (expand_cplus_reraise): Ditto.
+
+       * cplus-decl.c (init_decl_processing): Initialize LANG_NAME_C and
+       LANG_NAME_CPLUSPLUS.  Initialize CURRENT_LANG_NAME to LANG_NAME_C.
+       * cplus-class.c (init_class_processing): Initialization of
+       LANG_NAME_{C,CPLUSPLUS} was too late here.
+
+       * cplus-decl.c (duplicate_decls): If NEWDECL is a FUNCTION_DECL,
+       and it was the last object allocated on the permanent_obstack, cut
+       the permanent_obstack back to NEWDECL, since we have OLDDECL.
+
+       @ The following three changes are conditional on actually defining
+       LANG_DECL_PERMANENT in cplus-tree.h.  It is currently not defined
+       becuase a good solution for saving lang_decls might require more
+       space than the space that could be reclaimed.
+
+       @ cplus-tree.h (lang_decl): New bit LANG_DECL_PERMANENT says if
+       the lang_decl was allocated on the permanent_obstack.
+       @ cplus-lex.c (build_lang_decl):  Set it if appropriate.  New
+       variable FREE_LANG_DECL_CHAIN holds previously freed LANG_DECLs.
+       @ cplus-decl.c (duplicate_decls):  Add the lang_decl of the old
+       decl to FREE_LANG_DECL_CHAIN if it was allocated on the
+       permanent_obstack.
+
+       * cplus-decl.c (duplicate_decls): Preserve DECL_LANGUAGE when
+       NEWDECL is a definition.
+       * cplus-decl.c (start_function): Don't set DECL_LANGUAGE here, now
+       that it is properly handled in `duplicate_decls'.  Also, set
+       DECL_OVERLOADED (DECL1) from DECL_OVERLOADED (OLDDECL).
+
+Mon Nov 27 06:30:53 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-method.c (dump_init): Argument to `dump_type' was missing
+       in SAVE_EXPR case.
+
+       * cplus-class.c (compute_conversion_costs): While it is probably
+       an error to permit a call from a const member function to a
+       non-const member function, cfront seems to do it, grudginly.
+       Change this function to make this conversion cost the heaviest of
+       built-in conversion costs, to give behavior that matches cfront.
+       This can easily be changed back to error-giving behavior.
+       * cplus-class (build_method_call): Give warning if calling to
+       non-const member function from const member function.
+
+       * cplus-method.c,cplus-class.c: Change name of
+       `do_actual_overload' to `build_overload_call', and move the
+       function from cplus-method.c to cplus-class.c.  Also, rewrite
+       slightly to call `build_decl_overload', removing duplicated code.
+       * cplus-typeck.c (build_x_function_call): Change the name of
+       called function.
+
+       * cplus-tree.c (hash_tree_cons): Typo--set TREE_VIA_PUBLIC twice,
+       instead of TREE_VIA_PUBLIC and TREE_VIA_VIRTUAL.
+
+       * cplus-decl.c (finish_decl): It is INIT, and not
+       DECL_INITIAL (DECL) which holds the real value of DECL's
+       initializer.  We need INIT's value for `complete_array_type' to do
+       its job.
+
+       * expr.c (save_noncopied_parts): Deal with case of having
+       `assign_stack_local' return an invalid memory reference.
+
+       * cplus-typeck.c (build_component_ref): 11/26 fix was almost
+       right, but called `value_member' in first case where should have
+       called `assoc_value'.
+
+       * cplus-init.c (expand_vec_delete): Lines were reversed in
+       multi-dimensional array code.
+
+       * version.c: Test release version 1.36.2-
+
+       * integrate.c (expand_inline_function): Bug in use of
+       CONST_EQUIV_MAP did not work correctly in the presence of loops
+       for variables initialized in first basic block but modified within
+       a loop body.
+
+Sun Nov 26 17:11:08 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-init.c (build_new): Handle case when TRUE_TYPE gets
+       ERROR_MARK_NODE, such as when the size expression for an ARRAY_REF
+       is ERROR_MARK_NODE.
+
+       * cplus-type2.c (digest_init): Catch case where ELEMENT is
+       ERROR_MARK_NODE, which avoids calling `comptypes' with
+       ERROR_MARK_NODE as our type (recall that TREE_TYPE (ERROR_MARK_NODE)
+       is ERROR_MARK_NODE, not NULL_TREE).
+
+       * cplus-typeck.c (build_component_ref): Forgot to pull offset from
+       association of type once we found the field!  This causes fields
+       in two separate baseclasses to overlap when referenced from a
+       class deriving from the baseclasses.
+
+       * cplus-parse.y (primary, primary_no_id): Recognize
+       `SCOPE operator_name'.
+
+       * cplus-decl.c (grok_reference_init): Code to permit references to
+       arrays was somehow missing.  Also, in the case where DECL is
+       TREE_STATIC and the initializer is TREE_LITERAL, no need to call
+       `expand_static_init'.
+
+       * cplus-tree.h [DECL_OVERLOADED]: User `overloaded_attr' in
+       lang_decl to distinguish overloaded functions from nonoverloaded
+       ones.
+       * cplus-tree.h [DECL_EXTERNAL]: Use TREE_LANG_FLAG_1 instead of
+       TREE_LANG_FLAG_3.  The latter was used for TREE_PRIVATE.
+
+       * cplus-init.c (expand_vec_delete): Handle multi-dimensional
+       arrays.
+
+       * cplus-decl.c (duplicate_decls): Copying of DECL_IN_AGGR_P bit
+       was backwards.
+       * cplus-decl.c (start_decl): And need to turn off DECL_IN_AGGR_P
+       when seeing this decl in non-aggr context.  Also, clear
+       TREE_EXTERNAL if DECL_EXTERNAL is not set.
+
+       * cplus-decl.c (grok_reference_init): Code split from
+       `finish_decl' for modularity.
+
+Sat Nov 25 06:29:08 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-decl.c (grokdeclarator): Was incorrectly rejecting
+       class-local typedefs which had things like RID_LONG (thought they
+       were storage class specifiers).
+
+       * cplus-method.c (report_type_mismatch): Corrected error
+       introduced by making INLINE_BUFFER non-static.
+
+       * cplus-tree.c (build_exception_variant): Correctly handle case
+       when RAISES is NULL_TREE.
+
+       * cplus-except.c (lookup_exception_object): Switch to
+       permanent_obstack when implicitly declaring an exception object.
+
+       * cplus-class.c (instantiate_type): Handle TREE_LIST of
+       FUNCTION_DECL in addition to TREE_LIST of TREE_LIST of
+       FUNCTION_DECL.  The former is what a BASELINK in disguise.
+
+       * cplus-decl.c (grokdeclarator): Don't crash if TYPE ==
+       ERROR_MARK_NODE when DECL_CONTEXT == FIELD.  Happens when array
+       size is undefined, for example.
+
+Fri Nov 24 16:04:44 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-search.c (get_baselinks): When we get to end of search
+       (i.e., TYPE has only one basetype), propagate BASELINKs.
+
+       * cplus-decl.c (shadow_tag): Missing call to
+       `end_exception_decls'.
+
+Tue Nov 21 23:40:57 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-method.c: Change from static allocation of INLINE_BUFFER
+       to dynamic, saving 8k static data size.
+       * cplus-method.c (fndecl_as_string): Initialize INLINE_BUFFER
+       always from BUF.
+       * cplus-class.c, cplus-tree.c: Callers of `fndecl_as_string'
+       changed.
+
+Mon Nov 20 20:56:49 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-class.c (build_method_call): Don't check visibility on
+       calls to wrappers.
+
+       * cplus-tree.h: Delete bitfields HAS_WRAPPER and NEEDS_WRAPPER.
+       Add field for TYPE_WRAP_TYPE.
+       * cplus-decl.c, cplus-class.c: Set fields accordingly
+       * cplus-class.c (build_method_call): Call `get_wrapper' if we need
+       to be wrapping a function call.
+       * cplus-search.c (get_wrapper): Implement this function.
+
+Sat Nov 18 05:16:22 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-lex.c (check_newline): Recognize (but apologize about)
+       #pragma newworld.
+
+       * cplus-method.c (build_decl_overload): Compact encoding for
+       member functions ifndef LONGERNAMES.
+       * cplus-dem.c (cplus_demangle,do_args): Deal with different
+       encoding ifndef LONGERNAMES.
+
+       * cplus-tree.c (list_has_lookup_or_cons): New function optimizes
+       most common case in parsing.
+       * cplus-parse.y: Call in in place of `hash_tree_chain (_, NULL_TREE)'.
+
+       * cplus-parse.y, cplus-lex.c: Gather statistics on tokens and
+       reductions.
+
+       * cplus-class.c (instantiate_type): Forgot to check COMPLAIN
+       before complaining.
+
+       * cplus-init.c (build_new,build_vec_delete): Call
+       do_pending_stack_adjust before building and after finalizing
+       RTL_EXPR.  Also removed bogus construct
+
+                  emit_insn (gen_sequence ());
+
+       which was causing circular rtl to be output.  (Thanks to rms for
+       identifying the problem!).
+       * cplus-type2.c (make_merged_ref): Same change.
+       * cplus-parse.y (except_stmts): Same change.
+
+       * cplus-init.c (get_member_function): Wrap a SAVE_EXPR around the
+       address of MEMBER.
+
+Fri Nov 17 20:11:19 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-type2.c (store_init_value)
+
+       * cplus-dem.c (do_type): Initialize NON_EMPTY.
+
+Tue Nov 14 00:19:31 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-init.c (build_vec_delete): Call `emit_note' in case no
+       code is emitted by `expand_vec_delete'.
+
+       * cplus-parse.y (operator_name): If the operator name is
+       erroneous, build something signifying that fact, rather than just
+       returning NULL_TREE.
+
+       * cplus-typeck.c (target_type): New function.  Returns the target
+       type of TYPE.
+       * cplus-decl.c (finish_decl): Call `target_type' to figure out the
+       built-in type that DECL is based on.  If we find it to be
+       ANON_AGGRNAME_P, then we must change it, since nothing else will,
+       and the compiler will go into loops if expand_inline_function trys
+       to push it back into the environment.
+
+       * cplus-parse.y (primary): Need to do `lookup_name' on operator
+       names that come through here.
+
+       * stmt.c (expand_end_try): Jump to after label to avoid falling
+       through into default handler.
+
+       * cplus-decl.c (define_label): Don't complain about jumps past
+       initialziation of compiler-generated temporaries.  They can't be
+       accessed, and by the time we get to the label, they should be
+       cleaned up.
+
+Mon Nov 13 02:34:58 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-init.c (get_member_function): If EXP_ADDR was something
+       hairy (like a CALL_EXPR), make EXP indirect from it.  This saves
+       writing out twice the code (once for each branch of the
+       conditional).
+
+       * cplus-dem.c (cplus_demangle): Recognize virtual function tables.
+       * Also, handle operator* and operator->().
+
+       * cplus-class.c (finish_struct): Don't warn about all class
+       members being private if there are public baseclasses.
+
+       * cplus-decl.c (grokdeclarator): Catch case where friend function
+       is declared with method qualifiers.
+
+       * cplus-typeck.c (commontype): Get the right value for BASETYPE in
+       METHOD_TYPE case.
+
+       * cplus-method.c (build_opfncall): TYPE1 was being initialized too
+       late.
+
+       * cplus-dem.c[USG]: Use this instead of #ifndef sequent.
+
+Sun Nov 12 01:35:08 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * integrate.c (note_integrated): New function.  If insn generated
+       used constants, check that it is legit.  If not, delete it and
+       return zero to caller, indicating that the caller should try
+       again.  If successful, set RTX_INTEGRATED_P.
+
+       * cplus-tree.c (layout_vbasetypes): Use `int' return type to
+       advantage.
+
+       * cplus-init.c (build_delete): Don't abort if TYPE ==
+       ERROR_MARK_NODE.  It can happen.
+
+       * integrate.c: Use "iteration numbering" to propagate constants
+       through inline function expansion.
+
+       * stmt.c: Added exception stmts to nesting stack.
+       * cplus-except.c: Move appropriate stuff out of here.
+
+Sat Nov 11 10:10:59 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * integrate.c: Make `expand_inline_function' smart enough to use
+       constant when safe, and not when not.
+
+       * integrate.c: Merged changes from rms as of today.
+       * varasm.c: Merged changes from rms as of today.
+
+       * cplus-except.c: Use variable TRY_DEPTH to determine whether we
+       are inside a TRY block or not.
+       * cplus-except.c (cplus_expand_{start,end}_try):
+       Increment/decrement that variable.
+       * cplus-except.c (expand_cplus_raise_stmt): If TRY_DEPTH is
+       nonzero, then simply exiting the try block does all the right
+       things.  Otherwise, we must use `longjmp'.
+
+       * cplus-init.c (build_new): Don't use the RTL_EXPR hack for static
+       initializations.
+
+       * ld.c (write_output): Unconditionally remove the old file in case
+       another owns it but user has write permission.
+
+       * cplus-decl2.c (finish_file): Set DECL_PRINT_NAME of file
+       clean/initialization functions to things we might want to print.
+
+Fri Nov 10 19:08:51 1989  Michael Tiemann  (tiemann at arkesden)
+
+       * cplus-tree.h: Get rid of EXCEPTION_LABEL_DECL, no longer needed.
+       Add EXCEPTION_THROW_DECL.  This VAR_DECL is used to determine
+       whether to throw from a binding contour using the exception
+       handling machinery.
+       * cplus-decl.c, cplus-except.c: Changes to adapt to new model.
+
+       * tree.c (build_op_identifier): #if 0 in this file.
+       * cplus-lex.c (build_op_identifier): define this function here.
+       Change interface to take `tree_code' arguments instead of `tree'
+       arguments.  Use memoizing table to preserve previously allocated
+       nodes.
+       * cplus-parse.y, cplus-method.c: Callers changed.
+       * cplus-lex.c (build_operator_fnname): Can't get by on
+       side-effecting an OP_IDENTIFIER's TREE_CODE anymore.  Change
+       interface to pass OP_IDENTIFIER node in as a tree*, and set that.
+       * cplus-decl2.c (grokopexpr): Must also take DECLARATOR in as
+       pointer.
+
+       * cplus-init.c (build_new): After calling `start_sequence', prime
+       the insn pump by calling `emit_note' to emit a NOTE_INSN_DELETED.
+
+Wed Nov  8 15:54:32 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-type2.c (build_functional_cast): Move from cplus-class.c
+       to this file.
+
+       * cplus-class.c (build_functional_cast): Don't assume that
+       TYPE_NAME (TYPE) is a TYPE_DECL; it might be an IDENTIFIER_NODE.
+
+       * gcc.c (main): Print out the name `g++' instead of `gcc' until
+       the merge is complete.
+
+Tue Nov  7 14:56:50 1989  Michael Tiemann  (tiemann at teacake)
+
+       * cplus-init.c (build_new): Initialize RVAL if SOS.
+
+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
+
+