OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [cp/] [ChangeLog-1998] - Rev 711

Go to most recent revision | Compare with Previous | Blame | View Log

Tue Dec 22 15:09:25 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (cvt.o): Depend on toplev.h.

        * cp-tree.h (check_template_shadow, pod_type_p): Add prototypes.

        * cvt.c: Include toplev.h.

        * except.c (get_eh_caught, get_eh_handlers): Hide prototypes and
        definitions.

        * init.c (expand_vec_init): Initialize variable `itype'.

        * lex.c (yyerror): Cast the argument passed to a ctype function to
        an unsigned char.

        * method.c (build_mangled_C9x_name): Wrap prototype and definition
        in "HOST_BITS_PER_WIDE_INT >= 64".

        * typeck.c (build_binary_op): Mark parameter `convert_p' with
        ATTRIBUTE_UNUSED.

1998-12-22  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
        * tree.c (build_exception_variant): Don't crash on empty throw
        specs.

1998-12-18  DJ Delorie  <dj@cygnus.com>

        * cvt.c (convert_to_reference): Check for both error_mark_node
        and NULL_NODE after call to convert_for_initialization.

1998-12-17  Jason Merrill  <jason@yorick.cygnus.com>

        * error.c (interesting_scope_p): New fn.
        (dump_simple_decl): Use it.
        (dump_expr, case CONSTRUCTOR): Force a & for a PMF.
        (dump_expr, case OFFSET_REF): Print ->* if appropriate.

1998-12-16  Mark Mitchell  <mark@markmitchell.com>

        * class.c (resolve_address_of_overloaded_function): Do conversion
        to correct type here, rather than ...
        (instantiate_type): Here.

        * cp-tree.h (DECL_TEMPLATE_PARM_P): New macro.
        (DECL_TEMPLATE_TEMPLATE_PARM_P): Use it.
        (decl_template_parm_p): Remove.
        * decl.c (pushdecl): Don't set DECL_CONTEXT for a template
        parameter.
        * lex.c (do_identifier): Use DECL_TEMPLATE_PARM_P.
        * pt.c (push_inline_template_parms_recursive): Set it.
        (decl_template_parm_p): Remove.
        (check_template_shadow): Use DECL_TEMPLATE_PARM_P.
        (process_template_parm): Set it.

Wed Dec 16 16:33:58 1998  Dave Brolley  <brolley@cygnus.com>

        * lang-specs.h (default_compilers): Pass -MD, -MMD and -MG to cc1plus
        if configured with cpplib.

1998-12-15  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (poplevel): Make sure ns_binding is initialized.

        * decl.c (finish_function): Undo inadvertent change in previous
        patch.

1998-12-14  Mark Mitchell  <mark@markmitchell.com>

        * class.c (pushclass): Tweak handling of class-level bindings.
        (resolve_address_of_overloaded_function): Update pointer-to-member
        handling.
        (instantiate_type): Likewise.
        * cvt.c (cp_convert_to_pointer): Likewise.
        * decl.c (pop_binding): Take the DECL to pop, not just the name.
        Deal with `struct stat' hack.
        (binding_level): Add to documentation.
        (push_binding): Clear BINDING_TYPE.
        (add_binding): New function.
        (push_local_binding): Use it.
        (push_class_binding): Likewise.
        (poplevel): Adjust calls to pop_binding.
        (poplevel_class): Likewise.
        (pushdecl): Adjust handling of TYPE_DECLs; add bindings for hidden
        declarations to current binding level.
        (push_class_level_binding): Likewise.
        (push_overloaded_decl): Adjust handling of OVERLOADs in local
        bindings.
        (lookup_namespace_name): Don't crash when confronted with a
        TEMPLATE_DECL.
        (lookup_name_real): Do `struct stat' hack in local binding
        contexts.
        (build_ptrmemfunc_type): Adjust documentation.
        (grokdeclarator): Don't avoid building real array types when
        processing templates unless really necessary.
        (finish_method): Adjust calls to pop_binding.
        * decl2.c (reparse_absdcl_as_expr): Recursively call ourselves,
        not reparse_decl_as_expr.
        (build_expr_from_tree): Deal with a template-id as the function to
        call in a METHOD_CALL_EXPR.
        * pt.c (convert_nontype_argument): Tweak pointer-to-member handling.
        (maybe_adjust_types_For_deduction): Don't do peculiar things with
        METHOD_TYPEs here.
        (resolve_overloaded_unification): Handle COMPONENT_REFs.  Build
        pointer-to-member types where necessary.
        * tree.c (build_cplus_array_type_1): Don't avoid building real
        array types when processing templates unless really necessary.
        (build_exception_variant): Compare the exception lists correctly.

1998-12-13  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.def (CPLUS_BINDING): Update documentation.
        * cp-tree.h (LOCAL_BINDING_P): New macro.
        (lang_identifier): Rename local_value to bindings.
        (tree_binding): Make `scope' of type `void*', not `tree'.
        (BINDING_SCOPE): Update documentation.
        (IDENTIFIER_LOCAL_VALUE): Remove.
        (IDENTIFIER_CLASS_VALUE): Document.
        (IDENTIFIER_BINDING): New macro.
        (IDENTIFIER_VALUE): Likewise.
        (TIME_IDENTIFIER_TIME): Likewise.
        (TIME_IDENTIFIER_FILEINFO): Likewise.
        (IMPLICIT_TYPENAME_P): Likewise.
        (set_identifier_local_value): Remove.
        (push_local_binding): New function.
        (push_class_binding): Likewise.
        * class.c (pushclass): Update comments; use push_class_binding.
        * decl.c (set_identifier_local_value_with_scope): Remove.
        (set_identifier_local_value): Likewise.
        (push_binding): New function.
        (pop_binding): Likewise.
        (binding_level): Update documentation.  Remove shadowed.
        (BINDING_LEVEL): New macro.
        (free_binding_nodes): New variable.
        (poplevel): Adjust for new name-lookup scheme.  Don't mess up
        BLOCK_VARs when doing for-scope extension.  Remove effectively
        dead code.
        (pushlevel_class): Tweak formatting.
        (poplevel_class): Adjust for new name-lookup scheme.
        (print_binding_level): Likewise.
        (store_bindings): Likewise.
        (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
        (push_class_level_binding): Likewise.
        (push_overloaded_decl): Update comments.  Adjust for new
        name-lookup scheme.
        (lookup_name_real): Likewise.
        (lookup_name_current_level): Likewise.
        (cp_finish_decl): Likewise.
        (require_complete_types_for_parms): Likewise.  Remove misleading
        #if 0'd code.
        (grok_parms): Likewise.  Don't call
        require_complete_types_for_parms here.
        (grok_ctor_properties): Don't treat templates as copy
        constructors.
        (grop_op_properties): Or as assignment operators.
        (start_function): Document.  Adjust for new name-lookup scheme.
        (finish_function): Likewise.
        * decl2.c (do_local_using_decl): Use push_local_binding.
        * lex.c (begin_definition_of_inclass_inline): New function, split
        out from ...
        (do_pending_inlines): Here, and ...
        (process_next_inline): Here.
        (get_time_identifier): Use TIME_IDENTIFIER_* macros.
        (init_filename_times): Likewise.
        (extract_interface_info): Likewise.
        (ste_typedecl_interface_info): Likewise.
        (check_newline): Likewise.
        (dump_time_statistics): Likewise.
        (handle_cp_pragma): Likewise.
        (do_identifier): Adjust for new name-lookup scheme.
        * parse.y (function_try_block): Return ctor_initializer_opt value.
        (fndef): Use it.
        (fn.defpen): Pass appropriate values to start_function.
        (pending_inline): Use functor_try_block value, and pass
        appropriate values to finish_function.
        * pt.c (is_member_template): Update documentation; remove handling
        of FUNCTION_DECLs.  As per name, this function should deal only in
        TEMPLATE_DECLs.
        (decl_template_parm_p): Change name of olddecl parameter to decl.
        (check_template_shadow): Adjust for new name-lookup scheme.
        (lookup_template_class): Likewise.
        (tsubst_decl): Tweak so as not to confuse member templates with
        copy constructors and assignment operators.
        (unify): Handle UNION_TYPEs.
        * ptree.c (print_lang_identifier): Adjust for new name-lookup scheme.
        (lang_print_xnode): Adjust for new name-lookup scheme.
        * typeck.c (mark_addressable): Likewise.
        (c_expand_return): Likewise.

1998-12-08  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokdeclarator): Allow field with same name as class
        in extern "C".

        * decl.c (lookup_name_real): Don't limit field lookup to types.
        * class.c (check_member_decl_is_same_in_complete_scope): No error
        if icv and x are the same.
        * lex.c (do_identifier): Tweak error message.

1998-12-10  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (start_enum): Use push_obstacks, not
        end_temporary_allocation.
        (finish_enum): Call pop_obstacks.

1998-12-10  Mark Mitchell  <mark@markmitchell.com>

        * class.c (instantiate_type): Return error_mark_node rather than
        junk.

1998-12-09  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (most_specialized_instantiation): New function.
        (print_candidates): Likewise.
        * class.c (validate_lhs): Remove.
        (resolve_address_of_overloaded_function): New function, split out
        and then substantially reworked, from ...
        (instantiate_type): Use it.  Simplify.
        * cvt.c (convert_to_reference): Complain when caller has indicated
        that's the right thing to do.  Don't crash if instantiate_type
        fails.
        * pt.c: Substitute `parameters' for `paramters' throughout.
        (print_candidates): Don't make it static.
        (most_specialized_instantiation): Split out from ...
        (most_specialized): Here.

Wed Dec  9 15:33:01 1998  Dave Brolley  <brolley@cygnus.com>

        * lex.c (lang_init_options): Initialize cpplib.
        * decl2.c (parse_options,cpp_initialized): Removed.
        (lang_decode_option): Move initialization of cpplib to
        lang_init_options.

1998-12-09  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as
        well as the TYPE_DECL, when a typedef name is assigned to a
        previously anonymous type.

1998-12-08  Andrew MacLeod  <amacleod@cygnus.com>

        * cp/except.c (call_eh_info): Use __start_cp_handler instead of
        __cp_eh_info for getting the eh info pointer.  Add table_index to
        field list.
        (push_eh_cleanup): Don't increment 'handlers' data field.
        (process_start_catch_block): Don't set the 'caught' field.

        * cp/exception.cc (CP_EH_INFO): New macro for getting the
        exception info pointer within library routines.
        (__cp_eh_info): Use CP_EH_INFO.
        (__start_cp_handler): Get exception info pointer, set caught field,
        and increment the handlers field.  Avoids this being done by handlers.
        (__uncatch_exception, __check_eh_spec): Use CP_EH_INFO macro.
        (uncaught_exception): Use CP_EH_INFO macro.

Tue Dec  8 10:48:21 1998  Jeffrey A Law  (law@cygnus.com)

        * Make-lang.in (cxxmain.o): Depend on $(DEMANGLE_H), not demangle.h

Mon Dec  7 17:56:06 1998  Mike Stump  <mrs@wrs.com>

        * lex.c (check_newline): Add support for \ as `natural'
        characters in file names in #line to be consistent with #include
        handling.  We support escape processing in the # 1 "..." version of
        the command.  See also support in cp/lex.c.

1998-12-07  Zack Weinberg  <zack@rabi.phys.columbia.edu>

        * cp/decl2.c: s/data/opts/ when initializing cpp_reader
        structure.

1998-12-07  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (build_typename_type): Set DECL_ARTIFICIAL.

        * error.c (dump_simple_decl): Also print namespace context.
        (dump_function_decl): Likewise.

        * decl2.c (ambiguous_decl): Don't print old value if it's
        error_mark_node.

        * decl.c (lookup_name_real): Fix handling of local types shadowed
        by a non-type decl.  Remove obsolete code.
        * cp-tree.h (DECL_FUNCTION_SCOPE_P): New macro.

        * lang-options.h: Add -fpermissive.
        * decl2.c: Likewise.
        * cp-tree.h: Add flag_permissive.
        * decl.c (init_decl_processing): If neither -fpermissive or -pedantic
        were specified, set flag_pedantic_errors.
        * call.c (build_over_call): Turn dropped qualifier messages
        back into pedwarns.
        * cvt.c (convert_to_reference): Likewise.
        * typeck.c (convert_for_assignment): Likewise.

1998-12-05  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (coerce_new_type): Use same_type_p.
        (coerce_delete_type): Likewise.

        * call.c (check_dtor_name): Return 1, not error_mark_node.

1998-12-04  Jason Merrill  <jason@yorick.cygnus.com>

        * lex.c (handle_cp_pragma): Disable #pragma interface/implementation
        if MULTIPLE_SYMBOL_SPACES.

        * pt.c (check_template_shadow): New fn.
        * decl2.c (grokfield): Use it.
        * decl.c (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
        (start_method): Likewise.
        (xref_tag): Don't try to use 't' if we're defining.

        * call.c (check_dtor_name): Just return an error_mark_node.
        * pt.c (lookup_template_class): Complain about using non-template here.
        * parse.y (apparent_template_type): Not here.

        * pt.c (check_explicit_specialization): Complain about specialization
        with C linkage.

        * lang-options.h: Add -f{no-,}implicit-inline-templates.

        * pt.c (convert_nontype_argument): Don't assume that any integer
        argument is intended to be a constant-expression.

1998-12-03  Mark Mitchell  <mark@markmitchell.com>

        * class.c (handle_using_decl): Fix comment.  Don't lookup
        constructors in base classes.
        (validate_lhs): Fix typo in comment.
        * search.c (lookup_field_1): Don't return a USING_DECL.

        * cp-tree.h (DECL_ACCESS): Improve documentation.

        * decl.c (expand_static_init): Don't set the initialization-done
        flag until the initialization is done.

1998-12-02  Mark Mitchell  <mark@markmitchell.com>

        * decl2.c (validate_nonmember_using_decl): Complain about using
        declarations for class members.

1998-11-29  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (process_init_constructor): Use same_type_p.

        * decl.c (check_tag_decl): Don't warn about null decl inside a
        class.

        * pt.c (unify, case OFFSET_TYPE): Pass down 'strict' rather than
        UNIFY_ALLOW_NONE.
        (convert_nontype_argument): Use TYPE_PTRMEMFUNC_FN_TYPE.
        (resolve_overloaded_unification): Strip baselinks.

Fri Nov 27 13:07:23 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * g++spec.c: Don't prototype xmalloc.

1998-11-25  Jason Merrill  <jason@yorick.cygnus.com>

        * except.c (expand_throw): Use TYPE_PTR_P to check for pointers.

        * decl.c (check_tag_decl): Do complain about null friend decl at
        file scope.

1998-11-25  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

        * lex.c (make_lang_type): Clear the whole struct lang_type, not
        only the first multiple of sizeof (int).

1998-11-24  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (start_decl): An explicit specialization of a static data
        member is only a definition if it has an initializer.

        * except.c (expand_throw): Use cp_finish_decl for the throw temp.
        * cvt.c (build_up_reference): Pass DIRECT_BIND down into
        cp_finish_decl.
        * init.c (expand_default_init): Check for DIRECT_BIND instead of
        DECL_ARTIFICIAL.

        * call.c (build_over_call): Use build_decl.

        * except.c (expand_throw): Just use convert, not
        build_reinterpret_cast.

        * lex.c (handle_generic_pragma): Use token_buffer.

        * decl.c (check_tag_decl): Don't complain about null friend decl.

1998-11-24  Dave Pitts  <dpitts@cozx.com>

        * Make-lang.in (DEMANGLER_PROG): Move the output arguments to the
        first position.
        * lex.c (check_newline): Use ISALPHA.
        (readescape): Use ISGRAPH.
        (yyerror): Use ISGRAPH.

1998-11-24  Nathan Sidwell  <nathan@acm.org>

        * search.c (get_abstract_virtuals): Do not use initial
        CLASSTYPE_ABSTRACT_VIRTUALS.
        * typeck2.c (abstract_virtuals_error): Show location of abstract
        declaration.
        * call.c (build_new_method_call): Use
        CLASSTYPE_ABSTRACT_VIRTUAL, rather than recalculate.
        * class.c (finish_struct_bits): Don't bother working out whether
        get_abstract_virtuals will do anything, just do it.

1998-11-24  Graham  <grahams@rcp.co.uk>

        * typeck.c (build_component_ref): Remove unused statement.

1998-11-24  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (add_method): Catch invalid overloads.

        * class.c (add_method): Build up OVERLOADs properly for conversion ops.
        * search.c (lookup_conversions): Handle getting real OVERLOADs.
        (add_conversions): Likewise.  Revert last change.
        * call.c (add_conv_candidate): Pass totype to add_candidate instead
        of fn.  Don't add a new candidate if the last one was for the same
        type.
        (print_z_candidates): Handle getting a type as a function.
        (joust): If we got two conversion candidates to the same type,
        just pick one.
        (build_object_call): Lose 'templates'.
        (build_user_type_conversion_1): Handle getting real OVERLOADs.

1998-11-23  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (process_init_constructor): If there are elements
        that don't have initializers and they need to have constructors
        run, supply them with initializers.

        * class.c (finish_struct_1): A class with a 0-width bitfield is
        still empty.

1998-11-23  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (instantiate_class_template): Don't try to figure out what
        specialization to use for a partial instantiation.  Correct
        typos in a couple of comments.  Avoid calling uses_template_parms
        multiple times.

1998-11-23  Benjamin Kosnik  <bkoz@cygnus.com>

        * method.c (process_overload_item): Add call to
        build_mangled_C9x_name for intTI_type_nodes.
        (build_mangled_C9x_name): Add prototype, define.
        * decl.c (init_decl_processing): Add names for
        TImode_type_node.

1998-11-23  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (named_class_head): Update CLASSTYPE_DECLARED_CLASS.

        * class.c (finish_struct_1): Set things up for 0-width bitfields
        like we do for others.

        * decl.c (check_tag_decl): New fn.
        (shadow_tag): Split out from here.
        * decl2.c (grok_x_components): Call it.

1998-11-22  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c: Lose warn_about_return_type.
        (grokdeclarator): Always complain about implicit int, except for
        `main () { ... }'.

        * decl.c (tag_name): New fn.
        (xref_tag): Complain about using typedef-name after class-key.

        * init.c (expand_vec_init): Also keep going if from_array.

        * tree.c (is_overloaded_fn): Also handle the output of
        build_offset_ref.

        * decl.c (grokdeclarator): Use constructor_name when comparing
        field name against enclosing class.
        * class.c (finish_struct_anon): Likewise.

1998-11-22  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (poplevel): Remove code to handle KEEP == 2.
        (finish_function): Don't confuse BLOCK-order when
        processing a destructor.

1998-11-21  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (require_complete_types_for_parms): Call layout_decl
        after we've completed the type.

1998-11-21  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (validate_nonmember_using_decl): Allow using templates
        from the global namespace.

1998-11-21  Jason Merrill  <jason@yorick.cygnus.com>

        Handle specifying template args to member function templates.
        * tree.c (build_overload): Always create an OVERLOAD for a template.
        * search.c (add_conversions): Handle finding an OVERLOAD.
        * decl2.c (check_classfn): Likewise.
        * lex.c (identifier_type): See through a baselink.
        * parse.y (do_id): Don't call do_identifier if we got a baselink.
        * class.c (instantiate_type, case TREE_LIST): Recurse.

        * decl.c (grokdeclarator): Allow a boolean constant for array
        bounds, odd as that sounds.

        * pt.c (unify): Be more strict about non-type parms, except for
        array bounds.
        (UNIFY_ALLOW_INTEGER): New macro.

1998-11-19  Manfred Hollstein  <manfred@s-direktnet.de>

        * Make-lang.in (mandir): Replace all uses of $(mandir) by $(man1dir).

1998-11-19  Jason Merrill  <jason@yorick.cygnus.com>

        * semantics.c (begin_class_definition): Call
        maybe_process_partial_specialization before push_template_decl.
        Don't call push_template_decl for a specialization.
        * search.c (lookup_field): Do return a member template class.
        * decl2.c (handle_class_head): Handle member template classes.

        * decl.c (grokdeclarator): A parm type need not be complete.

        * pt.c (convert_nontype_argument): Fix thinko.

1998-11-18  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (PTRMEM_CST_CLASS): Fix typo.
        (global_delete_fndecl): New variable.
        * decl.c (global_delete_fndecl): Define it.
        (init_decl_processing): Set it.
        * init.c (build_builtin_delete_call): Use it.
        * tree.c (mapcar): Recursively call mapcar for the type of EXPR
        nodes.

1998-11-18  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (cplus_expand_expr_stmt): Always complain about unresolved
        type.

        * tree.c (lvalue_p_1): An INDIRECT_REF to a function is an lvalue.
        * call.c (build_object_call): Also support references to functions.
        * typeck.c (convert_for_initialization): Don't decay a function
        if the target is a reference to function.

        * search.c (add_conversions): Get all the overloads from a class.

        * decl.c (grok_ctor_properties): Complain about any constructor
        that will take a single arg of the class type by value.

        * typeck2.c (build_functional_cast): Can't create objects of
        abstract classes this way.
        * cvt.c (ocp_convert): Likewise.

        * decl.c (grokfndecl): Member functions of local classes are not
        public.

1998-11-18  Mark Mitchell  <mark@markmitchell.com>

        * Make-lang.in (cc1plus): Add dependency on hash.o.

1998-11-18  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (get_abstract_virtuals): Complain about virtuals with
        no final overrider.
        * typeck2.c (abstract_virtuals_error): Remove handling for virtuals
        with no final overrider.
        * class.c (override_one_vtable): Don't set DECL_ABSTRACT_VIRTUAL_P
        on virtuals with no final overrider.

        * lex.c (reinit_parse_for_block): Add a space after the initial ':'.

        * class.c (finish_struct_1): Don't remove zero-width bit-fields until
        after layout_type.

        * friend.c (do_friend): Don't set_mangled_name_for_decl.

        * class.c (finish_struct_anon): Complain about non-fields.
        * decl2.c (build_anon_union_vars): Likewise.

        * decl.c (grokdeclarator): Normal data members can't have the same
        name as the class, either.
        * class.c (finish_struct_anon): Neither can members of an
        anonymous union.

1998-11-17  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
        (TYPE_BINFO): Likewise.
        (IS_AGGR_TYPE): Tweak.
        (SET_IS_AGGR_TYPE): New macro.
        (CLASS_TYPE_P): Tweak.
        (lang_type): Group mark bitfields together.  Remove linenum.
        (CLASSTYPE_SOURCE_LINE): Remove macro.
        (CLASSTYPE_MARKED_N): New macro.
        (SET_CLASSTYPE_MARKED_N): Likewise.
        (CLEAR_CLASSTYPE_MARKED_N): Likewise.
        (CLASS_TYPE_MARKED_*): Use them.
        (SET_CLASSTYPE_MARKED_*): Likewise.
        (CLEAR_CLASSTYPE_MARKED_*): Likewise.
        (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO): Likewise.
        (TYPE_TEMPLATE_INFO): Handle TEMPLATE_TEMPLATE_PARMs as well.
        (TYPENAME_TYPE_FULLNAME): Use TYPE_BINFO rather than CLASSTYPE_SIZE.
        * class.c (class_cache_obstack): New variable.
        (class_cache_firstobj): Likewise.
        (finish_struct): Don't set CLASSTYPE_SOURCE_LINE.
        (pushclass): Free the cache, when appropriate.
        (popclass): Tidy.
        (maybe_push_cache_obstack): Use class_cache_obstack.
        * decl.c (include hash.h).
        (typename_hash): New function.
        (typename_compare): Likewise.
        (build_typename_type): Check the hash table to avoid creating
        duplicates.
        (build_ptrmemfunc_type): Use SET_IS_AGGR_TYPE.
        (grokdeclarator): Use CLASS_TYPE_P.
        (xref_basetypes): Likewise.
        (start_function): Likewise.  Don't put current_class_ref on the
        permanent obstack.
        * error.c (dump_type_real): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO
        and TYPE_TI_ARGS.
        * lex.c (note_got_semicolon): Use CLASS_TYPE_P.
        (make_lang_type): Don't create TYPE_LANG_SPECIFIC and associated
        fields for types other than class types.  Do clear TYPE_ALIAS_SET
        for types other than class types, though.
        * method.c (build_overload_identifier): Use CLASS_TYPE_P and
        TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        * pt.c (process_template_parm): Don't set
        CLASSTYPE_GOT_SEMICOLON.
        (lookup_template_class): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        Coerce arguments on the momentary obstack.
        (for_each_template_parm): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        (instantiate_class_template): Calculate template arguments on the
        momentary obstack.  Tidy.
        (tsubst_template_arg_vector): Use make_temp_vec.
        (tsubst_aggr_type): Put template arguments on the momentary
        obstack.
        (tsubst_decl): Likewise.
        (tsubst): Copy the array bounds index to the permanent obstack
        before building index types.  Use new macros.
        (unify): Use new macros.
        (do_type_instantiation): Likewise.
        * search.c (lookup_fnfields_1): Use new macros.
        (dfs_pushdecls): Build envelopes on the cache obstack.
        (dfs_compress_decls): Use new macros.
        (push_class_decls): Build on the cache obstack.
        * semantics.c (finish_typeof): Don't set CLASSTYPE_GOT_SEMICOLON.
        * sign.c (build_signature_pointer_or_reference_type): Use
        SET_IS_AGGR_TYPE.
        * tree.c (make_binfo): Check CLASS_TYPE_P.
        (copy_template_template_parm): Adjust.
        (make_temp_vec): Use push_expression_obstack.
        * typeck.c (complete_type): Use new macros.
        (comptypes): Likewise.

1998-11-17  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst): Add diagnostics for invalid array, reference
        and pointer to member types.

1998-11-16  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (my_friendly_abort): Don't fatal twice in a row.

        * typeck.c (c_expand_start_case): Use build_expr_type_conversion.
        Simplify.

        * parse.y (structsp): Fix cut-and-paste error.

        * init.c (build_new): Complain about non-integral size.

        * parse.y (unary_expr): Complain about defining types in sizeof.

        * typeck.c (expr_sizeof): Complain about sizeof an overloaded fn.

        * rtti.c (build_x_typeid): Complain about typeid without
        including <typeinfo>.
        (get_typeid): Likewise.  Complain about typeid of incomplete type.
        (get_tinfo_fn_dynamic): Likewise.
        (get_typeid_1): Not static anymore.
        * except.c (build_eh_type_type): Use get_typeid_1.

        * rtti.c (build_dynamic_cast_1): Give errors for dynamic_cast to
        ambiguous or private bases.  Fix warning for reference cast.

1998-11-16  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (DECL_TEMPLATE_INSTANTIATED): New macro.
        * decl.c (duplicate_decls): Remove special-case code to deal with
        template friends, and just do the obvious thing.
        * pt.c (register_specialization): Tweak for clarity, and also to
        clear DECL_INITIAL for an instantiation before it is merged with a
        specialization.
        (check_explicit_specialization): Fix indentation.
        (tsubst_friend_function): Handle both definitions in friend
        declaration and outside friend declarations.
        (tsubst_decl): Don't clear DECL_INITIAL for an instantiation.
        (regenerate_decl_from_template): Tweak accordingly.
        (instantiate_decl): Likewise.

1998-11-16  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (cplus_expand_expr_stmt): Promote warning about naked
        member function reference to error.
        * cvt.c (ocp_convert): Complain about converting an overloaded
        function to void.

        * init.c (build_offset_ref): Just return a lone static member
        function.

        * decl.c (cp_finish_decl): Only complain about real CONSTRUCTORs,
        not internal ones.

        * typeck.c (build_binary_op_nodefault): Improve error handling.

        * decl.c (grokfndecl): Complain about making 'main' a template.

        * typeck.c (string_conv_p): Don't convert from wchar_t[] to char*.

        * call.c (build_method_call): Handle a BIT_NOT_EXPR around a
        TYPE_DECL in a template.

1998-11-15  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (my_friendly_abort): Add URL in the other case, too.

        * decl.c (struct cp_function): Add named_label_uses.
        (push_cp_function_context): Save it.
        (pop_cp_function_context): Restore it.
        (define_label): Also complain about jumping into the scope of
        non-POD objects that don't have constructors.
        * tree.c (pod_type_p): New fn.

        * pt.c (instantiate_class_template): Clear TYPE_BEING_DEFINED sooner.
        * rtti.c (synthesize_tinfo_fn): Call import_export_decl here.
        (get_tinfo_fn): Not here.
        * repo.c (repo_get_id): Abort if we get called for an incomplete
        type.

1998-11-13  Mark Mitchell  <mark@markmitchell.com>

        * except.c (expand_throw): Make sure first argument to
        __cp_push_exception is of type `void*' to avoid spurious error
        messages.

1998-11-11  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (try_one_overload): Take orig_targs again.  Only check for
        mismatches against them; we don't care what a previous call found.
        (resolve_overloaded_unification): Adjust.

        * search.c (lookup_field): Don't return anything for a non-type
        field from a dependent type.
        * decl.c (grokdeclarator): Resolve SCOPE_REFs of the current class
        in an array declarator.
        (start_decl): Push into the class before looking for the field.

1998-11-08  Mark Mitchell  <mark@markmitchell.com>

        * method.c (build_overload_value): Handle REFERENCE_TYPE.

1998-11-08  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (grokdeclarator): Allow namespace-scoped members if they
        are friends.

1998-11-08  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst_decl): Don't mess with the global value of an
        un-mangled DECL_ASSEMBLER_NAME.

1998-11-03  Christopher Faylor  <cgf@cygnus.com>

        * decl.c (init_decl_processing): Remove CYGWIN conditional
        since CYGWIN is now able to deal with trapping signals.

Sat Nov  7 15:48:02 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * cp-tree.h: Don't include gansidecl.h.
        * exception.cc: Include gansidecl.h (since we don't include config.h)
        * g++spec.c: Don't include gansidecl.h.

1998-11-06  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (lang_decl_flags): Add defined_in_class.  Decrease
        size of dummy.
        (DECL_DEFINED_IN_CLASS_P): New macro.
        (TEMPLATE_PARMS_FOR_INLINE): Document.
        (check_static_variable_definition): New function.
        * decl.c (cp_finish_decl): Set DECL_DEFINED_IN_CLASS_P, if
        appropriate.
        (check_static_variable_definition): Split out from ...
        (grokdeclarator): Here.
        * pt.c (check_default_tmpl_args): New function, split out from ...
        (push_template_decl_real): Here.
        (instantiate_template): Fix comment.

1998-11-04  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (CP_TYPE_CONST_P): Make {0,1}-valued.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.

1998-11-03  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (tsubst): Use build_index_type, not build_index_2_type.

1998-11-02  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (instantiate_type): Be more helpful.

        * decl2.c (import_export_decl): Call import_export_class.

        * cp-tree.h (EMPTY_CONSTRUCTOR_P): Check !TREE_HAS_CONSTRUCTOR.
        * decl2.c (build_expr_from_tree): Propagate TREE_HAS_CONSTRUCTOR.
        * pt.c (tsubst_copy): Likewise.

1998-11-02  Mark Mitchell  <mark@markmitchell.com>

        * init.c (expand_vec_init): Fix off-by-one error.

1998-11-02  Alexandre Oliva  <oliva@dcc.unicamp.br>

        * parse.y (apparent_template_type): New type.
        (named_complex_class_head_sans_basetype): Use it.
        * Makefile.in (CONFLICTS): One new conflict.
        * parse.c: Regenerated.

1998-11-01  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (COMPARE_STRICT): New macro.
        (COMPARE_BASE): Likewise.
        (COMPARE_RELAXED): Likewise.
        (COMPARE_REDECLARATION): Likewise.
        (same_type_p): Likewise.
        (same_or_base_type_p): Likewise.
        * call.c (standard_conversion): Use them, in place of comptypes
        with numeric arguments.
        (reference_binding): Likewise.
        (convert_like): Likewise.
        (build_over_call): Likewise.
        (is_subseq): Likewise.
        (is_properly_derived_from): Likewise.
        (compare_ics): Likewise.
        (joust): Likewise.
        * class.c (delete_duplicate_fields_1): Likewise.
        (resolves_to_fixed_type_p): Likewise.
        (instantiate_type): Likewise.  Remove #if 0'd code.
        * decl.c (decls_match): Likewise.  Use COMPARE_REDECLARATION here.
        (pushdecl): Likewise.
        (lookup_name_real): Likewise.
        (grokdeclarator): Likewise.  Check for illegal array declarations.
        (grokparms): Likewise.
        (grok_op_properties): Likewise.
        * decl2.c (check_classfn): Likewise.
        * friend.c (is_friend): Likewise.
        (make_friend_class): Likewise.
        * init.c (expand_aggr_init): Likewise.
        (expand_vec_init): Likewise.
        * pt.c (is_member_template_class): Remove declaration.
        (is_specialization_of): Use COMPARE_* and new macros.
        (comp_template_parms): Likewise.
        (convert_nontype_argument): Likewise.
        (coerce_template_template_parms): Likewise.
        (template_args_equal): Likewise.
        (lookup_template_class): Likewise.
        (type_unification_real): Likewise.
        (unify): Likewise.
        (get_bindings_real): Likewise.
        * search.c (covariant_return_p): Likewise.
        (get_matching_virtual): Likewise.
        * sig.c (match_method_types): Likewise.
        * tree.c (vec_binfo_member): Likewise.
        (cp_tree_equal): Likewise.
        * typeck.c (common_type): Likewise.
        (comp_array_types): Likewise.  Get issues involving unknown array
        bounds right.
        (comptypes): Update comments.  Use new flags.
        (comp_target_types): Use new macros.
        (compparms): Likewise.
        (comp_target_parms): Likewise.
        (string_conv_p): Likewise.
        (build_component_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_conditional_expr): Likewise.
        (build_static_cast): Likewise.
        (build_reinterpret_cast): Likewise.
        (build_const_cast): Likewise.
        (build_modify_expr): Likewise.
        (convert_for_assignment): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (ptr_reasonably_similar): Likewise.
        (comp_ptr_ttypes_const): Likewise.

1998-10-31  Jason Merrill  <jason@yorick.cygnus.com>

        * rtti.c (build_dynamic_cast_1): Fix cut-and-paste error.

1998-10-30  Mark Mitchell  <mark@markmitchell.com>

        * decl2.c (delete_sanity): Pass integer_zero_node, not
        integer_two_node, to build_vec_delete.
        * init.c (build_array_eh_cleanup): Remove.
        (expand_vec_init_try_block): New function.
        (expand_vec_init_catch_clause): Likewise.
        (build_vec_delete_1): Don't deal with case that auto_delete_vec
        might be integer_two_node anymore.
        (expand_vec_init): Rework for initialization-correctness and
        exception-correctness.
        * typeck2.c (process_init_constructor): Make mutual exclusivity
        of cases more obvious.

1998-10-29  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lookup_name_real): OK, only warn if not lexing.
        Simplify suggested fix.

        * cp-tree.h (IDENTIFIER_MARKED): New macro.
        * search.c (lookup_conversions): Use breadth_first_search.
        (add_conversions): Avoid adding two conversions to the same type.
        (breadth_first_search): Work with base binfos, rather
        than binfos and base indices.
        (get_virtual_destructor): Adjust.
        (tree_has_any_destructor_p): Adjust.
        (get_matching_virtual): Adjust.

        * pt.c (push_template_decl_real): Generalize check for incorrect
        number of template parms.
        (is_member_template_class): #if 0.

1998-10-29  Richard Henderson  <rth@cygnus.com>

        * Makefile.in (cc1plus): Put CXX_OBJS, and thence @extra_cxx_objs@,
        last.

1998-10-28  Zack Weinberg  <zack@rabi.phys.columbia.edu>

        * lex.c: Call check_newline from lang_init always.  After
        calling cpp_start_read, set yy_cur and yy_lim to read from the
        cpplib token buffer.

1998-10-28  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (instantiate_type): Don't consider templates for a normal
        match.

        * class.c (finish_struct_1): Don't complain about non-copy
        assignment ops in union members.

        * class.c (build_vtable): Don't pass at_eof to import_export_vtable.
        (prepare_fresh_vtable): Likewise.
        (finish_struct_1): Don't call import_export_class.
        * decl2.c (finish_vtable_vardecl): Do import/export stuff.
        (finish_prevtable_vardecl): Lose.
        (finish_file): Don't call it.
        * pt.c (instantiate_class_template): Likewise.
        * cp-tree.h: Remove it.

        * init.c (build_delete): Reset TYPE_HAS_DESTRUCTOR here.
        * decl.c (finish_function): Not here.
        (start_function): Do set DECL_INITIAL.

        * pt.c (push_template_decl_real): Complain about default template
        args for enclosing classes.

        * call.c (add_function_candidate): Treat conversion functions
        as coming from the argument's class.
        * cp-tree.h (DECL_CONV_FN_P): New fn.
        (DECL_DESTRUCTOR_P): Also check DECL_LANGUAGE.
        * class.c (add_method): Use DECL_CONV_FN_P.
        * decl2.c (check_classfn): Likewise.
        * error.c (dump_function_name): Likewise.
        (dump_function_decl): Likewise.
        * pt.c (fn_type_unification): Likewise.
        * search.c (add_conversions): Likewise.

1998-10-27  Jason Merrill  <jason@yorick.cygnus.com>

        * lex.c (do_identifier): Also generate LOOKUP_EXPR for RESULT_DECL.
        * method.c (hack_identifier): Also check for using RESULT_DECL
        from outer context.

1998-10-27  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Use type_quals, rather than constp,
        consistently.

1998-10-27  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (standard_conversion): instantiate_type here.
        (reference_binding): And here.
        (implicit_conversion): Not here.
        (build_op_delete_call): No need to cons up an OVERLOAD.
        * cvt.c (cp_convert_to_pointer): instantiate_type here.
        (convert_to_reference): And here.
        * decl.c (grok_reference_init): Not here.
        (grokparms): Or here.
        * typeck2.c (digest_init): Or here.
        * typeck.c (decay_conversion): Take the address of overloaded
        functions, too.
        (require_instantiated_type): Lose.
        (convert_arguments): Don't handle unknown types here.
        (build_c_cast): Likewise.
        (build_binary_op): Gut.
        (build_conditional_expr): Don't require_instantiated_type.
        (build_modify_expr): Likewise.
        (build_static_cast): Don't instantiate_type.
        (build_reinterpret_cast): Likewise.
        (build_const_cast): Likewise.
        (convert_for_initialization): Likewise.
        (build_ptrmemfunc): Use type_unknown_p.
        (convert_for_assignment): Also do default_conversion on overloaded
        functions.  Hand them off to ocp_convert.

1998-10-26  Mark Mitchell  <mark@markmitchell.com>

        * error.c (dump_decl): Deal with TEMPLATE_DECLs that are
        VAR_DECLs.  Handle vtables whose DECL_CONTEXT is not a type.

        * class.c (finish_struct_1): Use build_cplus_array_type to build
        array types.
        * decl.c (init_decl_processing): Likewise.
        * except.c (expand_end_eh_spec): Likewise.
        * search.c (expand_upcast_fixups): Simplify very slightly.

1998-10-26  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokdeclarator): Complain about a variable using
        constructor syntax coming back null from start_decl.

        * friend.c (make_friend_class): Complain about trying to make
        a non-class type a friend.

        * decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
        (start_function): Not here.

1998-10-26  Brendan Kehoe  <brendan@cygnus.com>

        * decl.c (grokdeclarator): Disallow `explicit' in a friend declaration.

1998-10-26  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (process_init_constructor): Only skip anonymous fields
        if they are bitfields.

        * cp-tree.def (TYPEOF_TYPE): New code.
        * error.c (dump_type_real): Handle it.
        * pt.c (tsubst): Likewise.
        * tree.c (search_tree): Likewise.
        * semantics.c (finish_typeof): New fn.
        * parse.y (typespec): Use it.
        * cp-tree.h: Declare it.

1998-10-26  Manfred Hollstein  <manfred@s-direktnet.de>

        * cp-tree.h (FORMAT_VBASE_NAME): Make definition unconditional.

1998-10-26  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (convert_arguments): Don't handle pmf references
        specially.

        * init.c (build_member_call): Don't try to convert to the base type
        if it's ambiguous or pedantic.

        * typeck2.c (check_for_new_type): Only depend on pedantic for
        C-style casts.

1998-10-25  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Set DECL_NONCONVERTING_P for all
        non-converting constructors.

1998-10-24  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * gxxint.texi: Correct documentation for n, N, Q, and B.

1998-10-23  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * parse.y (condition): Convert VAR_DECL from reference to indirect
        reference.

1998-10-23  Andrew MacLeod  <amacleod@cygnus.com>

        * exception.cc (__cp_pop_exception): Free the original exception
        value, not the potentially coerced one.

1998-10-23  Mark Mitchell  <mark@markmitchell.com>

        * Makefile.in (hash.h): Run gperf when necessary.

        * cp-tree.h (CP_TYPE_READONLY): Remove.
        (CP_TYPE_VOLATILE): Likewise.
        (CP_TYPE_QUALS): New macro.
        (CP_TYPE_CONST_P): Likewise.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.
        (CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
        (cp_build_type_variant): Rename to ...
        (cp_build_qualified_type): New function.
        (c_apply_type_quals_to_decl): Declare.
        (SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
        (SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
        (cp_type_qual_from_rid): New function.
        (compparms): Remove unused parameter.  All callers changed.
        (cp_type_quals): New function.
        (at_least_as_qualified_p): Likewise.
        (more_qualified_p): Likewise.

        * call.c (standard_conversion): Replace calls to
        cp_build_type_variant with cp_build_qualified_type.  Use
        CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
        compare them.  Use CP_TYPE_* macros to check qualifiers.
        (reference_binding): Likewise.
        (implicit_conversion): Likewise.
        (add_builtin_candidates): Likewise.
        (build_over_call): Likewise.
        * class.c (overrides): Compare all qualifiers, not just `const',
        on method declarations.
        * cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
        (convert_pointer_to_real): Likewise.
        (type_promotes_to): Likewise.
        * decl.c (check_for_uninitialized_const_var): New function.
        (init_decl_processing): More CP_TYPE_QUALS conversion, etc.
        (cp_finish_decl): Use check_for_uninitialized_const_var.
        (grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
        handle `restrict'.
        (grok_ctor_properties): Likewise.
        (grok_op_properties): Likewise.
        (start_function): Likewise.
        (rever_static_member_fn): Likewise.
        * decl2.c (grok_method_quals): Likewise.
        (grokfield): Likewise.
        * error.c (dump_readonly_or_volatile): Rename to ...
        (dump_qualifiers): New function.  Handle `restrict'.
        (dump_type_real): Use it.
        (dump_aggr_type): Likewise.
        (dump_type_prefix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_function_decl): Likewise.
        (cv_as_string): Likewise.
        * gxx.gperf: Add __restrict and __restrict__.
        * gxxint.texi: Document `u' as used for `__restrict', and a few
        other previously undocumented codes.
        * hash.h: Regenerated.
        * init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
        (build_member_call): Likewise.
        (build_new_1): Likewise.
        * lex.c (init_parse): Add entry for RID_RESTRICT.
        (cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
        (cp_type_qual_from_rid): Define.
        * lex.h (enum rid): Add RID_RESTRICT.
        * method.c (process_modifiers): Deal with `restrict'.
        * parse.y (primary): More CP_TYPE_QUALS conversion, etc.
        * parse.c: Regenerated.
        * pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
        (tsubst_aggr_type): Likewise.
        (tsubst): Likewise.
        (check_cv_quals_for_unify): Likewise.
        (unify): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        (build_headof): Likewise.
        (get_tinfo_var): Likewise.
        (buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
        (expand_class_desc): Likewise.
        (expand_attr_desc): Likewise.
        (synthesize_tinfo_fn): Likewise.
        * search.c (covariant_return_p): Likewise.  Fix `volatile' handling.
        (get_matching_virtual): Likewise.
        (expand_upcast_fixups): Likewise.
        * sig.c (build_signature_pointer_or_reference_name): Take
        type_quals, not constp and volatilep.
        (build_signature_pointer_or_reference_type): Likewise.
        (match_method_types): More CP_TYPE_QUALS conversion, etc.
        (build_signature_pointer_constructor): Likewise.
        (build_signature_method_call): Likewise.
        * tree.c (build_cplus_array_type): Likewise.
        (cp_build_type_variant): Rename to ...
        (cp_build_qualified_type): New function.  Deal with `__restrict'.
        (canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
        (build_exception_variant): Likewise.
        (mapcar): Likewise.
        * typeck.c (qualif_type): Likewise.
        (common_type): Likewise.
        (comptypes): Likewise.
        (comp_cv_target_types): Likewise.
        (at_least_as_qualified_p): Define.
        (more_qualified_p): Likewise.
        (comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
        (compparms): Likewise.
        (inline_conversion): Likewise.
        (string_conv_p): Likewise.
        (build_component_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_array_ref): Likewise.
        (build_unary_op): Likewise.
        (build_conditional_expr): Likewise.
        (build_static_cast): Likewise.
        (build_c_cast): Likewise.
        (build_modify_expr): Likewise.
        (convert_For_assignment): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (cp_type_quals): New function.

1998-10-23  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (CP_TYPE_READONLY): New macro to handle arrays.
        (CP_TYPE_VOLATILE): Likewise.
        * decl.c (grokdeclarator): Use them.
        * tree.c (canonical_type_variant): Likewise.

1998-10-22  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * parse.y (named_class_head): Push into class while parsing the
        base class list.
        * decl2.c (push_scope, pop_scope): New functions.
        * cp-tree.h: Declare them.
        * init.c (build_new_1): Delay cleanup until end of full expression.

1998-10-21  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (build_component_ref): Use of a type here is an error.

1998-10-19  Jason Merrill  <jason@yorick.cygnus.com>

        Revamp references to member functions.
        * method.c (hack_identifier): Call build_component_ref for a
        reference to a member function.
        * typeck.c (build_component_ref): Only return a single function
        if it's static.  Otherwise, return a COMPONENT_REF.
        (build_x_function_call): Handle a COMPONENT_REF.
        (build_unary_op): Handle all unknown-type things.
        * decl2.c (arg_assoc): Handle COMPONENT_REF.
        * class.c (instantiate_type): Complain if the function we get is a
        nonstatic member function.  Remove code for finding "compatible"
        functions.
        * pt.c (tsubst_copy): Handle NOP_EXPR.
        * tree.c (build_dummy_object): New fn.
        (maybe_dummy_object): New fn.
        (is_dummy_object): New fn.
        * cp-tree.h: Declare them.
        * cvt.c (cp_convert_to_pointer): Use maybe_dummy_object.
        * error.c (dump_expr, case OFFSET_REF): Use is_dummy_object.
        * init.c (build_member_call): Use maybe_dummy_object and
        is_dummy_object.
        (build_offset_ref): Use maybe_dummy_object.
        (resolve_offset_ref): Use is_dummy_object.
        * typeck.c (build_x_function_call): Call build_dummy_object.
        (unary_complex_lvalue): Call is_dummy_object.

        * typeck.c (build_component_addr): Make sure field is a field.

        * call.c (build_new_op): Delete obsolete code.

        * pt.c (tsubst, TEMPLATE*PARM*): Abort if we don't have any args.

1998-10-18  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (validate_nonmember_using_decl): Fix using-directives of
        std if std is ignored.

1998-10-18  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokvardecl): Fix thinko.

        * decl.c (grokdeclarator): Embedded attrs bind to the right,
        not the left.

        * parse.y (fn.def2): Fix 'attrs' format.

1998-10-18  Alastair J. Houghton  <ajh8@doc.ic.ac.uk>

        * Makefile.in (CONFLICTS): Update.
        * parse.y (expr_or_declarator_intern): New rule.
        (expr_or_declarator, direct_notype_declarator, primary,
        functional_cast): Use it.
        (notype_declarator_intern): New rule.
        (notype_declarator, complex_notype_declarator): Use it.

1998-10-17  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokfndecl): Set DECL_CONTEXT to namespace if appropriate.
        (grokvardecl): Likewise.

Sat Oct 17 23:27:20 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * class.c (make_method_vec): Cast 1st argument of `bzero' to (PTR).
        (add_method): Likewise for arguments 1 & 2 of `bcopy'.

        * decl.c (signal_catch): Mark with ATTRIBUTE_NORETURN.

        * pt.c (process_partial_specialization): Cast 1st argument of
        `bzero' to (PTR).

        * tree.c (build_base_fields): Cast `base_align' to (int) when
        comparing against one.

1998-10-16  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (lookup_name_real): Handle template parameters for member
        templates where said parameters have the same name as the
        surrounding class.

        * decl.c (expand_static_init): Build cleanups before entering the
        anonymous function used to do them to avoid access-checking
        confusion.

        * decl.c (grokfndecl): Add back call to cplus_decl_attributes
        accidentally removed by previous change, and make DECL_RTL here.
        * class.c (add_method): Don't make DECL_RTL here.

        * pt.c (for_each_template_parm): Don't examine uninstantiated
        default arguments.

1998-10-16  Dave Brolley  <brolley@cygnus.com>

        * lex.c (real_yylex): Fix unaligned access of wchar_t.

1998-10-16  Mark Mitchell  <mark@markmitchell.com>

        * class.c (add_method): Fix documentation to reflect previous
        changes.  Check for duplicate method declarations here.
        * decl.c (decls_match): Handle FUNCTION_DECL vs TEMPLATE_DECL
        correctly; such things never match.
        (grokfndecl): Don't look for duplicate methods here.
        * decl2.c (check_classfn): Don't assume names are mangled.
        Don't add bogus member function declarations to a class before the
        class type is complete.
        (grokfield): Reformat error message.
        * method.c (set_mangled_name_for_decl): Don't mangle names while
        processing_template_decl.

1998-10-16  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (build_indirect_ref): Complain about a pointer to data
        member, too.
        * typeck2.c (build_m_component_ref): Don't indirect a pointer to
        data member.
        * init.c (resolve_offset_ref): Don't undo the above.

        * cp-tree.h (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): New macros.
        (struct lang_decl_flags): Add `bitfield'.
        * class.c (finish_struct_1): Use DECL_C_BIT_FIELD instead of
        DECL_BIT_FIELD.
        * decl2.c (grokbitfield, grok_alignof): Likewise.
        * init.c (build_offset_ref): Likewise.
        * typeck.c (build_component_addr, expr_sizeof): Likewise.
        * cvt.c (build_up_reference): Don't crash if taking the address
        returns error_mark_node.

        * decl.c (grokfndecl): Also check ctype when checking for ::main().

1998-10-15  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokfndecl): ::main and __builtin_* get C linkage.
        Do mangling here.
        (grokdeclarator): Instead of here.
        * friend.c (do_friend): Lose special handling of ::main and
        __builtin_*.
        * cp-tree.h (DECL_MAIN_P): Check for C linkage.

        * spew.c (yylex): Clear looking_for_typename if we got
        'enum { ... };'.

1998-10-15  Mark Mitchell  <mark@markmitchell.com>

        * class.c (maybe_warn_about_overly_private_class): Improve error
        messages for class with only private constructors.

        * cp-tree.def (TYPENAME_TYPE): Add to documentation.
        * cp-tree.h (TYPENAME_TYPE_FULLNAME): Document.
        (build_typename_type): New function.
        * decl.c (build_typename_type): Broken out from ...
        (make_typename_type): Use it.
        * search.c (lookup_field): Likewise.

1998-10-14  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

        * pt.c (convert_nontype_argument): Check against type_referred_to.
        * decl.c (grokvardecl): Check for declarator name before building
        DECL_ASSEMBLER_NAME.

1998-10-14  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (lookup_template_class): Add comment.
        (instantiate_class_template): Don't mark the _TYPE node for
        member class templates as an instantiation.

1998-10-14  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokfndecl): Fix my thinko.

1998-10-13  Jason Merrill  <jason@yorick.cygnus.com>

        * tinfo2.cc (fast_compare): Remove.
        (before): Just use strcmp.
        * tinfo.cc (operator==): Just use strcmp.

1998-10-13  Klaus-Georg Adams  <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>

        * decl.c (grokfndecl): Don't check for linkage in `extern "C"'
        declarations.

1998-10-13  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (specializations_of_same_template_p): Remove.
        * search.c (get_template_base): Don't use it.
        (get_template_base_recursive): Likewise.
        * pt.c (specializations_of_same_template_p): Remove.
        (unify): Don't use it.
        (lookup_template_class): Find the correct parent when setting
        CLASSTYPE_TI_TEMPLATE.

1998-10-12  Jason Merrill  <jason@yorick.cygnus.com>

        * tinfo.cc (operator==): Always compare names.

1998-10-12  Herman ten Brugge  <Haj.Ten.Brugge@net.HCC.nl>

        * decl.c (start_function): Fix cut-and-paste error.

1998-10-12  Jason Merrill  <jason@yorick.cygnus.com>

        * inc/typeinfo: Add #pragma interface.
        (operator!=): Just call operator==.
        * tinfo.cc: Add #pragma implementation.
        (operator==): Move from inc/typeinfo and tinfo2.cc.
        Check __COMMON_UNRELIABLE instead of _WIN32.

        * typeck2.c (my_friendly_abort): Add URL.

1998-10-12  Alastair J. Houghton  <ajh8@doc.ic.ac.uk>

        * decl.c (start_method): Added extra parameter for attributes.
        * cp-tree.h (start_method): Update prototype.
        * parse.y (fn.def2): Update start_method parameter list.

1998-10-11  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (specializations_of_same_template_p): Declare.
        * pt.c (specializations_of_same_template_p): New function.
        (unify): Use it.
        * search.c (get_template_base): Use it.
        (get_template_base_recursive): Likewise.

1998-10-10  Manfred Hollstein  <manfred@s-direktnet.de>

        * decl2.c (start_objects): Add new variable `joiner' and
        initialize it properly.

1998-10-09  Mark Mitchell  <mark@markmitchell.com>

        * search.c (expand_upcast_fixups): Tweak to match 1998-10-07
        change to vtable types.

        * cvt.c (ocp_convert): Avoid infinite recursion caused by
        1998-10-03 change.

1998-10-08  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (resolve_overloaded_unification): New fn.
        (try_one_overload): Likewise.
        (unify): Don't fail on unknown type.
        (type_unification_real): Likewise.  Use resolve_overloaded_unification
        to handle an overloaded argument.
        (template_args_equal): Split out...
        (comp_template_args): From here.
        (determine_specialization): Also allow a template with more
        parms than were explicitly specified.
        * cp-tree.h: Add template_args_equal.
        * call.c (resolve_args): Remove TEMPLATE_ID_EXPR code.

Thu Oct  8 15:58:30 1998  Anthony Green  <green@cygnus.com>

        * semantics.c (finish_asm_stmt): Revert my 1998-09-28
        change.

Thu Oct  8 06:00:19 1998  Jeffrey A Law  (law@cygnus.com)

        * typeck.c (unsigned_type): Only return TItype nodes when
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        (signed_type): Likewise.
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Only declare
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.
        (init_decl_processing): Only create TItype nodes when
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Only declare
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.

Wed Oct  7 12:32:44 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (hash.h): Add -L KR-C -F ', 0, 0' flags to gperf.
        (gxx.gperf): Update comments describing invocation flags.
        (hash.h): Regenerate using gperf 2.7.1 (19981006 egcs).

1998-10-07  Mark Mitchell  <mark@markmitchell.com>

        * class.c (finish_struct_1): Add commentary on previous change.

        * cp-tree.h (vtbl_ptr_type_node): New variable.
        * class.c (build_vtbl_ref): Don't indirect through the vptr; it's
        already of the right type.
        (finish_struct_1): Make the vptr be of type vtbl_ptr_type_node.
        Simplify code to grow vtable.
        * decl.c (vtbl_ptr_type_node): Define.
        (init_decl_processing): Initialize it.

1998-10-06  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.def (PTRMEM_CST): New tree node.
        * cp-tree.h (ptrmem_cst): New type.
        (lang_type): Remove local_typedecls.
        (dummy): Increase to 12 bits from 11.
        (CLASSTYPE_LOCAL_TYPEDECLS): Remove.
        (PTRMEM_CST_CLASS): New macro.
        (PTRMEM_CST_MEMBER): Likewise.
        (current_access_specifier): New variable.
        (current_class_type): Remove duplicate declaration.
        (finish_struct): Change prototype.
        (unreverse_member_declarations): New function.
        (pushdecl_class_level): Change prototype.
        (grok_enum_decls): Remove.
        (fixup_anonymous_union): New function.
        (grok_x_components): Change prototype.
        (tsubst_chain): Remove.
        (finish_member_template_decl): Likewise.
        (check_explicit_specialization): Fix indentation.
        (finish_class_definition): Change prototype.
        (finish_member_class_template): Likewise.
        (finish_member_declaration): New function.
        (check_multiple_declarators): Likewise.
        * class.c (class_stack_node_t): New type.
        (current_class_base): Remove.
        (current_class_stack): Change type.
        (current_access_specifier): New variable.
        (grow_method): Remove.
        (check_member_decl_is_same_in_complete_scope): Break out from
        finish_struct.
        (make_method_vec): New function.
        (free_method_vec): Likewise.
        (add_implicitly_declared_members): Break out from finish_struct_1.
        (free_method_vecs): New variable.
        (add_method): Rework for direct use from parser.
        (handle_using_decl): Watch for NULL_TREE while iterating through
        CLASSTYPE_METHOD_VEC.
        (finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
        just do some error-checking.
        (warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
        (finish_struct_1): Simplify.  Use add_implicitly_declared_members.
        (finish_struct): Change prototype.  Simplify; fields and methods
        are already set up at this point.
        (init_class_processing): Set up current_class_stack.
        (pushclass): Save current_access_specifier.
        (popclass): Restore it.
        (currently_open_class): Simplify.
        (build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
        * decl.c (saved_scope): Add access_specifier.
        (maybe_push_to_top_level): Save it.
        (pop_from_top_level): Restore it.
        (maybe_process_template_type_declaration): Use
        finish_member_declaration.
        (pushtag): Likewise.
        (pushdecl_class_level): Don't return a value.
        (fixup_anonymous_union): Break out from grok_x_components.
        (shadow_tag): Use it.
        (xref_tag): Complain about using an elaborated type specifier to
        reference a template type parameter or typedef name.
        (xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (current_local_enum): Remove.
        (build_enumerator): Call finish_member_declaration.
        (grok_enum_decls): Remove.
        * decl2.c (grok_x_components): Simplify.
        (check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
        (grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (merge_functions): Add to comment.
        (arg_assoc_type): Prototype.
        (arg_assoc): Pass as many arguments as there are parameters.
        * error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
        OFFSET_REF.
        * expr.c (cpls_expand_expr): Remove dead code.  Handle
        PTRMEM_CST.
        * friend.c (do_friend): Lookup friends when in nested classes.
        Change comments.
        * init.c (build_offset_ref): Do lookup even for classes that are
        only partially defined.
        (decl_constant_value): Remove dead code.
        * method.c (build_overload_value): Remove hack where by TYPE was
        not a TYPE.  Handle PTRMEM_CST.
        (build_template_parm_names): Don't pass a PARM_DECL where a TYPE
        should go.
        * parse.y (components, notype_components, component_decl,
        component_decl_1, component_declarator, component_declarator0):
        Now all are itype rather than ttype.  Rework to add members to
        classes on the fly.
        (typesqpecqual_reserved): Use check_multiple_declarators.
        (structsp): Update class to finish_class_definition.
        (do_xref_defn): Unsplit into named_class_head.
        (access_specifier): Set current_access_specifier.
        * pt.c (set_current_access_from_decl): New function.
        (finish_member_template_decl): Don't take the parameters.
        (comp_template_args): Make more robust.
        (lookup_template_class): Don't use current_local_enum.
        (for_each_template_parm): Handle PTRMEM_CST.
        (instantiate_class_template): Use set_current_access_from_decl,
        finish_member_declaration and unreverse_member_declarations.  Set
        lineno/input_filename before generating implicit member functions.
        (type_unification_real): Don't assume back-unification happens
        only for the last argument.
        (regenerate_decl_from_template): Call pushclass a bit earlier.
        (tsubst_chain): Remove.
        (tsubst_enum): Use set_current_access_from_decl.
        (set_mangled_name_for_template_decl): Fix indentation.
        * search.c (lookup_fnfields_1): Change iteration through
        CLASSTYPE_METHOD_VEC.
        (dfs_pushdecls): Likewise.
        (dfs_compress_decls): Likewise.
        (add_conversions): Likewise.
        * semantics.c (finish_class_definition): Don't take components.
        Change call to finish_struct.
        (finish_member_declaration): New function.
        (finish_member_class_template): Don't take template parameters.
        Change call to grok_x_components.  Call finish_member_template_decl.
        (check_multiple_declarators): New function.
        * sig.c (append_signature_fields): Work from the TYPE_METHODS, not
        a passed in fieldlist.
        * tree.c (search_tree): Handle PTRMEM_CST.
        (mapcar): Likewise.
        * typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
        INTEGER_CSTs, for pointer-to-data members.

        * call.c (resolve_args): Resolve template specializations, if
        possible.

Tue Oct  6 07:57:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (spew.o): Depend on toplev.h.

        * call.c (compare_ics): Initialize variables `deref_from_type2',
        `deref_to_type1' and `deref_to_type2'.

        * except.c (get_eh_type): Hide prototype and definition.
        (process_start_catch_block_old): Remove unused static prototype.

        * pt.c (tsubst_decl): Initialize variable `argvec'.

        * spew.c: Include toplev.h.

1998-10-05  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (instantiate_decl): Do save and restore file position.

1998-10-05  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * method.c (build_decl_overload_real): Clear
        numeric_output_need_bar after __.

1998-10-05  Nathan Sidwell  <nathan@acm.org>

        * call.c (build_new_method_call): Issue 'incomplete type' error,
        if class is not defined.

1998-10-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * call.c (build_object_call): Move declaration of variable
        `fn' into the scope where it is used.  Don't access variable
        `fn' when it is uninitialized, instead use `fns'.

1998-10-04  Theodore Papadopoulo  <Theodore.Papadopoulo@sophia.inria.fr>

        * errfn.c (cp_thing): Print buf as a string not as a printf format
        to avoid problems with the operator%.  Consequently, `%%' sequences
        in format are copied as `%' in buf.

1998-10-04  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (pop_tinst_level): Call extract_interface_info.
        (instantiate_decl): Don't save and restore file position.

        * decl.c (cp_finish_decl): Make statics in extern inlines and
        templates common, if possible and the target doesn't support weak
        symbols.

        * decl.c (grokdeclarator): Remove redundant calls to
        build_type_variant and some duplicated code.
        * sig.c (build_signature_reference_type): Only take the type parm.
        (build_signature_pointer_type): Likewise.
        * tree.c (build_cplus_method_type): Adjust.
        * cp-tree.h: Update.

1998-10-04  Mark Mitchell  <mark@markmitchell.com>

        * call.c (build_over_call): Make pedwarns about dropped qualifiers
        into full-fledged errors.
        * cvt.c (convert_to_reference): Likewise.
        * typeck.c (convert_for_assignment): Likewise.

        * search.c (expand_upcast_vtables): In addition to unsetting
        TREE_READONLY, remove top-level const type qualifier.

1998-10-03  Mark Mitchell  <mark@markmitchell.com>

        * class.c (current_class_ptr, current_class_ref): Clarify
        documentation.
        * cvt.c (ocp_convert): Don't expect fold to remove all trivial
        NOP type conversions.
        * decl.c (decls_match): Use comptypes directly; ignore
        qualifiers on the DECL.
        (duplicate_decls): Remove qualifier checks on DECL.
        (grokdeclarator): Make the type built up include top-level
        qualifiers.
        * decl2.c (do_dtors): Fix spelling error.
        * error.c (dump_simple_decl): Don't look at qualifiers on the decl
        when printing type information.
        * init.c (build_new_1): Add documentation.  Deal with the fact
        that type of allocated memory now contains qualifiers.
        * lex.c (is_global): Improve error-recovery.
        * sig.c (build_member_function_pointer): Don't cast away const
        on fields of sigtable_entry_type.
        * tree.c (lvalue_type): Don't look at top-level qualifiers on
        expressions.
        * typeck.c (decay_conversion): Likewise.
        (build_component_ref): Make sure the type of the COMPONENT_REF
        contains top-level qualifiers, as appropriate.  Improve
        error-handling.
        (build_indirect_ref): Simplify.  Don't strip top-level qualifiers.
        (build_array_ref): Likewise.
        (build_unary_op): Improve error-recovery.
        (unary_complex_lvalue): Make taking the address a bound member
        function an error, not a sorry.
        (build_conditional_expr): Look at the type qualifiers, not the
        qualifiers on the expression itself.

1998-10-03  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (merge_functions): Remove duplicates.

        * decl2.c: Add -f{no-,}implicit-inline-templates.
        (import_export_decl): Check it.

        * decl.c (lookup_name_real): Template parms also take precedence
        over implicit typename.  Only warn if yylex.

        * typeck.c (build_conditional_expr): Only fold if ifexp is an
        INTEGER_CST.

        * decl2.c (finish_vtable_vardecl): Check DECL_INTERFACE_KNOWN
        instead of linkage.

1998-10-01  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (FORMAT_VBASE_NAME): New macro.
        * class.c (build_vbase_pointer): Use it.
        * rtti.c (expand_class_desc): Likewise.
        * tree.c (build_vbase_pointer_fields): Likewise.

Thu Oct  1 10:43:45 1998  Nick Clifton  <nickc@cygnus.com>

        * decl.c (start_decl): Add invocation of
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.
        (start_function): Add invocation of
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.

        * lex.c: Replace occurrences of HANDLE_SYSV_PRAGMA with
        HANDLE_GENERIC_PRAGMAS.

1998-09-28  Anthony Green  <green@cygnus.com>

        * semantics.c (finish_asm_stmt): Always permit volatile asms.

1998-09-28  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Tighten checks for invalid
        destructors.  Improve error-messages and error-recovery.
        * decl2.c (check_classfn): Don't assume that mangled destructor
        names contain type information.

1998-09-25  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (get_base_distance): Remove assert.

        * decl2.c (build_anon_union_vars): Don't process a field with no
        name.
        (finish_anon_union): Also complain about local anon unions with no
        members.

1998-09-25  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (lookup_namespace_name): If the name is a namespace,
        return it immediately.

Fri Sep 25 11:45:38 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * cp-tree.h (define_case_label): Remove unused parameter.
        (check_java_method): Likewise.
        (grokclassfn): Likewise.
        (expand_aggr_init): Likewise.
        (build_x_delete): Likewise.
        (maybe_end_member_template_processing): Likewise.
        (unshare_base_binfos): Add prototype.
        (string_conv_p): Likewise.
        (my_friendly_abort): Mark with ATTRIBUTE_NORETURN.

        * cvt.c (build_up_reference): Remove unused parameter
        `checkconst', all callers changed.
        (build_type_conversion): Mark parameter `code' with
        ATTRIBUTE_UNUSED.
        (build_expr_type_conversion): Initialize variable `conv'.

        * decl.c (push_namespace): Initialize variable `d'.
        (define_case_label): Remove unused parameter `decl', all callers
        changed.

        * decl2.c (lang_decode_option): If !USE_CPPLIB, mark parameter
        `argc' with ATTRIBUTE_UNUSED.
        (grokclassfn): Remove unused parameter `cname', all callers
        changed.
        (check_java_method): Likewise for parameter `ctype'.
        (copy_assignment_arg_p): Mark parameter `virtualp' with
        ATTRIBUTE_UNUSED.
        (finish_prevtable_vardecl): Likewise for parameter `prev'.

        * expr.c (extract_init): Likewise for parameters `decl' and `init'.

        * init.c (expand_aggr_init_1): Remove unused parameter
        `alias_this', all callers changed.
        (expand_aggr_init): Likewise.
        (expand_default_init): Likewise.
        (build_new_1): Initialize variable `susp'.
        (build_x_delete): Remove unused parameter `type', all callers
        changed.

        * lex.c (set_typedecl_interface_info): Mark parameter `prev' with
        ATTRIBUTE_UNUSED.
        (readescape): Use (unsigned) value in shift.
        (real_yylex): Likewise.  Likewise.  Also cast `sizeof' to int when
        comparing to a signed quantity.

        * pt.c (maybe_end_member_template_processing): Remove unused
        parameter `decl', all callers changed.
        (check_explicit_specialization): Add braces around empty body in
        an else-statement.
        (current_template_args): Initialize variable `args'.
        (lookup_template_class): Likewise for variable `prev_local_enum'.
        (tsubst_decl): Likewise for variable `r'.
        (set_mangled_name_for_template_decl): Initialize variable
        `context'.

        * spew.c (scan_tokens): Change type of parameter `n' to unsigned.
        Likewise for variable `i'.
        (yylex): Initialize variable `trrr'.

        * typeck.c (compparms): Mark variable `strict' with
        ATTRIBUTE_UNUSED.

        * xref.c (simplify_type): Cast argument of ctype function to
        `unsigned char'.

1998-09-24  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (language_lvalue_valid): Remove.
        * decl.c (grokdeclarator): Don't disallow references to functions.
        * tree.c (lvalue_p_1): New function, combining duplicated
        code from ...
        (lvalue_p): Use it.
        (real_lvalue_p): Likewise.
        * typeck.c (language_lvalue_valid): Remove.
        (build_modify_expr): Treat FUNCTION_TYPEs as readonly, even though
        they don't have TREE_READONLY set.
        * typeck2.c (readonly_error): Add case for FUNCTION_DECLs.

1998-09-24  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * spew.c (yylex): Give diagnostic.
        * hash.h (is_reserved_word): Add export.
        * gxx.gperf: Likewise.
        * lex.h (rid): Add RID_EXPORT.
        * lex.c (init_parse): Likewise.

Tue Sep 22 21:01:19 1998  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

        * friend.c (do_friend): Make warning a full sentence.

1998-09-22  Mark Mitchell  <mark@markmitchell.com>

        * parse.y (component_decl_list): Improve error-recovery.

1998-09-22  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * decl.c (make_typename_type): Move error to point where name
        variable can be used by dump_type.

1998-09-22  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokfndecl): Improve error-recovery.
        * decl2.c (grokfield): Likewise.
        * pt.c (finish_member_template_decl): Likewise.

1998-09-20  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * method.c (hack_identifier): Finding multiple members is always
        an error.

1998-09-21  Per Bothner  <bothner@cygnus.com>

        * Make-lang.in (c++-filt):  Link libiberty.a after cxxmain.o.

Mon Sep 21 01:53:05 1998  Felix Lee  <flee@cygnus.com>

        * lex.c (init_lex): Use getenv ("LANG"), not GET_ENVIRONMENT ().

1998-09-20  Mark Mitchell  <mark@markmitchell.com>

        * class.c (maybe_warn_about_overly_private_class): Reformat.

1998-09-17  Andrew MacLeod  <amacleod@cygnus.com>

        * exception.cc (__cplus_type_matcher): Realign some code.

1998-09-16  Mark Mitchell  <mark@markmitchell.com>

        * Make-lang.in (tinfo.o): Use CXXFLAGS when compiling.
        (tinfo2.o): Likewise.
        (exception.o): Likewise.
        (new.o): Likewise.
        (opnew.o): Likewise.
        (opnewnt.o): Likewise.
        (opvnew.o): Likewise.
        (opvnewnt.o): Likewise.
        (opdel.o): Likewise.
        (opdelnt.o): Likewise.
        (opvdel.o): Likewise.
        (opvdelnt.o): Likewise.

1998-09-16  Richard Henderson  <rth@cygnus.com>

        * decl.c (init_decl_processing): Kill __builtin_fp and __builtin_sp.

1998-09-15  Alexandre Oliva  <oliva@dcc.unicamp.br>

        * call.c (build_field_call): Handle static data members too.

        * typeck.c (comptypes): When comparing pointer types, check
        whether referred types match even in strictest modes.

1998-09-15  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h: Revert previous change.
        (finish_struct_methods): Remove declaration.
        * class.c: Revert previous change.
        (maybe_warn_about_overly_private_class): New function.
        (finish_struct_methods): Declare here, and make static.  Remove
        unnecessary parameters.  Tidy slightly.  Use
        maybe_warn_about_overly_private_class.
        (finish_struct_1): Adjust.  Remove check for private constructors,
        now done elsewhere.
        (finish_struct): Adjust.

1998-09-15  Andrew MacLeod  <amacleod@cygnus.com>

        * except.c (expand_start_catch_block): No need to check for new
        exception model.
        (process_start_catch_block_old): Deleted.
        (process_start_catch_block): Add call to start_decl_1().
        (expand_end_catch_block): Add call to end_catch_handler().
        * exception.cc (__cplus_type_matcher): Only check the exception
        language if there is an exception table.

1998-09-15  Andrew MacLeod  <amacleod@cygnus.com>

        * search.c (expand_indirect_vtbls_init): Mark temporary stack slots
        as used to prevent conflicts with virtual function tables.

1998-09-14  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (lang_type): Add has_non_private_static_mem_fn.
        (CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN): New macro, to access it.
        * class.c (maybe_class_too_private_p): New function.
        (finish_struct_methods): Use it.
        (finish_struct_1): Likewise.
        (finish_struct): Set CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN if
        appropriate.

        * pt.c (check_specialization_scope): Fix spelling error.
        (check_explicit_specialization): Remove code to handle explicit
        specializations in class scope; they are now correctly diagnosed
        as errors.

1998-09-10  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (pushdecl): Don't copy types if the
        DECL_ABSTRACT_ORIGIN of the new decl matches the TYPE_NAME of the
        type.

1998-09-09  Kriang Lerdsuwanakij  <lerdsuwa@scf-fs.usc.edu>

        * class.c (get_enclosing_class): New function.
        (is_base_of_enclosing_class): Likewise.
        * cp-tree.h (get_enclosing_class): Declare.
        (is_base_of_enclosing_class): Likewise.
        * pt.c (coerce_template_parms): Use them.

1998-09-09  Jason Merrill  <jason@yorick.cygnus.com>

        * g++spec.c (lang_specific_driver): Check whether MATH_LIBRARY is
        null to decide whether to use it.

        * error.c (dump_type_real): Handle NAMESPACE_DECL.
        * parse.y (base_class.1): Avoid crash on error.

1998-09-08  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (make_typename_type): If context is a namespace, the code
        is in error.

1998-09-08  Mumit Khan  <khan@xraylith.wisc.edu>

        * parse.y (nomods_initdcl0): Set up the parser stack correctly.

1998-09-08  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (anonymous_namespace_name): Declare.
        * decl.c: Define it.
        (push_namespace): Use anonymous_namespace_name, rather than local
        static anon_name.
        * error.c (dump_decl): If a namespace is named
        anonymous_namespace_name, call it {anonymous}.

        * decl.c (grokparms): Distinguish between references and pointers
        in error message.

1998-09-08  Richard Henderson  <rth@cygnus.com>
            Mark Mitchell  <mark@markmitchell.com>

        * pt.c (process_partial_specialization): Consistently allocate
        and zero tpd.parms based on ntparms.  Use tpd2.parms, not
        tpd.parms, where appropriate.

Sun Sep  6 00:00:51 1998  Jeffrey A Law  (law@cygnus.com)

        * Makefile.in (INCLUDES): Update after recent toplevel gcc
        reorganizations.

1998-09-05  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (TI_PENDING_SPECIALIZATION_FLAG): Remove.
        * class.c (finish_struct): Remove hackery to deal with explicit
        specializations in class scope.
        * decl.c (grokfndecl): Improve error-recovery.
        * decl2.c (grokfield): Likewise.
        * pt.c (check_specialization_scope): New function.
        (begin_specialization): Call it.
        (process_partial_specialization): New function, split out from
        push_template_decl.  Check partial specializations more
        stringently.
        (push_template_decl): Call it.
        (check_explicit_specialization): Don't attempt to handle explicit
        specializations in class scope.
        (template_parm_data): Document.  Add current_arg and
        arg_uses_template_parms.
        (mark_template_parm): Set it.
        (tsubst_arg_types): Remove unused variable.
        * semantics.c (begin_class_definition): Tweak.

1998-09-04  Mark Mitchell  <mark@markmitchell.com>

        * inc/typeinfo (type_info::type_info(const char*)): Make
        `explicit'.

        * cp-tree.h (hash_tree_cons_simple): New macro.
        * pt.c (tsubst_arg_types): New function.  Use hash_tree_cons.
        (coerce_template_parms): Use make_temp_vec, instead of
        make_tree_vec.  Document this behavior.
        (lookup_template_class): Likewise.
        (tsubst, cases METHOD_TYPE, FUNCTION_TYPE): Use tsubst_arg_types.
        Remove dead code (and add assertion to check its deadness).  Fix
        bug w.r.t. exception specifications.

1998-09-03  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (import_export_vtable): Always make artificials comdat.
        (import_export_decl): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.

1998-09-03  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (finish_globally_qualified_member_call_expr):
        Rename to ...
        (finish_qualified_call_expr).
        * semantics.c: Likewise.
        * parse.y (primary): Use it.
        * method.c (hack_identifier): Remove redundant code.

        * init.c (resolve_offset_ref): Call convert_from_reference to
        handle members of reference type.  Improve error recovery.

1998-09-03  Benjamin Kosnik  <bkoz@cygnus.com>

        * cp-tree.h: Declare warn_nontemplate_friend.
        * decl2.c (lang_decode_option): Set.
        * lang-options.h: Add -Wnon-template-friend.
        * friend.c (do_friend): Use to toggle non-template function warning.

1998-09-03  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (finish_enum): Don't resolve CONST_DECLs to their
        corresponding INTEGER_CSTs when processing_template_decl.
        * pt.c (tsubst_enum): Tweak accordingly.

1998-09-03  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

        * decl.c (pushdecl_class_level): Add warning here.
        (pushdecl): Tweak.

1998-09-02  Jason Merrill  <jason@yorick.cygnus.com>

        * cvt.c (convert_pointer_to_real): Tidy.
        * search.c (get_base_distance_recursive): Simplify.
        (get_base_distance): Likewise.

        * pt.c (unify): Only special-case INTEGER_TYPE if it uses template
        parms.

Wed Sep 02 09:25:29 1998  Nick Clifton  <nickc@cygnus.com>

        * lex.c (check_newline):  Call HANDLE_PRAGMA before
        HANDLE_SYSV_PRAGMA if both are defined.  Generate warning messages
        if unknown pragmas are encountered.
        (handle_sysv_pragma): Interpret return code from
        handle_pragma_token ().  Return success/failure indication rather
        than next unprocessed character.
        (pragma_getc): New function: retrieves characters from the
        input stream.  Defined when HANDLE_PRAGMA is defined.
        (pragma_ungetc): New function: replaces characters back into the
        input stream.  Defined when HANDLE_PRAGMA is defined.

1998-09-01  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (output_vtable_inherit): Use %cDIGIT in the operands.
        * class.c (build_vtable_entry_ref): Likewise.

1998-09-01  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION): New macro.
        * decl2.c (import_export_decl): Likewise.
        * pt.c (instantiate_decl): Use it.

1998-09-01  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lookup_name_real): Also do implicit typename thing for
        artificial TYPE_DECLs.
        * search.c (lookup_field): Likewise.
        (lookup_fnfields, lookup_field): Adjust for implicit typename kludge.
        * semantics.c (begin_constructor_declarator): Use enter_scope_of.
        (enter_scope_of): Extract type from implicit typename.
        (begin_class_definition): Likewise.
        * lex.c (identifier_type): Handle implicit typename when checking
        for SELFNAME.

        * cp-tree.h: Declare flag_strict_prototype.
        * lex.c (do_scoped_id, do_identifier): Don't implicitly_declare if
        -fstrict-prototype.
        * decl.c (init_decl_processing): If -f{no,-}strict-prototype wasn't
        specified, set it to the value of pedantic.

1998-09-01  Mark Mitchell  <mark@markmitchell.com>

        * decl2.c (arg_assoc): Handle template-id expressions as arguments.

1998-08-31  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (finish_enum): Handle member enums of classes declared in
        template functions.

        * decl2.c (grok_x_components): Strip attributes before calling
        groktypename.

1998-08-31  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h, decl2.c: Remove support for -fall-virtual,
        -fenum-int-equivalence and -fno-nonnull-objects.
        * class.c (check_for_override): Remove support for -fall-virtual.
        (finish_struct_1): Likewise.
        * call.c (build_new_op): Remove support for -fenum-int-equivalence.
        * typeck.c (build_binary_op_nodefault): Likewise.
        * cvt.c (ocp_convert): Likewise.
        * call.c (build_vfield_ref): Remove support for -fno-nonnull-objects.
        * class.c (build_vbase_path): Likewise.

Sun Aug 30 22:16:31 1998  H.J. Lu  (hjl@gnu.org)

        * Makefile.in (INTERFACE): New, set to 1.

1998-08-30  Mark Mitchell  <mark@markmitchell.com>

        * error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when
        comparing with global_namespace.
        (dump_aggr_type): Likewise.

        * decl.c (grokfndecl): Issue error on declaration of friend
        templates with explicit template arguments.

        * pt.c (convert_template_argument): New function, split out
        from...
        (coerce_template_parms): Here.
        (tsubst): Attempt better error-recovery.

1998-08-28  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * pt.c (decl_template_parm_p): Add checks for
        TEMPLATE_TEMPLATE_PARM.

1998-08-28  Mark Mitchell  <mark@markmitchell.com>

        * lex.c (do_identifier): Fix thinko in previous change.

1998-08-28  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (dfs_search, binfo_for_vtable, dfs_bfv_helper): New fns.
        * decl2.c (output_vtable_inherit): Call binfo_for_vtable.

1998-08-28  Richard Henderson  <rth@cygnus.com>

        Add support for discarding unused virtual functions.
        * lang-options.h: Add -fvtable-gc.
        * cp-tree.h: Add flag_vtable_gc.
        * decl2.c (output_vtable_inherit): New fn.
        (finish_vtable_vardecl): Call it.
        * class.c (build_vtable_entry_ref): New fn.
        (build_vtbl_ref): Call it.

1998-08-28  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (build_enumerator): Take the enumeration type as a
        parameter.
        * decl.c (finish_enum): Don't set the TREE_TYPE for the
        enumeration constant values if we're processing_template_decls.
        Don't set the type for the CONST_DECLs either; that's done in
        build_enumerator.
        (build_enumerator): Take the enumeration type as a
        parameter.
        * lex.c (do_identifier): Don't resolve enumeration constants while
        processing template declarations, even if they happen to be
        TEMPLATE_PARM_INDEXs.

        * parse.y (current_enum_type): New variable.
        (primary): Don't allow statement-expression in local classes just
        as we don't in global classes.
        (structsp): Use current_enum_type.
        (enum_list): Likewise.
        * pt.c (tsubst_enum): Don't check for NOP_EXPRs introduced by
        finish_enum; they no longer occur.

        * cp-tree.h (finish_base_specifier): New function.
        * parse.y (base_class): Use it.
        * semantics.c (finish_base_specifier): Define it.

        * parse.y (structsp): Warn on use of typename outside of template
        declarations.

1998-08-27  Jason Merrill  <jason@yorick.cygnus.com>

        * lex.c (handle_cp_pragma): Remove #pragma vtable.
        * lang-options.h: Remove +e options.
        * decl2.c (lang_decode_option): Likewise.
        (import_export_vtable): Don't check write_virtuals.
        (finish_vtable_vardecl, finish_file): Likewise.
        * search.c (dfs_debug_mark): Likewise.
        * semantics.c (begin_class_definition): Likewise.
        * class.c (build_vtable, finish_vtbls, finish_struct_1): Likewise.

        * call.c (build_over_call): Check flag_elide_constructors.
        * decl2.c: flag_elide_constructors defaults to 1.
        * typeck.c (convert_arguments): Remove return_loc parm.
        (build_function_call_real): Adjust.

        * search.c: Tear out all mi_matrix and memoize code.
        (lookup_field, lookup_fnfields): Use scratch_tree_cons.
        * lang-options.h: Remove documentation for -fhandle-exceptions,
        -fmemoize-lookups and -fsave-memoized.
        * cp-tree.h: Lose mi_matrix and memoize support.
        * decl2.c: Ignore -fmemoize-lookups and -fsave-memoized.
        * class.c: Lose struct class_level.
        (pushclass, popclass): Lose memoize support.
        * init.c (build_offset_ref): Likewise.

        Never change BINFO_INHERITANCE_CHAIN.
        * init.c (emit_base_init): Change modification of
        BINFO_INHERITANCE_CHAIN to an assert.
        * search.c (get_base_distance_recursive): Likewise.
        (get_base_distance): Likewise.
        (lookup_member): Likewise.
        (convert_pointer_to_single_level): Likewise.
        (lookup_field): Likewise.  Lose setting TREE_VIA_* on TREE_LISTs.
        (lookup_fnfields): Likewise.
        * tree.c (propagate_binfo_offsets): Don't call unshare_base_binfos.
        (unshare_base_binfos): Don't call propagate_binfo_offsets.
        (layout_basetypes): Call propagate_binfo_offsets instead of
        unshare_base_binfos.
        * decl.c (xref_basetypes): Call unshare_base_binfos.
        * pt.c (instantiate_class_template): Likewise.
        * tree.c (reverse_path): Remove 'copy' parm; always make a
        temporary copy.
        * class.c (build_vbase_path): Just call it.
        * search.c (compute_access): Likewise.  Don't re-reverse.

1998-08-27  Mark Mitchell  <mark@markmitchell.com>

        * class.c (build_vbase_path): Use reverse_path.
        (finish_base_struct): Move warnings for inaccessible bases to
        layout_basetypes.
        (modify_one_vtable): Remove check of TREE_USED (binfo).
        (fixup_vtable_deltas1): Likewise.
        * cp-tree.h (BINFO_INHERITANCE_CHAIN): Document here.
        (xref_tag): Remove binfos parameter.
        (make_binfo): Remove chain parameter.
        (reverse_path): Add copy parameter.
        * decl.c (init_decl_processing): Change calls to xref_tag.
        (xref_tag): Remove binfos parameter.
        (xref_basetypes): Change calls to make_binfo.
        * decl2.c (grok_x_components): Change calls to xref_tag.
        (handle_class_head): Likewise.
        * friend.c (do_friend): Likewise.
        * lex.c (make_lang_type): Change calls to make_binfo.
        * parse.y (structsp): Change calls to xref_tag.
        (named_complex_class_head_sans_basetype): Likewise.
        (named_class_head): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        * search.c (compute_access): Change calls to reverse_path.
        (dfs_get_vbase_types): Change calls to make_binfo.
        (get_vbase_types): Remove dead code.
        * tree.c (unshare_base_binfos): Change calls to make_binfo.
        (layout_basetypes): Warn here about inaccessible bases.
        (make_binfo): Remove chain parameter.
        (reverse_path): Add copy parameter.

1998-08-27  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c: #if 0 complete_type_p.
        * init.c (build_java_class_ref, build_new_1): Remove unused locals.
        * method.c (process_overload_item): Likewise.
        * typeck.c (comp_target_types): Likewise.

        Stop sharing binfos for indirect virtual bases.
        * tree.c (propagate_binfo_offsets): Unshare vbases, too.
        (layout_basetypes): Likewise.
        (unshare_base_binfos): Copy vbases, too.
        * cp-tree.h (BINFO_VIA_PUBLIC, BINFO_BASEINIT_MARKED,
        BINFO_VBASE_INIT_MARKED): Remove obsolete macros.
        (BINFO_PUSHDECLS_MARKED, SET_BINFO_PUSHDECLS_MARKED,
        CLEAR_BINFO_PUSHDECLS_MARKED): New macros.
        * search.c (lookup_field, lookup_fnfields, lookup_member): Remove
        reference to BINFO_VIA_PUBLIC.
        (marked_pushdecls_p, unmarked_pushdecls_p): New fns.
        (push_class_decls): Use them.
        (dfs_pushdecls): Use SET_BINFO_PUSHDECLS_MARKED.
        (dfs_compress_decls): Use CLEAR_BINFO_PUSHDECLS_MARKED.

1998-08-27  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (build_enumerator): Set DECL_CONTEXT for the
        CONST_DECLs.

1998-08-26  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (finish_enum): Change prototype.
        * decl.c (finish_enum): Use TYPE_VALUES, rather than taking a
        VALUES parameter.  Don't try to compute mins/maxs if
        processing_template_decl.
        * parse.y (structsp): Use new calling sequence for finish_enum.
        * pt.c (tsubst_enum): Likewise.  Take the new type as input.
        (lookup_template_class): Remove unused variables.  Tweak.
        Register enums on instantiation list before substituting
        enumeration constants.
        (tsubst_decl): Remove unused variables.
        (regenerate_decl_from_template): Likewise.

        * decl.c (duplicate_decls): Don't obliterate the
        DECL_TEMPLATE_INFO for a template if we're not replacing it with
        anything.

        * lex.c (do_identifier): Fix typo in comment.

Wed Aug 26 10:54:51 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * errfn.c: Remove stdarg.h/varargs.h.
        * tree.c: Likewise.

1998-08-25  Brendan Kehoe  <brendan@cygnus.com>

        * pt.c (tsubst_copy): Only do typename overloading on an
        IDENTIFIER_NODE that happens to look like a typename if it actually
        has a type for us to use.

1998-08-25  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (comp_cv_target_types): Split out...
        (comp_target_types): From here.  Don't allow cv-qual changes under
        a pointer if nptrs == 0.  Fix OFFSET_TYPE handling.
        (build_ptrmemfunc): Pass 1 to nptrs.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.

1998-08-25  Mark Mitchell  <mark@markmitchell.com>

        * search.c (dependent_base_p): Don't compare a binfo to
        current_class_type; use the TREE_TYPE of the binfo instead.

        * cp-tree.h (CLASS_TYPE_P): Revise definition.

1998-08-25  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (duplicate_decls): Don't complain about different
        exceptions from an internal decl even if pedantic.

        * typeck.c (convert_for_assignment): Converting from pm of vbase
        to derived is an error, not a sorry.

        * call.c (build_over_call): Use convert_pointer_to_real for 'this'.
        * class.c (fixed_type_or_null): Rename from
        resolves_to_fixed_type_p.  Return the dynamic type of the
        expression, if fixed, or null.
        (resolves_to_fixed_type_p): Use it.  Return 0 if the dynamic type
        does not match the static type.
        (build_vbase_path): Rename 'alias_this' to 'nonnull'.  Use
        resolves_to_fixed_type_p again.

1998-08-24  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (tsubst_decl): Move special case code for dealing with
        tricky friend templates here from ...
        (regenerate_decl_from_template): Here.

1998-08-24  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (start_decl): Remove redundant linkage check.

1998-08-24  Gavin Romig-Koch  <gavin@cygnus.com>

        * typeck.c (c_expand_return): Handle the case that valtype
        is wider than the functions return type.

1998-08-24  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (CLASS_TYPE_P): New macro.
        * decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE.
        * pt.c (process_template_parm): Undo previous change.

1998-08-24  Benjamin Kosnik  <bkoz@cygnus.com>

        * cp-tree.h: Declare.
        * pt.c (decl_template_parm_p): New function.
        * decl.c (pushdecl): Check decls for redeclaring template parms.
        (xref_tag): Make redeclaration an error, print decl.
        * decl2.c (grokfield): Check field_decls for redeclaration as well.

1998-08-24  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (primary): Fix up the type of string constants.

1998-08-24  Mark Mitchell  <mark@markmitchell.com>

        * typeck.c (convert_for_initialization): Move check for odd uses
        of NULL to avoid duplicate warnings.

1998-08-24  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (lvalue_type): Fix for arrays.
        * typeck.c (string_conv_p): New fn.
        (convert_for_assignment): Use it.
        (build_unary_op): Use lvalue_type.
        * call.c (standard_conversion, convert_like): Use string_conv_p.
        (add_function_candidate): Use lvalue_type.
        * cvt.c (convert_to_reference): Likewise.
        * decl2.c (lang_decode_option): Ignore -traditional.
        * decl.c (init_decl_processing): flag_writable_strings inhibits
        flag_const_strings.

1998-08-24  Andrew MacLeod  <amacleod@cygnus.com>

        * lang-options.h (lang_options): Add fconst-strings to the list
        of valid options.
        * decl2.c (lang_f_options, lang_decode_option): Likewise.

1998-08-24  Nathan Sidwell  <nathan@acm.org>

        * lex.c (real_yylex): Don't warn about long long constants if
        we're allowing long long.

1998-08-24  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (pushdecl): Use IDENTIFIER_NAMESPACE_VALUE instead of
        accessing bindings directly.

        * search.c (my_tree_cons): Reimplement.

        * lang-specs.h: Remove __HONOR_STD.
        * inc/exception, inc/new, inc/new.h, inc/typeinfo: Likewise.

1998-08-23  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Complain about in-class initialization
        of aggregates and/or references.
        * pt.c (process_template_parm): Clear IS_AGGR_TYPE for
        TEMPLATE_TYPE_PARMs.

        * decl2.c (grok_array_decl): Add comment.
        (mark_used): Don't instantiate an explicit instantiation.
        * friend.c (make_friend_class): Remove bogus comment.  Fix check
        for partial specializations.
        * pt.c (check_explicit_specialization): Don't
        SET_DECL_EXPLICIT_INSTANTIATION here.
        (mark_decl_instantiated): Or here.
        (do_decl_instantiation): Do it here, instead.  Add checks for
        duplicate explicit instantiations, etc.  Tidy.
        (do_type_instantiation): Likewise.
        (instantiate_decl): Improve comments.  Complain about explicit
        instantiations where no definition is available.

        * cp-tree.h (ansi_null_node): Remove.
        * call.c (build_over_call): Warn about converting NULL to an
        arithmetic type.
        * cvt.c (build_expr_type_conversion): Likewise.  Use
        null_ptr_cst_p instead of expanding it inline.
        * decl.c (ansi_null_node): Remove.
        (init_decl_processing): Make null_node always have integral type.
        * except.c (build_throw): Warn about converting NULL to an
        arithmetic type.
        * lex.c (init_parse): Remove handling of ansi_null_node.
        * pt.c (type_unification_real): Don't convert NULL to void* type.
        * typeck.c (build_binary_op_nodefault): Fix NULL warnings.
        (convert_for_assignment): Warn about converting NULL to an
        arithmetic type.
        (convert_for_initialization): Likewise.

1998-08-20  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (search_tree, no_linkage_helper, no_linkage_check): New fn.
        * pt.c (coerce_template_parms): Use no_linkage_check.
        * decl.c (grokvardecl): Likewise.
        (grokfndecl): Likewise.  Members of anonymous types have no linkage.

        * method.c (process_overload_item): Remove useless code.

1998-08-20  Per Bothner  <bothner@cygnus.com>

        Handle new'ing of Java classes.
        * init.c (build_class_classref):  New function.
        (build_new_1):  If type is TYPE_FOR_JAVA:  Call _Jv_AllocObject;
        constructor does not return this;  don't need to exception-protect.

        * pt.c (lookup_template_class):  Copy TYPE_FOR_JAVA flag.
        * decl2.c (acceptable_java_type):  Handle template-derived types.

1998-08-20  Per Bothner  <bothner@cygnus.com>

        * decl2.c (import_export_vtable):  Suppress vtables for Java classes.

1998-08-20  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (duplicate_decls): Always merge the old and new patterns
        for templates, regardless of whether or not the new one has
        DECL_INITIAL.  Don't throw away specializations.  Merge
        DECL_SAVED_TREE.
        * pt.c (tsubst_decl): Use the right pattern when calculating the
        complete args for a new template instance.
        (do_decl_instantiation): Fix typo in comment.
        (regenerate_decl_from_template): Deal with tricky friend template
        case.
        (instantiate_decl): Likewise.

Thu Aug 20 09:09:45 1998  Jeffrey A Law  (law@cygnus.com)

        * init.c (build_builtin_delete_call): Add missing assemble_external
        call.

1998-08-20  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (notype_unqualified_id): Also accept ~A<int>.

1998-08-19  Mark Mitchell  <mark@markmitchell.com>

        * typeck.c (build_binary_op_nodefault): Warn on use of NULL in
        arithmetic.
        * except.c (build_throw): Warn when NULL is thrown, even with
        -ansi.  Use ansi_null_node, rather than integer_zero_node, in the
        thrown expression.

        * cp-tree.h (ansi_null_node): New variable.
        * decl.c (ansi_null_node): New variable.
        (init_decl_processing): Initialize its type.
        * lex.c (init_parse): Initialize its value.  Use ansi_null_node
        for null_node in non-ANSI mode.
        * typeck.c (build_binary_op_nodefault): Use ansi_null_node in
        place of null_node to avoid spurious errors.

1998-08-17  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (enter_scope_of): New function.
        * parse.y (complex_direct_notype_declarator): Use it.
        * semantics.c (enter_scope_of): New function.

1998-08-17  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokparms): No, here.

        * decl.c (grokdeclarator): Catch parm with pointer to array of
        unknown bound here...
        * method.c (process_overload_item): ...not here.

        * gxxint.texi: Remove obsolete documentation of overloading code.

        * decl.c (finish_enum): Also set TYPE_SIZE_UNIT.
        * class.c (finish_struct_bits): Likewise.

        * tree.c (lvalue_type): Fix for arrays.
        * typeck.c (build_unary_op): Use lvalue_type.
        * call.c (add_function_candidate): Likewise.
        * cvt.c (convert_to_reference): Likewise.

        * decl2.c (lang_decode_option): Ignore -traditional.

        * init.c (build_offset_ref): Don't mess with error_mark_node.
        * lex.c (do_scoped_id): Use cp_error.

        * rtti.c (get_tinfo_fn): Don't mess with the context for now.

1998-08-17  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * decl.c (grokdeclarator): Allow anonymous types to be cv-qualified.

Mon Aug 17 10:40:18 1998  Jeffrey A Law  (law@cygnus.com)

        * cp-tree.h (set_identifier_local_value): Provide prototype.

        * decl2.c (do_namespace_alias): Remove unused variables `binding'
        and `old'.

Fri Aug 14 16:42:27 1998  Nick Clifton  <nickc@cygnus.com>

        * Makefile.in: Rename BBISON to BISON so that it can be properly
        inherited from the parent makefile.

1998-08-13  Jason Merrill  <jason@yorick.cygnus.com>

        * lang-options.h: Add -finit-priority.
        * decl2.c: Likewise.  Check flag_init_priority instead of
        USE_INIT_PRIORITY.

        * decl2.c (setup_initp): New fn.
        (start_objects, finish_objects, do_ctors): Handle init_priority.
        (do_dtors, finish_file): Likewise.

1998-08-13  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst_copy): Hush warning.

        * rtti.c (get_tinfo_fn): Also set DECL_IGNORED_P.

1998-08-12  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (print_template_context): Don't abort when instantiating a
        synthesized method.

        * decl.c (grokdeclarator): Issue errors on namespace qualified
        declarators in parameter lists or in class scope.

1998-08-09  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (check_explicit_specialization): Don't abort on bogus
        explicit instantiations.

1998-08-07  Mark Mitchell  <mark@markmitchell.com>

        * typeck.c (require_complete_type): Use complete_type_or_else.
        (complete_type_or_else): Always return NULL_TREE on failure, as
        documented.

        * pt.c (tsubst_aggr_type): Prototype.
        (tsubst_decl): New function, split out from tsubst.  Set
        input_filename and lineno as appropriate.
        (pop_tinst_level): Restore the file and line number saved in
        push_tinst_level.
        (instantiate_class_template): Set input_filename and lineno as
        appropriate.
        (tsubst): Move _DECL processing to tsubst_decl.  Make sure the
        context for a TYPENAME_TYPE is complete.

        * decl2.c (grokbitfield): Issue errors on bitfields declared with
        function type.
        (do_dtors): As in do_ctors, pretend to be a member of the same
        class as a static data member while generating a call to its
        destructor.

        * cvt.c (cp_convert_to_pointer): Handle NULL pointer
        conversions, even in complex virtual base class hierarchies.

1998-08-06  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (ENUM_TEMPLATE_INFO): New macro.
        (TYPE_TEMPLATE_INFO): Likewise.
        (SET_TYPE_TEMPLATE_INFO): Likewise.
        (ENUM_TI_TEMPLATE): Likewise.
        (ENUM_TI_ARGS): Likewise.
        (lookup_nested_type_by_name): Remove.
        * decl.c (maybe_process_template_type_declaration): Handle enums.
        (start_enum): Don't check for primary-template enum declarations
        here.
        (finish_enum): Clean up, document.  Make sure template enum
        constants get the correct type.
        (build_enumerator): Copy initializers for template enumerations,
        too.
        (grok_enum_decls): Document.
        * lex.c (do_identifier): Document use of LOOKUP_EXPR a bit
        better.  Build LOOKUP_EXPRs for local variables, even if they are
        TREE_PERMANENT.
        * pt.c (tsubst_enum): Remove field_chain parameter.
        (template_class_depth): Include the depth of surrounding function
        contexts.
        (push_template_decl): Check for primary-template enum declarations
        here.  Deal with enumeration templates.
        (lookup_template_class): Likewise.
        (for_each_template_parm): Likewise.
        (instantiate_class_template): Don't call tsubst_enum directly,
        call tsubst instead, to instantiate enums.  Deal with all
        field_chain issues here, not in tsubst_enum.
        (lookup_nested_type_by_name): Remove.
        (tsubst_aggr_type): Revise handling of enumeration types.
        (tsubst): Likewise.
        (tsubst_copy): Likewise.
        (tsubst_expr): Call tsubst, not tsubst_enum for TAG_DEFNs.

1998-08-04  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (pushtag): Don't mangle the name of a TYPE_DECL if it
        uses template parameters.
        * method.c (build_template_parm_names): Use the full set of
        template arguments for tsubst'ing.
        (build_overload_identifier): Pass the full set of template
        arguments to build_template_parm_names, not just the
        innermost_args.
        * pt.c (TMPL_ARGS_DEPTH): Define using
        TMPL_ARGS_HAVE_MULTIPLE_LEVELS, for clarity.
        (NUM_TMPL_ARGS): New macro.
        (add_outermost_template_args): Deal with the case where the outer
        args will be completely discarded.
        (coerce_template_parms): Use the full set of template arguments
        for tsubst'ing.  Simplify.  Add some asserts.  Improve
        error messages.
        (lookup_template_class): Pass the full set of template arguments
        to coerce_template_parms.
        (tsubst): Add assertion.
        (do_type_instantiation): Don't instantiate member template
        classes.

        * init.c (build_offset_ref): Deal with a TEMPLATE_ID_EXPR whose
        name is a LOOKUP_EXPR, rather than an IDENTIFIER_NODE.

1998-08-03  Jason Merrill  <jason@yorick.cygnus.com>

        * method.c (set_mangled_name_for_decl): Change return type to void.

        * decl.c (lookup_name_real): A namespace-level decl takes priority
        over implicit typename.  Avoid doing the same lookup twice.

        * search.c (dependent_base_p): New fn.
        (dfs_pushdecls, dfs_compress_decls): Use it.

        * typeck.c (get_member_function_from_ptrfunc): Don't try to handle
        virtual functions if the type doesn't have any.

1998-08-03  Mark Mitchell  <mark@markmitchell.com>

        * decl2.c (grokfield): Don't mangle the name of a TYPE_DECL if it
        uses template parameters.

1998-08-02  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.def (LOOKUP_EXPR): Document.  Remove second argument.
        * cp-tree.h (DECL_TI_TEMPLATE): Improve documentation.
        * lex.c (do_identifier): Don't use a second argument, or a type,
        when building LOOKUP_EXPRs.
        (do_identifier): Likewise.
        (do_scoped_id): Likewise.
        * method.c (hack_identifier): Improve error message.
        * pt.c (lookup_template_function): Don't needlessly call
        copy_to_permanent or build_min.
        (tsubst_copy): Remove #if 0'd code.  tsubst into LOOKUP_EXPRs if
        necessary.
        (do_decl_instantiation): Improve error message.
        * tree.c (mapcar, case LOOKUP_EXPR): Don't be sorry; make a copy.
        (build_min): Copy the type to the permanent obstack, too.

1998-08-01  Jason Merrill  <jason@yorick.cygnus.com>

        * init.c (init_init_processing): Remove BI* handling.
        (build_builtin_call): Remove.
        (build_builtin_delete_call): New fn.
        (build_delete): Use it.

1998-07-31  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
        (maybe_check_template_type): New function.
        * decl.c (maybe_process_template_type_declaration): New function,
        split out from pushtag  Call maybe_check_template_type.
        (pushtag): Use it.  Use PROCESSING_REAL_TEMPLATE_DECL_P.
        (xref_tag): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        * friend.c (do_friend): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        * pt.c (template_class_depth_real): Generalization of ...
        (template_class_depth): Use it.
        (register_specialization): Use duplicate_decls for duplicate
        declarations of specializations.
        (maybe_check_template_type): New function.
        (push_template_decl_real): Fix comment.
        (convert_nontype_argument): Likewise.
        (lookup_template_class): Likewise.  Avoid an infinite loop on
        erroneous code.
        (tsubst_friend_function): Fix comment.
        (tsubst, case FUNCTION_DECL): Deal with a DECL_TI_TEMPLATE that is
        an IDENTIFIER_NODE.
        * semantics.c (begin_function_definition): Use
        reset_specialization to note that template headers don't apply
        directly to declarations after the opening curly for a function.

1998-07-29  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (push_overloaded_decl): Use current_namespace instead of
        DECL_CONTEXT (decl) to determine where we go.

        * decl.c (lookup_name_real): Fix typo.

1998-07-28  Mark Mitchell  <mark@markmitchell.com>

        * friend.c (is_friend): Be lenient with member functions to deal
        with nested friends.

1998-07-28  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (finish_struct_1): Convert integer_zero_node to
        ssizetype before passing it to set_rtti_entry.
        * typeck2.c (initializer_constant_valid_p): Allow conversion of 0
        of any size to a pointer.

1998-07-27  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
        (build_template_decl_overload): Remove.
        (set_mangled_name_for_decl): New function.
        (innermost_args): Remove is_spec parameter.
        (most_specialized, most_specialized_class): Remove declarations.
        (lookup_template_class): Add entering_scope parameter.
        (maybe_process_partial_specialization): New function.
        (finish_template_decl): Likewise.
        (finish_template_type): Likewise.
        * class.c (finish_struct): Clean up processing of member template
        specializations.
        * decl.c (pushtag): Fix formatting.
        (lookup_tag): Improve handling of pseudo-global levels.
        (make_typename_type): Adjust call to lookup_template_class.
        (shadow_tag): Use maybe_process_partial_specialization.
        (xref_tag): Improve handling of member friends.
        (start_function): Call push_nested_class before
        push_template_decl.  Don't call push_template_decl for
        specializations.
        * decl2.c (grok_x_components): Don't call xref_tag for
        template instantiations.  Handle UNION_TYPEs like RECORD_TYPEs.
        (grokclassfn): Use set_mangled_name_for_decl.
        (arg_assoc_class): Adjust call to innermost_args.
        (mark_used): Don't call instantiate_decl for a TEMPLATE_DECL.
        * error.c (dump_function_name): Improve printing of template
        function names.
        * friend.c (is_friend): Don't compare types of decls to determine
        friendship, unless flag_guiding_decls.
        (make_friend_class): Partial specializations cannot be friends.
        (do_friend): Use set_mangled_name_for_decl.  Call
        push_template_decl_real instead of push_template_decl.
        * method.c (build_decl_overload_real): Remove prototype.  Give it
        external linkage.
        (build_overload_identifier): Adjust call to innermost_args.
        (build_template_decl_overload): Remove.
        (set_mangled_name_for_decl): New function.
        * parse.y (.finish_template_type): New non-terminal.
        (template_def): Use finish_template_decl.  Use template_extdef
        instead of extdef.
        (template_extdef, template_datadef): New non-terminals, containing
        only those rules for things which can be templates.
        (datadef): Tidy.
        (template_type, self_template_type): Use .finish_template_type.
        (named_class_head): Use maybe_process_partial_specialization.
        * pt.c (mangle_class_name_for_template): Remove context parameter.
        (get_class_bindings): Remove outer_args parameter.
        (complete_template_args): Remove.
        (add_outermost_template_args): New function.
        (register_specialization): Return the specialization.
        (unregister_specialization): New function.
        (tsubst_template_parms): Likewise.
        (most_specialized, most_specialized_class): Prototype here as
        static.
        (original_template): Rename to most_general_template.
        (tsubst_template_parms): New function.
        (set_mangled_name_for_template_decl): Likewise.
        (TMPL_ARGS_DEPTH): New macro.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Adjust.
        (TMPL_ARGS_LEVEL): New macro.
        (SET_TMPL_ARGS_LEVEL): Likewise.
        (TMPL_ARG): Likewise.
        (SET_TMPL_ARG): Likewise.
        (TMPL_ARGS_DEPTH): Likewise.
        (finish_member_template_decl): Use finish_template_decl.
        (maybe_process_partial_specialization): New function, split out
        from tsubst.
        (inline_needs_template_parms): Use TMPL_PARMS_DEPTH.
        (maybe_begin_member_template_processing): Use new macros.
        (is_member_template): Likewise.
        (is_member_template_class): Likewise.
        (add_to_template_args): Likewise.  Deal with multiple levels of
        args.
        (maybe_process_partial_specialization): New function.
        (retrieve_specialization): Add consistency check.
        (determine_specialization): Return full argument list.
        (check_explicit_specialization): Tweak friend handling.  Use full
        argument lists.  Simplify.
        (current_template_args): Use new macros.
        (push_template_decl_real): Change ill-named mainargs to specargs.
        Check that a partial specialization actually specializes at least
        one parameter.   Improve friend handling.  Modify for full
        template arguments.
        (classtype_mangled_name): Don't mangle the names of
        specializations.
        (lookup_template_class): Add entering_scope parameter.  Use it to
        avoid finding a template type when an instantiation is required.
        Simplify.  Use full template arguments.
        (tsubst_friend_function): Use unregister_specialization.  Use new
        macros.  Use full template arguments.
        (tsubst_friend_class): Substitute, using tsubst_template_parms,
        into the template parameters before passing them to
        redeclare_class_template.
        (instantiate_class_template): Simplify.  Use full template
        arguments.  Adjust calls to get_class_bindings.  Use
        SET_IDENTIFIER_TYPE_VALUE where needed.  Improve friend handling.
        (innermost_args): Use new macros.
        (tsubst_aggr_type): New function, split out from tsubst.
        (tsubst): Use tsubst_aggr_type, tsubst_template_parms, new calling
        conventions for lookup_template_class.  Refine handling of partial
        instantiations.   Remove calls to complete_template_args.
        Simplify.  Add consistency checks.  Use set_mangled_name_for_decl
        and set_mangled_name_for_template_decl.
        (tsubst_copy): Use tsubst_aggr_type.
        (instantiate_template): Use full template arguments.
        (more_specialized): Improve formatting.
        (more_specialized_class): Adjust calls to get_class_bindings.
        (get_bindings_real): Don't call complete_template_args.
        (most_specialized): Don't overwrite input; create a new list.
        (most_specialized_class): Use most_general_template.
        (regenerate_decl_from_template): Use unregister_specialization.
        Use full template arguments.
        (instantiate_decl): Use full template arguments.
        (set_mangled_name_for_template_decl): New function.
        * semantics.c (begin_class_definition): Use
        maybe_process_partial_specialization.
        (finish_member_class_template): New function.
        (finish_template_decl): Likewise.
        (finish_template_type): Likewise.
        (typeck.c): Don't crash after issuing a compiler_error.
        * Makefile.in (CONFLICTS): Adjust; we removed a s/r conflict.

1998-07-27  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (build_functional_cast): Handle default-initialization.

        * call.c (build_over_call): Pass 1 to popclass.

        * parse.y (direct_notype_declarator): Add precedence declaration
        to notype_unqualified_id case.
        * Makefile.in (EXPECT): Adjust.

        * tree.c (ovl_member): Fix for single function in OVL.

1998-07-27  Dave Brolley  <brolley@cygnus.com>

        * c-lex.c (yylex): Fix boundary conditions in character literal and
        string literal loops.

1998-07-24  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lookup_name_real): OK, do return the from_obj value
        unless got_object depends on template parms.

        * parse.y (nested_name_specifier_1): Pull out the TYPE_MAIN_VARIANT.

        * pt.c (coerce_template_parms): Also complain about local enums.

        * cp-tree.h: Add prototype for set_identifier_local_value.
        * decl.c (set_identifier_local_value_with_scope): Make static,
        prototype.
        * search.c (covariant_return_p): Likewise.
        * except.c (build_terminate_handler, alloc_eh_object): Likewise.

        * call.c (build_method_call): Only pull out the type of a destructor
        if it's a template type parm.
        * decl.c (lookup_name_real): Never return the from_obj value.

1998-07-23  Jason Merrill  <jason@yorick.cygnus.com>

        * except.c (process_start_catch_block_old): Call start_decl_1 for
        catch parm.
        * decl.c (start_decl_1): Avoid duplicate error.

        * init.c (expand_default_init): Only perform the initialization if
        it will do something.

1998-07-23  H.J. Lu  (hjl@gnu.org)

        * parse.y (base_class): Check for invalid base class.

1998-07-23  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (import_export_template): Fold in...
        (import_export_class): ...to here.  Handle dllimport/export.

        * class.c (build_vtable): Pass at_eof to import_export_vtable.
        (prepare_fresh_vtable): Likewise.
        * decl2.c (import_export_class): Split out...
        (finish_prevtable_vardecl): From here.
        * class.c (finish_struct_1): Call import_export_class if at_eof.

        * decl.c (start_function): #if 0 mysterious code I wrote and have
        forgotten why.
        * rtti.c (get_tinfo_fn): If this is for a class type, set
        DECL_CONTEXT.

1998-07-22  Jason Merrill  <jason@yorick.cygnus.com>

        * inc/exception: Change terminate and unexpected to ().

        * parse.y (named_class_head_sans_basetype_defn): A
        named_class_head_sans_basetype followed by '{' or ':' is a defn.

1998-07-21  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (canonical_type_variant): New fn to handle arrays.
        * cp-tree.h (CANONICAL_TYPE_VARIANT): Remove.
        * pt.c (unify, default case): Also fold arg.  Fix array bounds case.
        * method.c (process_overload_item): Use build_overload_value for
        arrays.

1998-07-20  Dave Brolley  <brolley@cygnus.com>

        * lex.c (mbchar.h): #include it.
        (GET_ENVIRONMENT): New macro.
        (init_parse): Set character set based on LANG environment variable.
        (real_yylex): Handle multibyte characters in character literals.
        (real_yylex): Handle multibyte characters in string literals.

1998-07-19  Jason Merrill  <jason@yorick.cygnus.com>

        * lex.c (do_identifier): Look for class value even if we don't
        have a global value.  Do implicit declaration if parsing is 2.
        * semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
        lookup.

1998-07-19  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (pushtag): Revert previous change.
        * pt.c (lookup_template_class): Don't put out debugging
        information for types that use template parameters.

        * decl.c (pushtag): Don't put out debugging information for
        compiler-generated typedefs.

        * error.c (dump_type_real): Don't crash when presented with
        intQI_type_node or the like.

        * semantics.c (finish_translation_unit): Fix spelling error in
        comment.

1998-07-17  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lookup_name_real): Pull out single function here.
        (select_decl): Not here.
        (unqualified_namespace_lookup): Use CP_DECL_CONTEXT.

        * decl.c (qualify_lookup): Tweak again.

        * pt.c (lookup_template_class): Don't mess with the context of the
        instantiation.
        * decl2.c (current_decl_namespace): Remove special handling for
        templates.

        * pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
        a member template specialization.

        * tree.c (ovl_member): Use decls_match to compare functions.
        * decl.c (decls_match): Check the context of a function.

        * parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER
        in Koenig lookup support rules.
        * semantics.c (finish_call_expr): Handle the new cases.

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

        * decl.c (grokvardecl): Don't call build_static_name for extern "C".

1998-07-16  Mark Mitchell  <mark@markmitchell.com>

        * semantics.c (finish_object_call_expr): Revert previous change.
        * call.c (build_new_method_call): Likewise.  Instead, convert
        TYPE_DECLs to IDENTIFIERs here, in the presence of templates.

1998-07-16  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (qualify_lookup): Handle templates.

        * decl2.c (do_using_directive): Don't pass ancestor.
        * decl.c (push_using_directive): Calculate ancestor.

        * decl2.c (do_nonmember_using_decl): Allow for type shadowing.
        * decl.c (pushdecl): Move type shadowing handling from here...
        (duplicate_decls): ...to here.
        * decl.c (set_identifier_local_value_with_scope): New fn.
        (pushdecl): Use it.
        (set_identifier_local_value, lookup_type_current_level): New fns.
        * decl2.c (do_local_using_decl): Handle types and binding level
        stuff properly.

        * init.c (build_offset_ref): Don't call mark_used on an OVERLOAD.
        * decl.c (select_decl): Extract a lone function from an OVERLOAD.
        (lookup_namespace_name): Likewise.
        * typeck.c (build_unary_op): Not here anymore.

        * decl2.c (do_class_using_decl): Make sure we get an identifier.
        * class.c (handle_using_decl): Ignore TYPE_DECLs.

        * decl.c (qualify_lookup): New fn.
        (lookup_name_real): Use it.

1998-07-16  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (add_using_namespace): When directly using a namespace
        that was indirect before, promote it.

        * cp-tree.h (LOOKUP_PREFER_TYPES, LOOKUP_PREFER_NAMESPACES,
        LOOKUP_PREFER_BOTH, LOOKUP_NAMESPACES_ONLY, LOOKUP_TYPES_ONLY,
        LOOKUP_QUALIFIERS_ONLY, LOOKUP_TEMPLATES_EXPECTED): New macros.
        * decl.c (select_decl): Replace two flag parameters by one.
        (unqualified_namespace_lookup): Likewise, pass flag.
        (lookup_flags): New function.
        (lookup_name_real): Compute flags, pass them.
        (lookup_namespace_name): Call with zero-flag.
        * decl2.c (ambiguous_decl): Add flag parameter, complain only
        according to flags.
        (lookup_using_namespace, qualified_lookup_using_namespace):
        Add flag parameter, pass them through.
        * lex.c (do_scoped_id): Call with zero-flag.

1998-07-16  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (convert_for_assignment): Use comptypes.

1998-07-16  Mark Mitchell  <mark@markmitchell.com>

        * semantics.c (finish_object_call_expr): Move test for the
        function called being a TYPE_DECL to ...
        * call.c (build_new_method_call): Here.

1998-07-15  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (arg_assoc_class): Also look at template arguments, if any.
        (arg_assoc): Handle error_mark_node and multiple levels of TREE_LIST.

        * lex.c (looking_for_typename): Don't initialize.

        * decl2.c (ambiguous_decl): Clarify error message.

        * decl.c (push_using_directive): Iterate over namespaces used
        indirectly.

1998-07-15  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (add_using_namespace): Iterate over namespaces used
        indirectly.

        * decl.c (lookup_name_real): Accept namespace aliases as locals.
        (cat_namespace_levels): Ignore aliases.
        (duplicate_decls): Ignore duplicate aliases.
        * decl2.c (do_namespace_alias): Process block level namespace
        aliases.  Store alias with pushdecl.  Remove odr errors.
        * parse.y (namespace_alias): New non-terminal.
        (extdef): Use it.

1998-07-15  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (arg_assoc_type): Handle METHOD_TYPE like FUNCTION_TYPE.
        Handle TEMPLATE_TYPE_PARM.
        (arg_assoc): Rewrite.

        * pt.c (complete_template_args): Don't look at the context unless
        we have to.

        * method.c (build_decl_overload_real): Fix namespace handling.

        * typeck.c (build_unary_op): Extract a lone function from an
        OVERLOAD.

        * call.c (build_scoped_method_call): Handle getting a namespace
        for basetype in a destructor call.
        (check_dtor_name): Handle enums.

        * parse.y (using_directive): New nonterminal.
        (extdef, simple_stmt): Use it.

1998-07-14  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (add_function): Move error message ...
        (arg_assoc_namespace): ... from here.

1998-07-14  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (namespace_qualifier): Fix multiple level handling.
        * decl2.c (namespace_ancestor): Use CP_DECL_CONTEXT.
        (arg_assoc): Don't skip the first argument of a function.

Tue Jul 14 20:09:22 1998  Jeffrey A Law  (law@cygnus.com)

        * search.c (my_tree_cons): Clean up.

1998-07-14  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (joust): Don't warn about "confusing" conversions to the
        same type.

1998-07-14  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * class.c (push_nested_class): Complain about namespaces.
        * decl.c (start_decl): Enter the object's namespace.
        (cp_finish_decl): Leave it.
        (grokdeclarator): Likewise.
        * decl2.c (check_decl_namespace): New function.
        (finish_file): Call it.
        * parse.y (complex_direct_notype_declarator): Set complexity
        of namespace-qualified ids to -1, enter the namespace.

        * method.c (build_template_decl_overload): Expect _DECL as first
        parameter.  Put context temporarily into current_namespace.
        * pt.c (check_explicit_specialization): Change caller.
        (tsubst): Likewise.

        * init.c (build_offset_ref): Call mark_used and
        convert_from_reference for namespace members.

Mon Jul 13 23:25:28 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * search.c (my_tree_cons): The bitfield is at index 2.

Mon Jul 13 17:21:01 1998  Nick Clifton  <nickc@cygnus.com>

        * lang-options.h: Format changed to work with new --help support
        in gcc/toplev.c

1998-07-12  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl2.c (build_expr_from_tree): Change calls of do_identifier.
        Do Koenig lookup in CALL_EXPR.
        (arg_assoc): Handle error_mark.
        * lex.c (is_global): New function.
        (do_identifier): Expect arguments for Koenig lookup.
        * parse.y (primary): Add rules for calls of unqualified function calls.
        (do_id): Change call of do_identifier.
        * pt.c (finish_stmt_expr): Likewise.
        * semantics.c (finish_id_expr): Likewise.
        (finish_call_expr): Add integer parameter to indicate
        argument-dependent lookup.

        * decl.c (struct binding_level): New field using_directives.
        (push_using_decl): Not sorry anymore.
        (push_using_directive): New function.
        (lookup_tag): Use CP_DECL_CONTEXT to iterate.
        (unqualified_namespace_lookup): New function, code from ...
        (lookup_name_real): ... here.
        * decl2.c (lookup_using_namespace): Pass using list instead of
        initial scope.
        (validate_nonmember_using_decl): New function.
        (do_nonmember_using_decl): New function.
        (do_toplevel_using_decl): Use them.
        (do_local_using_decl): New function.
        (do_using_directive): Support block-level directives.
        * parse.y (simple_stmt): Support using declarations and
        directives.
        (namespace_qualifier, namespace_using_decl): New non-terminals.

        * xref.c (classname): New function.
        (GNU_xref_hier): Change class and base parameters to tree.
        * decl.c (xref_baseypes): Change caller.
        * friend.c (make_friend_class): Likewise.

1998-07-12  Kriang Lerdsuwanakij  <lerdsuwa@scf-fs.usc.edu>

        * typeck.c (comptypes, case TEMPLATE_TEMPLATE_PARM): Add parameter
        comparison.

        * pt.c (for_each_template_parm, case TEMPLATE_DECL): If it is a
        template template parameter, record its use.
        (for_each_template_parm, case TEMPLATE_TEMPLATE_PARM): Traverse
        its template arguments if exists.

        * pt.c (coerce_template_template_parms): New function equivalent
        to coerce_template_parms when IS_TMPL_PARM is true.
        (coerce_template_parms): Use it.  Remove the IS_TMPL_PARM parameter,
        all callers changed.

        (coerce_template_parms): Access ARGLIST properly when creating a
        new vector.  Only accept implicit TYPE_DECL as valid argument for
        a template template parameter when it is a base class of
        current_class_type.  Don't display error message when COMPLAIN is
        false.

1998-07-12  Klaus Kaempf  (kkaempf@progis.de)

        * repo.c (get_base_filename): Use file_name_nondirectory.
        (open_repo_file): Likewise.
        * cp-tree.h (file_name_nondirectory): Add prototype.

1998-07-12  Jason Merrill  <jason@yorick.cygnus.com>

        * friend.c (do_friend): Pull the identifier out of declarator.
        Use cp_error and friends.
        * decl2.c (qualified_lookup_using_namespace): Fix call to
        purpose_member.
        * decl.c (lookup_name_real): Don't call complete_type on a namespace.
        (grokvardecl): Use DECL_CLASS_SCOPE_P.
        * cvt.c (convert_pointer_to_real): Check for error_mark_node sooner.
        * class.c (warn_hidden): Fix for OVERLOAD.
        From grahams@rcp.co.uk:
        * cp-tree.h (DEFARG_NODE_CHECK): New macro.
        (DEFARG_LENGTH, DEFARG_POINTER): Use it.

Sun Jul 12 01:20:57 1998  Jeffrey A Law  (law@cygnus.com)

        * g++.1 (-traditional): Remove duplicated documentation.

1998-07-11  Mark Mitchell  <mark@markmitchell.com>

        * method.c (flush_repeats): Add nrepeats parameter.
        (issue_nrepeats): Likewise.
        (is_back_referenceable_type): New function.  Don't back-reference
        TEMPLATE_TYPE_PARMs as well as simple types like integers.
        (build_mangled_name_for_type): Likewise.
        (build_mangled_name_for_type_with_Gcode): Likewise.
        (lasttype): Remove.
        (nrepeats): Likewise.
        (Nrepeats): Likewise.
        (start_squangling): Don't clear the variables removed above.
        (end_squangling): Likewise.
        (flush_repeats): Tidy.  Use nrepeats parameter rather than
        Nrepeats global.
        (issue_nrepeats): Likewise, but with nrepeats global.  Use
        is_backreferenceable_type.
        (build_overload_nested_name): Tidy.  Add comment.  Use
        build_mangled_name_for_type.
        (build_underscore_int): Comment.
        (build_overload_scope_ref): Use build_mangled_name_for_type.
        (build_overload_int): Likewise.
        (build_template_template_parm_names): Tidy.
        (build_template_parm_names): Use build_mangled_name_for_type.
        (build_overload_identifier): Add comments.
        (build_mangled_name_for_type_with_Gcode): Split out from
        build_mangled_name.
        (build_mangled_name_for_type): Use it.
        (build_mangled_name): Rework to use build_mangled_name_for_type
        and to not use global nrepeats/Nrepeats.  Tidy.
        (process_modifiers): Tidy.
        (check_btype): Use is_backreferenceable_type.  Add comment.
        Rename `node' to `type'.
        (process_overload_item): Set numeric_output_need_bar here.
        Use build_mangled_name_for_type.  Tidy.
        (build_decl_overload_real): Tidy.  Don't use Nrepeats.  Use
        build_mangled_name_for_type.

        * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
        for TYPE_DECLs.

1998-07-08  Vladimir N. Makarov  <vmakarov@cygnus.com>

        * cp-tree.h (warn_long_long): Define.
        * decl.c (grokdeclarator): Add flag `warn_long_long' as guard for
        warning "ANSI C++ does not support `long long'".
        * decl2.c (warn_long_long): Define.
        (lang_decode_option): Parse -Wlong-long, -Wno-long-long options.

1998-07-07  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (xref_tag): Handle attributes between 'class' and name.
        * parse.y (aggr): Likewise.
        * semantics.c (finish_class_definition): Likewise.
        * Makefile.in (EXPECTED): Adjust.

        * cp-tree.h: Declare flag_optional_diags and warn_multichar.
        * decl2.c: Define them.
        (lang_decode_option): Handle them.
        * lang-options.h: Add -foptional-diags.
        * class.c (finish_struct): Don't complain about multiple meanings of
        name if -fno-optional-diags.
        * decl.c (pushdecl_class_level): Likewise.
        * lex.c (real_yylex): Check warn_multichar.

1998-07-06  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lookup_tag): Use CP_DECL_CONTEXT.

        * tree.c (make_binfo): Fix length.

1998-06-30  Benjamin Kosnik  <bkoz@bliss.nabi.net>

        * decl2.c (lang_decode_option): Remove warn_template_debugging.
        * lang-options.h: Likewise.

Mon Jun 29 20:17:40 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * except.c (build_eh_type_type_ref): Remove unused variable `susp'.
        (process_start_catch_block): Likewise for variables
        `false_label_rtx', `call_rtx' and `return_value_rtx'.

1998-06-29  Brendan Kehoe  <brendan@cygnus.com>

        * tree.c (build_srcloc): Make sure we allocate this node on the
        permanent obstack.

Sat Jun 27 23:34:18 1998  Fred Fish  <fnf@ninemoons.com>

        * g++spec.c (NEED_MATH_LIBRARY): Define to 1 if not already defined.
        (lang_specific_driver): Initialize need_math with NEED_MATH_LIBRARY.
        (lang_specific_driver): Only add -lm automatically if need_math is
        nonzero.

Sat Jun 27 12:22:56 1998  Jeffrey A Law  (law@cygnus.com)

        * Make-lang.in (g++): Depend on mkstemp.o.  Link in mkstemp.o

Sat Jun 27 07:36:09 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (EXPR_H): New dependency variable.
        (decl2.o): Depend on $(EXPR_H).
        (typeck.o): Likewise.
        (init.o): Likewise.
        (expr.o): Likewise.

1998-06-25  Benjamin Kosnik  <bkoz@lisa.cygnus.com>

        * decl.c (start_enum): Put local enums on permanent_obstack.

1998-06-25  Mark Mitchell  <mark@markmitchell.com>

        * cp-tree.h (c_get_alias_set): Declare.
        * decl.c (init_decl_processing): Set lang_get_alias_set.

1998-06-25  Andrew MacLeod  <amacleod@cygnus.com>

        * cp-tree.h (mark_all_runtime_matches): Add function prototype.
        * except.c (mark_all_runtime_matches): Set TREE_SYMBOL_REFERENCED
        flag for all function decls which are in the exception table.
        * exception.cc (__cplus_type_matcher): Check for CATCH_ALL_TYPE match.
        * decl2.c (finish_file): Call mark_all_runtime_matches to make sure
        code is emitted for any referenced rtti function.

1998-06-25  Dave Brolley  <brolley@cygnus.com>

        * lang-specs.h: Use new | syntax to eliminate
        string concatenation.

1998-06-25  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (CP_DECL_CONTEXT): New macro.
        * decl2.c (is_namespace_ancestor, lookup_using_namespace): Use it.
        * method.c (build_overload_nested_name): Likewise.
        * sig.c (build_signature_pointer_or_reference_type): Don't set
        DECL_CONTEXT.

1998-06-24  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        Set DECL_CONTEXT for globals to NULL_TREE instead of global_namespace.
        * cp-tree.h (FROB_CONTEXT): New macro.
        (DECL_MAIN_P): ::main should have a DECL_CONTEXT of NULL_TREE.
        * decl.c (namespace_binding): Replace NULL_TREE with
        global_namespace.
        (set_namespace_binding, pop_namespace, lookup_name_real): Likewise.
        * decl2.c (is_namespace_ancestor, lookup_using_namespace):
        Likewise.
        * decl.c (pushtag): Use FROB_CONTEXT.
        (pushdecl, make_typename_type, define_function, grokdeclarator):
        Likewise.
        * decl2.c (set_decl_namespace, do_namespace_alias): Likewise.
        * pt.c (push_template_decl_real, lookup_template_class, tsubst):
        Likewise.
        * decl2.c (decl_namespace): Return global_namespace if no context.
        * method.c (build_overload_nested_name): Expect null as context.
        * pt.c (mangle_class_name_for_template): Do nothing for null
        contexts.
        (lookup_template_class): Allow for null id_context.

1998-06-25  Richard Henderson  <rth@cygnus.com>

        * method.c (emit_thunk): Set current_function_is_thunk for the
        ASM_OUTPUT_MI_THUNK case as well.

1998-06-23  Andrew MacLeod  <amacleod@cygnus.com>

        * exception.cc (__cplus_type_matcher): Get a match_info pointer
        instead of an exception table entry as a parameter.

1998-06-23  Andrew MacLeod  <amacleod@cygnus.com>

        * parse.y (function_try_block): Don't call start_catch_handler.
        * except.c (call_eh_info): Remove coerced field from declaration.
        (build_eh_type_type_ref): New function to create an address of a
        rtti function for the new style exception tables.
        (expand_start_catch_block): Split function, this contains the
        common part.
        (process_start_catch_block_old): New function to perform the rest
        of expand_start_catch_block under old style exceptions.
        (process_start_catch_block_old): New function to perform the rest
        of expand_start_catch_block under new style exceptions.
        (expand_end_catch_block): Only pop the false label off the stack under
        the old style of exceptions.
        * semantics.c (finish_try_block): Don't call start_catch_handler.
        * exception.cc (struct cp_eh_info): Add original_value field.
        (__cplus_type_matcher): Perform type matching on the original exception
        value, and if we have a match, set the current value.
        (__cp_push_exception): Set the original exception value.

1998-06-23  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (joust): Fix confusing conversion warning.

        * call.c (build_op_delete_call): Add placement parm.  Check
        LOOKUP_SPECULATIVELY.
        * cp-tree.h, decl2.c, init.c: Adjust.
        * decl.c (finish_function): Use it.

        * pt.c (tsubst): Diagnose creating void fields or variables.

Mon Jun 22 08:50:26 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * call.c (build_scoped_method_call): Remove unused variable `tmp'.

        * cp-tree.h (check_dtor_name): Add prototype.

        * init.c (expand_member_init): Remove unused variables
        `ptr_type_node', `parm' and `rval'.

        * ptree.c (print_lang_type): Use HOST_WIDE_INT_PRINT_DEC specifier
        in call to fprintf.
        (lang_print_xnode): Likewise.

        * typeck2.c (enum_name_string): Cast argument to sprintf to long
        and use %ld specifier.

        * xref.c (GNU_xref_end_scope): Use HOST_WIDE_INT_PRINT_DEC
        specifier in call to fprintf.
        (GNU_xref_member): Cast argument to sprintf to int.

Fri Jun 19 23:22:42 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

        * typeck2.c (pop_init_level): Warn about implicit zero initialization
        of struct members.

Thu Jun 18 09:32:32 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * cp-tree.h: Prototype function `check_java_method'.

1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (finish_struct): Make conflicting use of id a pedwarn.
        * decl.c (pushdecl_class_level): Likewise.

1998-06-17  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (convert_nontype_argument): Issue an error when presented
        with an integer (real) constant that cannot be simplified to an
        INT_CST (REAL_CST).

        * cp-tree.h (c_get_alias_set): Remove declaration added in
        1998-06-13 change that should never have been checked in.

1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (build_binary_op_nodefault): Change % in format strings
        to %%.

        * decl.c (grokvardecl): Don't build_static_name for decls that
        aren't at namespace scope.

        * init.c (perform_member_init): Catch default-initialization of
        references.

1998-06-17  Mark Mitchell  <mark@markmitchell.com>

        * errfn.c (cp_thing): Handle the `%%' formatting sequence.

1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>

        * method.c (hack_identifier): Complain about getting a namespace
        or class template.
        * typeck.c (decay_conversion): Remove check for namespaces.
        * typeck2.c (incomplete_type_error): Likewise.
        * parse.y (template_arg): Add PTYPENAME expansion.

1998-06-16  Andrew MacLeod  <amacleod@cygnus.com>

        * decl.c (grokvardecl): Don't build external assembler names for
        TYPENAMEs in other namespaces as there is no declarator.
        * error.c (cp_file_of, cp_line_of): Don't extract file or line number
        info from DECL_CONTEXT if it is NULL.

1998-06-16  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (check_dtor_name): Split out.
        (build_scoped_method_call): Use it.
        (build_method_call): Use it.
        * init.c (build_offset_ref): Use it.

        * typeck.c (build_static_cast): Fix handling of pointers to members.

        * decl.c (finish_function): Just return nothing from a constructor.
        * typeck.c (c_expand_return): Complain about returning a void
        expression from a destructor.

1998-06-13  Mark Mitchell  <mark@markmitchell.com>

        * class.c (alter_access): Accept a BINFO explaining how to get
        from the entity whose accessed is being altered to the type doing
        the altering.
        (handle_using_decl): New function containing code split out from ...
        (finish_struct_1): Here.

        * cp-tree.h (complete_type_or_else): Declare.
        * init.c (build_new_1, build_delete): Use it.
        * typeck.c (require_complete_type): Use complete_type, rather than
        expanding it inline.
        (complete_type_or_else): New function.
        (build_component_ref): Use it.
        (pointer_int_sum): Make sure the type pointed to is complete.
        (pointer_diff): Likewise.

        * pt.c (for_each_template_parm): Traverse the TYPE_CONTEXT for
        types.

        * search.c (get_matching_virtual): Note that member templates
        cannot override virtual functions.

1998-06-12  Brendan Kehoe  <brendan@cygnus.com>

        * pt.c (check_explicit_specialization): If DECLARATOR turned into
        an error_mark_node from lookup_template_function, return the same.
        (determine_specialization): Also make sure TEMPLATE_ID isn't an
        error_mark_node, before we try to read its operands.
        * decl.c (grokdeclarator): If we got an error_mark_node from
        check_explicit_specialization, just return it right back.

1998-06-12  Mark Mitchell  <mark@markmitchell.com>

        * class.c (instantiate_type): Don't treat template-ids that don't
        specify any template arguments as equivalent to ordinary
        identifiers.  Use OFFSET_REF instead of SCOPE_REF to refer to
        pointer-to-members for member templates.  Tidy slightly.
        * cp-tree.def (TEMPLATE_ID_EXPR): Revise documentation.
        * init.c (build_offset_ref): Handle template-ids like ordinary
        identifiers, for the most part, but store a TEMPLATE_ID_EXPR in the
        offset part of the OFFSET_REF.
        * typeck.c (build_unary_op): Change check for unknown types to
        look for OFFSET_REFs, not SCOPE_REFs.

1998-06-11  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (is_member_template_class): New function.
        (push_template_decl_real): Use it.

1998-06-11  Benjamin Kosnik  <bkoz@elmo.cygnus.com>

        * friend.c (do_friend): Add support for nested classes using
        member functions of the enclosing class as friends.

1998-06-10  Mark Mitchell  <mark@markmitchell.com>

        * call.c (convert_default_arg): Make global, not static.
        (convert_arg_for_ellipsis): Split out from ...
        (build_over_call): Here.
        * cp-tree.h (convert_default_arg); Declare.
        (convert_arg_to_ellipsis): Likewise.
        (do_member_init): Remove.
        * init.c (do_member_init): Remove; this code is dead.
        (expand_member_init): Remove much of this code; it is dead.
        * typeck.c (convert_arguments): Use convert_default_arg and
        convert_arg_for_ellipsis, rather than duplicating here.

        * call.c (convert_like): Don't fail silently if
        build_user_type_conversion fails.  Always return error_mark_node
        for failure.

1998-06-10  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (covariant_return_p): Complain about ambiguous base.

        * typeck.c (build_component_ref): Diagnose ref to nested type.

1998-06-10  Brendan Kehoe  <brendan@cygnus.com>

        * decl.c (grokparms): Check that INIT isn't an error_mark_node
        before giving error about invalid type for default arg.

1998-06-10  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_method_call): Fix thinko.

1998-06-10  Dave Brolley  <brolley@cygnus.com>

        * decl2.c (lang_decode_option): New argc/argv interface.
        * cp-tree.h (lang_decode_option): New argc/argv interface.
        * lang-specs.h (default_compilers): Only call cpp if -E, -M or -MM is
        specified for cpplib-enabled compilers.
        * lex.c (lang_init): Don't check_newline for cpplib.
        (init_parse): Don't initialize cpplib here.

1998-06-10  Brendan Kehoe  <brendan@cygnus.com>

        * typeck.c (build_component_ref): Make sure FIELD has a lang_specific
        piece before checking DECL_MUTABLE_P.

1998-06-10  John Carr  <jfc@mit.edu>

        * tree.c (debug_binfo): Make printf format match arguments.

        * error.c (OB_PUTI): Make printf format match arguments.

1998-06-10  Jason Merrill  <jason@yorick.cygnus.com>

        * init.c (perform_member_init): Handle default-initialization.

        * except.c (build_throw): Handle throwing NULL.

        * typeck.c (build_x_function_call): Use resolve_offset_ref.

        * search.c (compute_access): Only strip an anonymous union
        for a FIELD_DECL.

        * call.c (add_builtin_candidates): Tweak.

        * cvt.c (build_expr_type_conversion): Restore code for conversion
        from class types.
        * decl2.c (delete_sanity): Use it.  Clean up.

        * typeck.c (comp_ptr_ttypes_real): Fix cv-qual comparisons.

1998-06-10  Branko Cibej  <branko.cibej@hermes.si>

        * typeck.c (c_expand_return): Don't warn about void expressions on
        return statements in functions returning void.

1998-06-09  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (fn_type_unification): Revise documentation.  Tidy.
        (type_unification): Likewise.

1998-06-09  Andrew MacLeod  <amacleod@cygnus.com>

        * semantics.c (finish_try_block): Rename expand_start_catch, and delete
        expand_end_catch.
        * parse.y (function_try_block): Rename expand_start_catch, and delete
        expand_end_catch.
        * except.c (expand_end_eh_spec): Rename expand_start_catch, and delete
        expand_end_catch.

1998-06-09  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (lookup_member): New fn.
        * class.c (finish_struct_1): Use it.
        * decl.c (lookup_name_real): Use it.

Mon Jun  8 20:45:52 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (decl2.o): Depend on dwarf2out.h and dwarfout.h.

        * cp-tree.h: Add prototype for `maybe_print_template_context' and
        `maybe_make_one_only'.

        * decl.c (auto_function): Remove unused variable `decl'.

        * decl2.c: Include dwarf2out.h and dwarfout.h.

        * lex.c: Remove redundant declarations of `set_float_handler' and
        `asm_out_file'.

1998-06-08  Andrew MacLeod  <amacleod@cygnus.com>

        * except.c (init_exception_processing): Remove NEW_EH_MODEL compile
        time flag.  Call __cp_eh_info instead of __cp_exception_info.
        * exception.cc (struct cp_eh_info): Remove NEW_EH_MODEL flag.
        (__cp_exception_info): Return offset into cp_eh_info structure to
        match what use to be the start of this structure.
        (__cp_eh_info): New function to return a pointer to cp_eh_info struct.
        (__cplus_type_matcher, __cp_push_exception): Remove NEW_EH_MODEL
        compile time flag.
        (__uncatch_exception, __check_eh_spec, std::uncaught_exception): Call
        __cp_eh_info instead of __cp_exception_info.

1998-06-08  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (cp_finish_decl): Disable inlining of extern inlines
        with static variables.

1998-06-08  Mark Mitchell  <mark@markmitchell.com>

        * init.c (build_offset_ref): Correct previous change to use build,
        not build_min.

1998-06-07  Mark Mitchell  <mark@markmitchell.com>

        * class.c (instantiate_type): Handle pointer-to-members where the
        member is a template.
        * init.c (build_offset_ref): Likewise.
        * typeck.c (build_unary_op): Likewise.

1998-06-07  Richard Henderson  <rth@cygnus.com>

        * lex.c (lang_init_options): New function.
        (lang_init): Remove flag_exceptions == 2 hack.

1998-06-05  Jason Merrill  <jason@yorick.cygnus.com>

        * search.c (envelope_add_decl): Tweak for implicit typename.

        * call.c (joust): Also warn about confusing conversion op/constructor
        overload resolution.

        * spew.c (yylex): Also return the TYPE_DECL if got_object.
        Don't clear got_object after '~'.
        * call.c (build_scoped_method_call): Tweak destructor handling.
        (build_method_call): Likewise.
        * pt.c (tsubst_copy, case METHOD_CALL_EXPR): Don't mess with
        TYPE_MAIN_VARIANT for destructors.
        * semantics.c (finish_object_call_expr): Complain about calling a
        TYPE_DECL.

1998-06-05  Per Bothner  <bothner@cygnus.com>

        * g++spec.c (lang_specific_pre_link, lang_specific_extra_ofiles):
        Define - update needed by gcc.c change.

1998-06-05  Jason Merrill  <jason@yorick.cygnus.com>

        * error.c (cp_printers): Use 'o' instead of '_' for the null entry.

1998-06-05  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * cp-tree.h (DECL_NAMESPACE_ALIAS, ORIGINAL_NAMESPACE): Declare.
        * decl.c (lookup_name_real): Add namespaces_only parameter.
        If set, return only NAMESPACE_DECLs.
        (select_decl): Likewise.
        (identifier_type_value): Give additional parameter.
        (lookup_name_nonclass): Likewise.
        (lookup_name): Likewise.
        (find_binding): Skip namespace aliases.
        (binding_for_name): Likewise.
        (push_namespace): Check for namespace aliases.
        (lookup_name_namespace_only): New function.
        (begin_only_namespace_names, end_only_namespace_names): New functions.
        * decl2.c (set_decl_namespace): Skip namespace aliases.
        (do_using_directive): Likewise.
        (do_namespace_alias): Produce namespace aliases, fix alias
        redeclaration.
        * error.c (dump_decl): Support SCOPE_REF.
        * parse.y (extdef): Wrap lookup with namespace_only for namespace
        aliases and using declarations.

1998-06-04  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (really_overloaded_fn): Only see through one TREE_LIST.

        * error.c (dump_expr): Clean up NEW_EXPR case.

1998-06-04  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        Suggested by Brendan Kehoe
        * decl2.c (do_toplevel_using_decl): When decl is a TYPE_DECL,
        treat it as using ::decl.

        * decl2.c (arg_assoc_type): Process unknown_type_node and OFFSET_TYPE.

        * tree.c (mapcar): Support NEW_EXPR.

        * error.c (dump_expr): Support NEW_EXPR.

1998-06-03  Jason Merrill  <jason@yorick.cygnus.com>

        * method.c (make_thunk): Use overload machinery to make name.
        * search.c (covariant_return_p): New fn.
        (get_matching_virtual): Use it.

        * init.c (build_new_1): Fix check for void.

1998-06-01  Per Bothner  <bothner@cygnus.com>

        * cp-tree.h (TYPE_FOR_JAVA):  New macro.
        * decl.c, cp-tree.h (java_byte_type_node, java_short_type_node,
        java_int_type_node, java_long_type_node, java_float_type_node,
        java_double_type_node, java_char_type_node, java_boolean_type_node):
        New "primitive" types, with predefined names __java_byte etc.
        (record_builtin_java_type):  New function.
        (init_decl_processing):  Make Java types with record_builtin_java_type.
        (pushtag, grokdeclarator):  Set TYPE_FOR_JAVA if in extern "JAVA".
        (xref_baseypes):  If base class was TYPE_FOR_JAVA, so is this class.
        (grokfndecl):  Call check_java_method for Java classes.
        * method.c (is_java_type):  Removed.  Replaced with TYPE_FOR_JAVA.
        (process_overload_item):  Match types against specific
        java_XX_type_node types, rather than using is_java_type.
        * class.c (finish_struct_1):  Don't add default copy constructor
        or operator= if TYPE_FOR_JAVA.
        (pop_lang_conext):  Restore strict_prototyp proper if Java.
        * decl2.c (acceptable_java_type, check_java_method):  New functions.
        * pt.c (instantiate_class_template):  Copy TYPE_FOR_JAVA from pattern.
        (tsubst):  Move common statement after if statement.
        * typeck.c (comptypes):  If strict, TYPE_FOR_JAVA must match.

1998-06-01  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (for_each_template_parm): Use first_rtl_op.

        * tree.c (build_cplus_array_type_1): Also check index_type for
        template parms.

1998-05-31  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst): Always copy BINFO_BASETYPES.

1998-05-29  scott snyder  <snyder@d0sgif.fnal.gov>

        * tree.c (layout_basetypes): If we change TYPE_SIZE, change
        TYPE_SIZE_UNIT too.

1998-05-29  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (grokdeclarator): Don't complain about in-class
        initialization of static consts if we don't really know the type
        of the variable.

1998-05-29  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (DECL_DESTRUCTOR_P): New macro.
        * method.c (build_destructor_name): New fn.
        * decl2.c (maybe_retrofit_in_chrg): Split out...
        (grokclassfn): From here.  Reorganize.
        * decl.c (grok_ctor_properties): Make sure ctors for types with
        vbases have the in_chrg parm.
        * pt.c (instantiate_class_template): Update
        TYPE_USES_VIRTUAL_BASECLASSES from tsubsted bases.  Don't call
        grok_*_properties.
        (tsubst): Call grok_ctor_properties and maybe_retrofit_in_chrg.

1998-05-28  Mark Mitchell  <mark@markmitchell.com>

        * pt.c (instantiate_decl): Make test for whether or not static
        variables should be instantiated early match its comment.

1998-05-28  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (start_decl): Always pedwarn about vacuously redeclaring
        a member.
        (start_function): Call check_default_args.
        * decl2.c (grokfield): Don't call check_default_args.
        (check_default_args): Use cp_error_at.
        * lex.c (do_pending_defargs): Call check_default_args.

1998-05-27  Brendan Kehoe  <brendan@cygnus.com>

        * call.c (build_method_call): Make sure get_type_value returns
        something before we try to use its TYPE_MAIN_VARIANT.
        (build_scoped_method_call): Likewise.

1998-05-27  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (digest_init): Complain about getting a TREE_LIST to
        initialize an array.

        * search.c (expand_upcast_fixups): Don't set DECL_CONTEXT and
        DECL_VIRTUAL_P.

        * friend.c (do_friend): Clarify template warning.

1998-05-27  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (shadow_label): Don't treat decls as identifiers.
        (maybe_push_to_top_level): Clear shadowed_labels.

        * pt.c (instantiate_decl): Reset lineno and filename after calling
        regenerate_decl_from_template.

        * decl.c (grokdeclarator): Don't try to use TYPE_OBSTACK on an
        error_mark_node.

1998-05-27  Kevin Buhr  <buhr@stat.wisc.edu>

        * parse.y (base_class): Use is_aggr_type, not IS_AGGR_TYPE.

1998-05-26  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
        (convert_nontype_argument): Handle cases when nontype template
        parameters become classes after substitution.

1998-05-26  Mark Mitchell  <mark@markmitchell.com>

        * friend.c (is_friend): Use comptypes, rather than == to compare
        types.  Modify for new representation of template friends.
        (make_friend_class): Likewise.
        * pt.c (tsubst_friend_class): Undo 1998-05-21 change.  Tweak.
        (instantiate_class_template): Deal with template friends.

        * decl.c (store_parm_decls): Remove redundant call to
        expand_main_function.

1998-05-26  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * decl.c (start_decl): Check for DECL_LANG_SPECIFIC before
        DECL_USE_TEMPLATE.

1998-05-26  Per Bothner  <bothner@cygnus.com>

        * language_as_string:  Handle lang_java.

1998-05-26  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (pushdecl): Don't copy the type_decl.

1998-05-26  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * class.c (pushclass): Always store TYPE_MAIN_VARIANT in
        current_class_type.
        * decl.c (grokdeclarator): Put typedefs on the type's obstack.

        * parse.y (complex_direct_notype_declarator): Use $1 to access
        scope of notype_qualified_id.

1998-05-26  Dave Brolley  <brolley@cygnus.com>

        * lex.c (parse_options,yy_cur,yy_lim): Add for cpplib.
        (init_parse): Initialize cpplib interface.

        * Makefile.in (CXX_OBJS): Make sure dependencies never end with an
        empty continuation.

1998-05-26  Mark Mitchell  <mark@markmitchell.com>

        * decl.c (pushtag): Avoid crashing on erroneous input.

1998-05-25  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (push_namespace): Only produce one unique name for
        anonymous namespaces.
        (get_unique_name): Remove.

1998-05-25  Mark Mitchell  <mark@markmitchell.com>

        * call.c (tourney): Don't do any extra comparisons.

        * decl2.c (build_anon_union_vars): Don't crash on empty sub-unions.

        * cp-tree.h (processing_template_parmlist): Declare.
        * decl.c (pushtag): Don't call push_template_decl when we
        shouldn't.
        * pt.c (processing_template_parmlist): New variable.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): New macro.
        (complete_template_args): Use it.
        (add_to_template_args): Likewise.
        (innermost_args): Likewise.
        (tsubst): Likewise.
        (begin_template_parm_list): Use processing_template_parmlist.
        (end_template_parm_list): Likewise.

        * cp-tree.h (ANON_UNION_TYPE_P): New macro.
        * decl.c (grokdeclarator): Use it.
        * decl2.c (grok_x_components): Likewise.
        * init.c (initializing_context): Likewise.
        * method.c (do_build_copy_constructor): Likewise.
        (do_build_assign_ref): Likewise.
        * search.c (compute_access): Likewise.
        * typeck.c (build_component_ref): Likewise.

        * decl.c (grokdeclarator): Don't give a cv-qualified version of an
        unnamed type a typedef name "for linkage purposes".

        * pt.c (lookup_template_class): Don't look at
        IDENTIFIER_CLASS_VALUE when there's no current_class_type.

        * method.c (build_overload_int): Handle error cases gracefully.

        * pt.c (instantiate_decl): Handle static member variables
        correctly.

        * pt.c (tsubst): Use the tsubst'd type when producing new
        TEMPLATE_PARM_INDEX nodes.

1998-05-24  Mark Mitchell  <mark@markmitchell.com>

        * tree.c (cp_tree_equal): Handle pointers to member functions.

        * call.c (maybe_handle_implicit_object): Handle QUAL_CONVs.  Make
        sure the type of the REF_BIND is a reference type.
        (maybe_handle_ref_bind, compare_ics): Rename reference_type to
        target_type for clarity.

        * parse.y (xcond): Move call to condition_conversion ...
        * semantics.c (finish_for_cond): Here.
        * parse.c: Regenerated.

1998-05-24  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (push_namespace): Namespaces have type void.
        * typeck2.c (incomplete_type_error): Complain about namespace
        used as expression.
        * typeck.c (decay_conversion): Likewise.

1998-05-24  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * error.c (dump_expr): Support namespaces.

1998-05-23  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.def: Add SRCLOC.
        * cp-tree.h: Add struct tree_srcloc and accessor macros.
        * tree.c (build_srcloc, build_srcloc_here): New fns.
        * pt.c (add_pending_template): Use build_srcloc_here.
        (push_tinst_level): Update last_template_error_tick before erroring.
        (instantiate_decl): Restore lineno and input_filename before
        calling add_pending_template.
        * decl2.c (finish_file): Set up lineno and input_filename for
        pending templates.

1998-05-22  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (lang_print_error_function): New fn.
        (init_decl_processing): Set print_error_function to use it.
        * errfn.c (cp_thing): Don't call maybe_print_template_context here.

        * call.c (maybe_handle_ref_bind): Propagate ICS_USER_FLAG and
        ICS_BAD_FLAG.

        * cvt.c (ocp_convert): Don't set LOOKUP_NO_CONVERSION for
        copy-initialization.

        * class.c (build_vtable_entry): Use int_fits_type_p.
        (build_vtable): Pass a signed offset to build_vtable_entry.
        (prepare_fresh_vtable, modify_one_vtable, fixup_vtable_deltas1,
        set_rtti_entry): Likewise.

1998-05-22  Per Bothner  <bothner@cygnus.com>

        * cp-tree.h:  Add comments documenting which LANG_FLAGS are used.
        (C_TYPE_VARIABLE_SIZE, C_DECL_VARIABLE_SIZE):  Removed, not used.

1998-05-22  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (print_template_context): Use fprintf instead of cp_error.

        * pt.c (determine_specialization): Just return an error_mark_node.
        Also print the decl we want in error messages.  If we complain,
        return error_mark_node.
        (tsubst_friend_function): Set lineno and input_filename so
        error messages will be useful.
        (instantiate_template): Just return an error_mark_node.
        (check_explicit_specialization): Don't mess with a returned
        error_mark_node.

        * pt.c (print_template_context): Add new argument.
        (maybe_print_template_context): New fn.
        (push_tinst_level): Increment tinst_level_tick.
        (pop_tinst_level): Likewise.
        * errfn.c (cp_thing): Call maybe_print_template_context.  Use
        xrealloc instead of xmalloc.

        * typeck.c (build_unary_op, CONVERT_EXPR): Propagate TREE_CONSTANT.

1998-05-21  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst_friend_class): Don't call redeclare_class_template
        if the template we looked up is the same as the one we already
        have.

Thu May 21 11:54:44 1998  Dave Brolley  <brolley@cygnus.com>

        * lex.c: (handle_sysv_pragma): FILE* parameter not used.
        (cpp_reader,parse_in): Add for cpplib.
        (check_newline): Call handle_sysv_pragma with new interface.
        (check_newline): Call GET_DIRECTIVE_LINE, not get_directive_line.

        * input.c: (yy_cur,yy_lim,yy_get_token,GETC): Add for cpplib.
        (sub_getch): Call GETC for cpplib.

        * cp-tree.h: (get_directive_line): Different prototype for cpplib.
        (GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.

        * Makefile.in (CXX_OBJS): Add @extra_cxx_objs@ for cpplib.

1998-05-21  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (maybe_make_one_only): New fn.
        (import_export_vtable): Use it.
        (import_export_decl): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.

1998-05-21  Mark Mitchell  <mmitchell@usa.net>

        * decl2.c (find_representative_member): Rename to ...
        (build_anon_union_vars): New function.
        (finish_anon_union): Fix stupidity of previous change.

1998-05-20  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (grokfndecl): Handle definition of specialization in
        friend declaration.

        * error.c (dump_decl): Fix LOOKUP_EXPR handling.

1998-05-20  Mark Mitchell  <mmitchell@usa.net>

        * class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P
        to look for type declarations.
        (finish_struct): Deal with templates on the CLASSTYPE_TAGS list.
        * cp-tree.h (DECL_DECLARES_TYPE_P): New macro.
        (finish_member_class_template): Declare.
        * decl.c (pushtag): Put member class templates on the
        CLASSTYPE_TAGS list, just as for ordinary member classes.
        (pushdecl_class_level): Use DECL_DECLARES_TYPE_P.
        (lookup_tag): Look for IDENTIFIER_CLASS_VALUEs, just as with
        IDENTIFIER_NAMESPACE_VALUEs.
        * parse.y (component_decl): Move code to ...
        * semantics.c (finish_member_class_template): New function.
        Don't put member class templates on the list of components for a
        class.
        * parse.c: Regenerated.
        * pt.c (classtype_mangled_name): Don't try DECL_CONTEXT on types.
        In fact, don't use DECL_CONTEXT at all here.

1998-05-20  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (record_unknown_type): New function.
        (init_decl_processing): Call it for the unknown and global type
        nodes.

1998-05-20  Mark Mitchell  <mmitchell@usa.net>

        * decl2.c (find_representative_member): New function.
        (finish_anon_union): Use it.

        * cp-tree.h (MAIN_NAME_P): New macro.
        (DECL_MAIN_P): Likwise.
        * decl.c (pushdecl): Avoid crashing on redefinitions of `main'.
        (grokfndecl): Use the new macros.
        (grokdeclarator): Likewise.
        (start_function): Likewise.
        (store_parm_decls): Likewise.
        (finsh_function): Likewise.
        * friend.c (do_friend): Likewise.
        * typeck.c (build_function_call_real): Likewise.
        (build_unary_op): Likewise.

Wed May 20 02:16:01 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (start_objects, finish_objects, do_dtors,
        do_ctors): Split out from...
        (finish_file): ...here.

Tue May 19 20:36:23 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (is_overloaded_fn): Don't abort on placeholders from
        push_class_decls.

Tue May 19 15:16:22 1998  Brendan Kehoe  <brendan@cygnus.com>

        * class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.

        * error.c (dump_expr): Handle an ARROW_EXPR.

Tue May 19 15:13:39 1998  Mark Mitchell  <mmitchell@usa.net>

        * decl.c (saveable_obstack): Declare.
        (pushdecl): Copy TYPE_DECLs to the same obstack as the type they
        declare, if necessary.

Tue May 19 14:50:27 1998  Mark Mitchell  <mmitchell@usa.net>

        * call.c (compare_qual): Remove.
        (is_subseq): Tweak.
        (is_properly_derived_from): New function.
        (maybe_handle_ref_bind): Likewise.
        (maybe_handle_implicit_object): Likewise.
        (compare_ics): Modify substantially to bring into conformance with
        the standard.
        * cp-tree.h (TYPE_PTRMEMFUNC_OBJECT_TYPE): New macro.
        (comp_cv_qualification): Declare.
        (comp_cv_qual_signature): Likewise.
        * typeck.c (comp_cv_qualification): Likewise.
        (comp_cv_qual_signature): Likewise.

Tue May 19 10:05:02 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (parse.o): Depend on toplev.h.

        * class.c (typecode_p): Remove prototype and definition.

        * cp-tree.h (currently_open_class, is_empty_class, member_p):
        Add prototype.

        * decl.c (push_overloaded_decl_top_level): Remove prototype and
        definition.

        * errfn.c (cp_error): Cast function pointer `error' to (errorfn *)
        in call to `cp_thing'.
        (cp_warning): Likewise for function pointer `warning'.

        * except.c (do_function_call): Remove prototype and definition.
        (call_eh_info): Wrap variable `t1' in macro NEW_EH_MODEL.

        * method.c (is_java_type): Add prototype and make it static.

        * parse.y: Include toplev.h.

        * pt.c (type_unification): Remove unused variable `arg'.
        (instantiate_decl): Likewise for `save_ti'.

        * tree.c (propagate_binfo_offsets): Likewise for `base_binfos'.

Tue May 19 02:43:25 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * init.c (build_member_call): Handle template_ids.
        * parse.y (primary): Add global_scope template_id.

Mon May 18 23:22:52 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (get_sentry): Use end_temporary_allocation.
        Don't declare permanent_obstack.

Mon May 18 12:28:44 1998  Mark Mitchell  <mmitchell@usa.net>

        * parse.y (.finish_new_placement): New non-terminal.
        (unary_expr, new_type_id): Use it.
        * parse.c: Regenerated.

Mon May 18 12:20:27 1998  Brendan Kehoe  <brendan@cygnus.com>

        * pt.c (redeclare_class_template): Say where the original definition
        of the template-parameter's default argument appeared.

Mon May 18 03:00:57 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_over_call): Tweak empty class handling.

        * decl.c (make_typename_type): Use currently_open_class.

        * class.c (instantiate_type): Don't abort on TREE_NONLOCAL_FLAG.

Mon May 18 01:43:01 1998  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * decl.c (lookup_name_real): Don't look at IDENTIFIER_LOCAL_VALUE
        for a type unless it is one.

        * class.c (finish_struct_1): Use OVL_CURRENT in error message.

Mon May 18 01:24:08 1998  Jeffrey A Law  (law@cygnus.com)

        * Makefile.in (program_transform_name, objdir): Define.

        * Makefile.in (BISON): Use bison from the build tree if it exists.
        (FLEX): Likewise.

Sun May 17 14:52:08 1998  Martin v. Löwis  <loewis@informatik.hu-berlin.de>

        * typeck.c (type_unknown_p): Return true for TREE_LIST also.

        * call.c (build_method_call): Use TYPE_MAIN_VARIANT on typedefs.

Sun May 17 14:51:41 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_scoped_method_call): Likewise.

Sun May 17 13:53:48 1998  Mark Mitchell  <mmitchell@usa.net>

        * init.c (build_new_1): Call suspend_momentary around the creation
        of values that must be saved for exception handling.
        * parse.y (.build_new_placement): New non-terminal.
        (unary_expr, new_placement): Use it.
        * parse.c: Regenerated.

Sun May 17 12:32:08 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (duplicate_decls): Use CANONICAL_TYPE_VARIANT to compare
        old and new types.

        * pt.c (tsubst): Make sure that BINFO_TYPE of new binfos is the
        canonical type.

        * call.c (build_over_call): Don't use IS_SIGNATURE on a namespace.

Fri May 15 20:28:00 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (start_decl): Revert problem change.

        * Makefile.in (CONFLICTS): Fix.

Fri May 15 15:34:02 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

        * decl.c (duplicate_decls): Clean up, add DECL_DATA_AREA bits.

Fri May 15 00:46:05 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (finish_struct_1): Use BINFO_SIZE.

        * decl.c (start_decl): Use 'tem'.

Thu May 14 16:30:47 1998  Andrew MacLeod  <amacleod@cygnus.com>

        * exception.cc: Include eh-common.h.
        (struct cp_eh_info): Add eh_info struct with NEW_EH_MODEL.
        (__cplus_type_matcher): First stab at new C++ runtime type matcher.
        (__cp_push_exception): Initialize eh_info struct as well.
        * except.c: Remove local structs and include eh-common.h.
        (init_exception_processing): Set language and version codes.
        (call_eh_info): Add presence of eh_info to runtime description of
        struct cp_eh_info.
        (expand_end_eh_spec): Call start_catch_block() and end_catch_block().
        * semantics.c (finish_try_block): Call start_catch_block() and
        end_catch_block().
        * parse.y (function_try_block): Call start_catch_block() and
        end_catch_block().

Thu May 14 12:27:34 1998  Brendan Kehoe  <brendan@cygnus.com>

        * typeck.c (original_type): New function.
        (common_type): Use it to get the DECL_ORIGINAL_TYPE for T1 and T2,
        to see if they're actually the same.
        * cp-tree.h (original_type): Declare.

Wed May 13 12:54:30 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * Makefile.in (lex.o): Depend on output.h.

        * call.c (add_function_candidate): Remove unused variable `cand'.
        (add_conv_candidate): Likewise.
        (build_builtin_candidate): Likewise.

        * cp-tree.h: Add prototype for `types_overlap_p'.

        * decl.c (signal_catch): Mark parameter `sig' with ATTRIBUTE_UNUSED.

        * decl2.c (merge_functions): Remove unused variables `tmp' and
        `tempn'.

        * error.c (expr_as_string): Mark parameter `v' with ATTRIBUTE_UNUSED.
        (code_as_string): Likewise.
        (language_as_string): Likewise.
        (parm_as_string): Likewise.
        (op_as_string): Likewise.
        (assop_as_string): Likewise.
        (cv_as_string): Likewise.

        * lex.c: Include output.h.

        * pt.c (type_unification): Cast first argument of `bzero' to a char*.

        * search.c (dfs_no_overlap_yet): Mark parameter `t' with
        ATTRIBUTE_UNUSED.

        * tinfo.cc (__class_type_info::dcast): Change the type of variable
        `i' from int to size_t.

        * typeck.c (language_lvalue_valid): Mark parameter `exp' with
        ATTRIBUTE_UNUSED.

Tue May 12 21:37:49 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or
        DECL_NAMESPACE_SCOPE_P.
        (lang_decl_name): Likewise.
        * pt.c (tsubst_friend_function, tsubst): Likewise.
        * decl.c (pushdecl, redeclaration_error_message, start_decl,
        cp_finish_decl, start_function): Likewise.
        * class.c (finish_struct_1): Likewise.
        * call.c (build_over_call): Likewise.
        (compare_ics): Use DERIVED_FROM_P.

Tue May 12 07:24:18 1998  Mark Mitchell  <mmitchell@usa.net>

        * cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
        * method.c (build_mangled_name): Use it.
        (build_decl_overload_real): Likewise.

        * error.c (dump_simple_decl): New function, broken out from ...
        (dump_decl): Use it.

Mon May 11 11:38:07 1998  Mark Mitchell  <mmitchell@usa.net>

        * ptree.c (lang_print_xnode): Add missing `break'.

        * pt.c (tsubst): Remove duplicate check for IDENTIFIER_NODE.

        * call.c (add_template_candidate): Adjust for changes to
        fn_type_unification.
        (add_template_candidate_real): Likewise.
        (add_template_conv_candidate): Likewise.
        (build_user_type_conversion_1): Likewise.
        (build_new_function_call): Likewise.
        (build_object_call): Likewise.
        (build_new_op): Likewise.
        (build_new_method_call): Likewise.
        * class.c (instantiate_type): Likewise.
        * cp-tree.h (unification_kind_t): New type.
        (fn_type_unification): Adjust prototype.
        (type_unificaiton): Likewise.
        * pt.c (UNIFY_ALLOW_NONE): New macro.
        (UNIFY_ALLOW_MORE_CV_QUAL): Likewise.
        (UNIFY_ALLOW_LESS_CV_QUAL): Likewise.
        (UNIFY_ALLOW_DERIVED): Likewise.
        (unify): Change prototype.
        (maybe_adjust_types_for_deduction): New function.
        (check_cv_quals_for_unify): Likewise.
        (determine_specialization): Adjust.
        (fn_type_unification): Likewise.
        (type_unification): Likewise.
        (type_unification_real): Likewise.  Use
        maybe_adjust_types_for_deduction.  Fix mishandling of
        back-unification of template functions passed as arguments.  Pass
        appropriate combination of UNIFY_ALLOW_* to unify.
        (unify): Remove unused NTPARMS parameter.  Use
        check_cv_quals_for_unify.  Remove bogus code that allowed
        too-generous unification in order to adhere more closely to standard.
        (get_bindings_real): Adjust.
        (get_class_bindings): Likewise.

        * method.c (build_overload_identifier): Only use the innermost
        template arguments when mangling.
        * pt.c (tsubst_template_argument_vector): New function.
        (complete_template_args): Deal with the situation where the
        extra_args contain more than one level of arguments.
        (lookup_template_class): Deal with member template classes, which
        may have more than one level of arguments.
        (tsubst): Don't tsbust into the TREE_TYPE of an IDENTIFIER_NODE.
        Improve handling of member template classes.  Use
        DECL_PRIMARY_TEMPLATE instead of inline expansion.  Use
        tsubst_template_argument_vector where appropriate.
        (regenerate_decl_from_template): Break out from ...
        (instantiate_decl): Here.

        * lex.c (yyprint): Remove TYPENAME_ELLIPSIS.
        * parse.h: Regenerated.
        * parse.c: Really regenerated.

        * cp-tree.h (finish_unary_op_expr): New function.
        (finish_id_expr): Likewise.
        (begin_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_declarator): Likewise.
        (finish_translation_unit): Likewise.
        (finish_parmlist): Likewise.
        (begin_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_default_args): Likewise.
        (finish_inline_definitions): Likewise.
        * parse.y (GCC_ASM_KEYWORD): Remove.
        (TYPENAME_ELLIPSIS): Likewise.
        * parse.c: Regenerated.
        Use new functions in semantics.c in the actions for many rules.
        * gxx.gperf (GCC_ASM_KEYWORD): Just use ASM_KEYWORD.
        * hash.h: Regenerated.
        * semantics.c (finish_expr_stmt): Allow NULL expr.
        (finish_unary_op_expr): New function, containing
        code previously in parse.y.
        (finish_id_expr): Likewise.
        (begin_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_declarator): Likewise.
        (finish_translation_unit): Likewise.
        (finish_parmlist): Likewise.
        (begin_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_default_args): Likewise.
        (finish_inline_definitions): Likewise.

Sun May 10 23:43:13 1998  Mark Mitchell  <mmitchell@usa.net>

        * typeck.c (build_c_cast): Don't decay arrays and functions to
        pointer type when converting to a class type.

Sun May 10 22:53:56 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (DECL_NAMESPACE_SCOPE_P): New macro.
        (DECL_CLASS_SCOPE_P): Likewise.

Sun May 10 22:48:22 1998  H.J. Lu  (hjl@gnu.org)

        * class.c (finish_struct_1): Use OVL_CURRENT on TREE_VEC_ELT.
        * decl2.c (constructor_name_full): Likewise.

Sun May 10 22:48:12 1998  Mike Stump  <mrs@wrs.com>

        * tree.c (mapcar): Add OVERLOAD support.

        * init.c (resolve_offset_ref): We must use basetype_path before we
        destroy it with a call to convert_pointer_to.

Sat May  9 14:44:37 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (currently_open_class): New fn.
        * decl.c (lookup_name_real): Use it.
        * search.c (lookup_field): Likewise.

Fri May  8 23:32:42 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * cp-tree.def (OVERLOAD): New node.
        * cp-tree.h (BINDING_TYPE, SET_IDENTIFIER_GLOBAL_VALUE,
        SET_IDENTIFIER_NAMESPACE_VALUE): Define.
        (NAMESPACE_BINDING): Remove.
        (IDENTIFIER_GLOBAL_VALUE, IDENTIFIER_NAMESPACE_VALUE): Use
        namespace_binding.
        (OVL_FUNCTION, OVL_CHAIN, OVL_CURRENT, OVL_NEXT, OVL_USED):
        Define.
        (tree_overload): New struct.
        (IDENTIFIER_TYPE_VALUE): Use identifier_type_value.
        (REAL_IDENTIFIER_TYPE_VALUE): Define.
        (IDENTIFIER_HAS_TYPE_VALUE): Use IDENTIFIER_TYPE_VALUE.
        (lang_decl_flags): Remove in_namespace.
        (lang_decl): Remove chain.
        (DECL_CHAIN, DECL_NAMESPACE): Remove.
        (flag_honor_std): Declare extern.
        (identifier_type_value, pushdecl_namespace_level, push_using_decl,
        namespace_binding, set_namespace_binding,
        lookup_function_nonclass, cat_namespace_levels,
        set_decl_namespace, lookup_arg_dependent, binding_init, ovl_cons,
        scratch_ovl_cons, ovl_member, build_overload): Declare.
        (decl_list_length, get_namespace_id, current_namespace_id,
        overloaded_globals_p): Remove.
        (lookup_using_namespace, qualified_lookup_using_namespace): Change
        return type.
        (push_scratch_obstack): New macro.
        * call.c (add_function_candidate): Special-case type of OVERLOAD node.
        (build_user_conversions_1): Iterate using OVL_NEXT for ctors,
        convs, fns.
        (build_new_function_call): Iterate using OVL_CHAIN.
        Print DECL_NAME in when reporting ambiguities.
        (build_object_call): Iterate using OVL_NEXT for fns, convs.
        (build_new_op): Call lookup_function_nonclass.
        Iterate using OVL_NEXT.
        (build_op_delete_call): Change detection of members.
        Do not wrap TREE_LIST around fields and single global functions.
        (build_over_call): Don't push a class level if the context is a
        namespace.
        (build_new_method_call): Iterate using OVL_NEXT.
        * class.c (add_method): Chain overloaded members using
        build_overload.  Remove copying of method.
        (grow_method): When iterating through the obstack, expect OVERLOAD
        nodes.  Chain overload members.
        (finish_struct_methods): Chain overload members.  Unpack OVERLOAD
        nodes in call to get_baselinks.
        (duplicate_tag_error): Expect OVERLOAD nodes when unchaining.
        (finish_struct_1): Iterate over ctor using OVL_NEXT.  Handle
        fdecls that are OVERLOAD nodes.
        (validate_lhs): New function.
        (instantiate_type): Do not copy OVERLOAD nodes.  Remove dead
        code.  Use DECL_NAME in error messages.  Split code between global
        and member function processing.
        * decl.c (global_type_node): New static variable.
        (in_std): New global.
        (struct binding_level): New field usings.
        (resume_binding_level): Assert that we are not in a class.
        (toplevel_bindings_p): Just check for namespace_p or
        pseudo_global.
        (resume_level): Remove.
        (find_binding): New function.
        (binding_for_name): Call it.
        (namespace_binding, set_namespace_binding): New functions.
        (push_namespace): Associate binding level with new namespace,
        resume_binding_level for existing namespace.  Remove old code.
        Fake std by counting.
        (store_bindings): Use REAL_IDENTIFIER_TYPE_VALUE.
        (maybe_push_to_top_level): Save current namespace.
        (pop_from_top_level): Restore saved namespace.
        (pop_namespace): Call suspend_binding_level.  Remove old code.
        (cat_namespace_levels): New function.
        (set_identifier_type_value_with_scope): For namespace bindings,
        set BINDING_TYPE, and use global_type_node.
        Use REAL_IDENTIFIER_TYPE_VALUE otherwise.
        (identifier_type_value): New function.
        (pushtag): If no context, use current_namespace.
        (duplicate_decls): Don't process DECL_CHAIN.
        (pushdecl): Set DECL_CONTEXT to current_namespace, if it is not
        already set.  Never reset it to NULL_TREE.  Lookup global variables
        in their namespace.  Push overloaded templates if they are on
        namespace level.
        (pushdecl_namespace_level): New function.
        (pushdecl_top_level): Implement using pushdecl_namespace_level.
        (pushdecl_using_decl): New function.
        (overloaded_globals_p): Remove.
        (push_overloaded_decl): Create OVERLOAD nodes, and iterate through
        them.  Use namespace_binding and set_namespace_value.
        (redeclaration_error_message): Complain if the declarations come
        from different namespaces.
        (lookup_tag): On namespace level, look in the BINDING_TYPE.
        (lookup_namespace_name): Pass tree_bindings from stack.  Remove
        old code.
        (select_decl): New function.
        (lookup_name_real): Call it for qualified and unqualified lookup.
        Pass tree_bindings from the stack.
        If prefer_type is 1, also accept namespaces.
        (lookup_function_nonclass): New function.
        (init_decl_processing): Set the binding level of the global
        namespace to global_binding_level.
        Build a proper type list for __builtin_apply.
        Initialize std_node to "fake std" if flag_honor_std is set.
        Initialize global_type_node.
        Allocated bad_alloc in namespace std if flag_honor_std.
        (define_function): Set the DECL_CONTEXT to the current_namespace.
        (start_decl): A namespace is not considered as a context here.  If
        the DECL_CONTEXT is a namespace, push the decl.
        (cp_finish_decl): Check for namespaces used as initializers.
        (grokfndecl): Add namespace parameter.  Remove processing of
        DECL_CHAIN.
        (grokvardecl): Add namespace parameter.
        (grokdeclarator): Process SCOPEs that are namespaces.  For
        mangling, temporarily set the DECL_CONTEXT on anonymous structs.
        (start_function): Check for contexts that are namespaces.
        Set context for declarations that have not been pushed.
        (store_parm_decls): Check for ::main only.
        (finish_function): Likewise.
        (start_method): Check for contexts that are namespaces.
        (start_method): Remove DECL_CHAIN processing.
        * decl2.c (flag_honor_std): Declare.
        (lang_decode_option): Set it if -fhonor-std or -fnew-abi is given.
        (decl_namespace_list): New static global.
        (grok_x_components): Ignore namespaces as type contexts.
        (check_classfn): Expect OVERLOAD nodes.
        (grokfield): Remove DECL_CHAIN processing.
        (finish_file): Call cat_namespace_levels.
        (merge_functions): New function.
        (ambiguous_decl): Rewrite.
        (lookup_using_namespace): Produce tree_bindings.
        (qualified_lookup_using_namespace): Likewise.
        (set_decl_namespace, decl_namespace, current_decl_namespace,
        push_decl_namespace, pop_decl_namespace): New functions.
        (arg_lookup): New struct.
        (add_function, arg_assoc_namespace, arg_assoc_class,
        arg_assoc_type, arg_assoc_args, arg_assoc, lookup_arg_dependent):
        New functions.
        (get_namespace_id, current_namespace_id): Remove.
        (do_toplevel_using_decl): Rewrite.
        (do_class_using_decl): Complain about namespace qualifiers.
        (do_using_directive): Sorry if not on namespace level.  Complain
        about unknown namespaces.
        * error.c (dump_aggr_type): Check for namespace contexts.
        * except.c (init_exception_processing): Push terminate into std.
        * friend.c (is_friend): A namespace is not a context, here.
        * init.c (expand_member_init): Remove DECL_CHAIN processing.
        (build_offset_ref): Process OVERLOAD nodes.
        * lang-specs.h (__HONOR_STD): Define if -fnew-abi or -fhonor-std.
        * lex.c (identifier_type): Loop using OVL_CHAIN.
        (see_typename): Set looking_for_typename to 2.
        (real_yylex): Likewise.
        (do_identifier): Expect OVERLOAD nodes instead of TREE_LISTs.
        (do_scoped_id): Expect OVERLOAD nodes.
        Change calling convention for qualified_lookup_using_namespace.
        (build_lang_decl): Don't set in_namespace anymore.
        * method.c (typevec_size): New global.
        (build_overload_nested_name): Return if global_namespace.
        Otherwise, always expect a declaration context.
        (build_qualified_name): Likewise.
        Make sure we don't write beyond typevec_size.
        (build_decl_overload_real): Likewise.
        Allocate one extra slot for the namespace.
        (hack_identifier): Mark code dead.
        Process OVERLOAD and NAMESPACE_DECL nodes.
        * parse.y (program): Pop namespaces until in global namespace.
        (extdef): In a using-declaration, don't discard the identifier if
        there is no declaration.
        (left_curly): Ignore type contexts which are namespaces.
        (typename_sub2): Use IDENTIFIER_TYPE_VALUE to retrieve the type
        used as scope.
        * pt.c (template_class_depth): Expect types to be namespaces.
        (determine_specialization): Simplify by expecting OVERLOAD nodes.
        (push_template_decl): Push into namespace level.
        Reset ctx if it is a namespace.
        Set DECL_CONTEXT to current_namespace if not set already.
        Ignore real contexts that are namespaces.
        (mangle_class_name_for_template): Skip global_namespace.
        Mangle other namespaces as declarations.
        (lookup_template_function): Set type of OVERLOAD nodes to unknown.
        (lookup_template_class): Push into namespace of context.
        If the context is a namespace, set it to global_namespace.
        Use id_context for mangling.
        (for_each_template_parm): Handle OVERLOAD and NAMESPACE_DECL nodes.
        (tsubst_friend_function): Ignore namespace contexts.
        Push into namespace level.
        (tsubst): Handle NAMESPACE_DECL nodes.
        Remove DECL_CHAIN processing.
        (type_unification_real): Recognize OVERLOAD instead of TREE_LIST nodes.
        * ptree.c (print_lang_identifier): Print bindings.
        (lang_print_xnode): Print OVERLOAD nodes.
        * rtti.c (init_rtti_processing): Push type_info into std.
        * search.c (lookup_fnfields_here): Expect OVERLOAD nodes.
        (lookup_fnfields_1, get_virtuals_named_this, get_matching_virtual,
        dfs_debug_mark, dfs_pushdecls, dfs_compress_decls, add_conversions,
        lookup_fnfields_here): Likewise.
        Process all nodes, instead of going through TREE_CHAIN.
        * sig.c (build_signature_pointer_or_reference_type): Set context
        to global_namespace.
        (build_signature_table_constructor): Expect OVERLOAD nodes.
        * spew.c (yylex): Save old setting of looking_for_typename.
        * tree.c (decl_list_length): Remove.
        (binding_init): New function.
        (count_functions): Rewrite.
        (is_overloaded_fn): Expect OVERLOAD nodes.
        (really_overloaded_fn, get_first_fn, lvalue_type): Likewise.
        (ovl_cons, scratch_ovl_cons, build_overload, build_overload_after,
        ovl_member): New functions.
        * typeck.c (require_complete_type): Expect OVERLOAD nodes.
        (type_unknown_p): Likewise.
        (require_instantiated_type): Likewise.
        (build_component_ref): Declare code dead.
        (build_x_function_call): Create and expect OVERLOAD nodes.
        (build_function_call_real): Check for ::main only.
        (build_unary_op): Likewise.  Expect OVERLOAD nodes.
        (convert_for_assignment): Check for TREE_LIST before accessing
        TREE_VALUE.
        * decl.c (duplicate_decls): Check for namespace bindings instead
        of global bindings.
        (pushdecl, push_overloaded_decl, lookup_tag, lookup_name_real,
        lookup_name_current_level, start_decl, xref_tag,
        finish_enum): Likewise.
        * init.c (build_offset_ref): Likewise.
        * search.c (lookup_field): Likewise.
        (lookup_fnfields): Likewise.
        (dfs_debug_mark): Likewise.
        * decl.c (poplevel): Use SET_IDENTIFIER_TYPE_VALUE.
        (poplevel_class, pop_from_top_level): Likewise.
        * decl2.c (finish_method): Likewise.
        * class.c (build_vtable): Use SET_IDENTIFIER_GLOBAL_VALUE.
        * decl.c (record_builtin_type): Likewise.
        (init_decl_processing, grokfndecl): Likewise.
        * lex.c (get_time_identifier, do_identifier, do_scoped_id): Likewise.
        (make_lang_type): Likewise.
        * parse.y (make_thunk): Likewise.
        * pt.c (tsubst): Likewise.
        * tree.c (debug_binfo): Likewise.
        * exception.cc, new.cc, new1.cc, new2.cc, tinfo.cc, tinfo.h,
        tinfo2.cc, inc/new.h: Add std qualifications.
        * inc/new: Wrap with namespace std if __HONOR_STD.
        * inc/typeinfo: Likewise.

Fri May  8 00:43:50 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_user_type_conversion_1): Handle second_conv
        properly for templates.

Thu May  7 17:09:25 1998  Andrew MacLeod  <amacleod@cygnus.com>

        * method.c (build_decl_overload_real): Set TREE_USED flag to
        zero for build_type_variants nodes as well.

Wed May  6 19:27:09 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst): Don't tsubst the type of an IDENTIFIER_NODE.

Wed May  6 16:49:48 1998  Jim Wilson  <wilson@cygnus.com>

        * Makefile.in (call.o, class.o, decl.o, decl2.o, errfn.o, error.o,
        except.o, expr.o, friend.o, init.o, lex.o, method.o, pt.o, repo.o,
        rtti.o, search.o, semantics.o, sig.o, tree.o, typeck.o, typeck2.o,
        xref.o): Add toplev.h dependencies.

Wed May  6 16:44:58 1998  Jeffrey A Law  (law@cygnus.com)

        * errfn.c (cp_error, cp_warning): Remove declarations for
        error and warning respectively.

Wed May  6 14:28:18 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * error.c: Convert to using ctype macros defined in system.h.
        * method.c: Likewise.
        * xref.c: Likewise.
        * lex.c: Likewise.  Also remove redundant system header stuff.

Wed May  6 06:36:41 1998  Robert Lipe  <robertl@dgii.com>

        * call.c, class.c, decl.c, decl2.c, errfn.c, error.c, except.c,
        expr.c, friend.c, init.c, lex.c, method.c, pt.c, repo.c, rtti.c,
        search.c, semantics.c, sig.c, tree.c, typeck.c, typeck2.c,
        xref.c: Add include of toplev.h.

Wed May  6 02:33:39 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (perm_manip): Also regenerate the RTL of an extern.
        (copy_to_permanent): Use end_temporary_allocation.

Tue May  5 23:54:04 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * init.c (expand_vec_init): The initialization of each array
        element is a full-expression.

Tue May  5 18:24:13 1998  Andrew MacLeod  <amacleod@cygnus.com>

        * method.c (build_mangled_name): Add a call to build_type_variant
        to get the right type.

Tue May  5 01:25:03 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * Makefile.in: Add .SUFFIXES.

        * cp-tree.def: Remove NAMESPACE_DECL.

Sun May  3 01:32:14 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_over_call): Do evaluate arg even if it has empty
        class type.
        * decl.c (start_function): Don't push a member function.

Thu Apr 30 18:59:23 1998  Jim Wilson  <wilson@cygnus.com>

        * Makefile.in (g++FAQ.info): Put -o option before input file.

Thu Apr 30 13:05:33 1998  Andrew MacLeod  <amacleod@cygnus.com>

        * gxxint.texi: Add info for squangling codes K and B.

Tue Apr 28 13:22:01 1998  Mark Mitchell  <mmitchell@usa.net>

        * semantics.c (begin_stmt_expr): Avoid duplicating the effect of
        the expression in templates.
        (finish_stmt_expr): Likewise.

1998-04-28  Brendan Kehoe  <brendan@cygnus.com>

        * decl2.c (ambiguous_decl): Fix NAME parm to be a tree, not int.

Mon Apr 27 13:58:10 1998  Mark Mitchell  <mmitchell@usa.net>

        * decl.c (maybe_push_to_top_level): Always clear
        current_template_parms and processing_template_decl.
        (pushtag): Remove check of current_class_type and some comments,
        since maybe_push_to_top_level no longer creates confusion.

Sun Apr 26 12:10:18 1998  Mark Mitchell  <mmitchell@usa.net>

        * cp-tree.h (CLASSTYPE_IS_TEMPLATE): New macro.
        (DECL_CLASS_TEMPLATE_P): Likewise.
        (DECL_PRIMARY_TEMPLATE): Likewise.
        (PRIMARY_TEMPLATE_P): Use it.
        (push_template_decl_real): New function.
        (redeclare_class_template): Take new template parameters as
        input.
        (is_specialization_of): New function.
        (comp_template_args): Declare.
        * decl.c (pushtag): Handle friend template classes.
        (xref_tag): Likewise.  Use new calling convention for
        redeclare_class_template.
        * decl2.c (grok_x_components): Handle friend templates.
        * friend.c (is_friend): Use is_specialization_of where
        appropriate.  Deal with friend class templates.
        (make_friend_class): Let a class template be friends with itself.
        * pt.c (comp_template_args): Remove declaration.
        (tsubst_friend_class): New function.
        (push_template_decl_real): New function.
        (push_template_decl): Use it.
        (redeclare_class_template): Adjust for new calling convention.
        (comp_template_args): Give it external linkage.
        (instantiate_class_type): Use tsubst_friend_class to deal
        with friend templates.
        * typeck.c (comptypes): Use comp_template_args, rather than
        expanding it inline.
        * parse.y (component_decl): Handle a nested template type
        like other component type declarations.

        * pt.c (check_explicit_specialization): Handle overloaded
        constructors correctly.

        * pt.c (mabybe_get_template_decl_from_type_decl): New function.
        (lookup_template_class): Use it.

Thu Apr 23 21:19:06 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.def: Add WRAPPER.  USER_CONV now only has two ops.
        * cp-tree.h: Add WRAPPER support.
        * call.c (add_candidate): Split out from add_*_candidate fns.
        (build_over_call): Take the candidate instead of function and args.
        Enforce access control here.  Emit overload warnings here.
        (add_warning): New fn.
        (joust): Add WARN parm.  If not set, call add_warning instead of
        printing a warning.  Re-enable some warnings.
        (tourney): Pass it.
        (convert_like): Adjust.
        (build_new_op): Adjust.
        (build_new_function_call): Adjust.
        (build_user_type_conversion_1): Adjust.
        (USER_CONV_FN): Adjust.
        * tree.c (build_expr_wrapper, build_expr_ptr_wrapper,
        build_int_wrapper): New fns.

Thu Apr 23 18:27:53 1998  Mark P. Mitchell  <mmitchell@usa.net>

        * pt.c (unify): Fix typo in previous change.

Thu Apr 23 09:32:58 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * error.c (dump_type_real): Declare canonical_name.

        * typeck.c (comp_target_types): Fix PMFs.

Wed Apr 22 13:24:48 1998  Mark Mitchell  <mmitchell@usa.net>

        * class.c (finish_struct): Set TREE_PRIVATE and TREE_PROTECTED for
        the DECL_RESULTs of a member TEMPLATE_DECL, not just the
        TEMPLATE_DECL.

        * pt.c (tsubst): Decrease the template-level of
        TEMPLATE_TEMPLATE_PARMS.  Likewise for the DECL_INITIAL of a
        TEMPLATE_PARM_INDEX.
        (template_decl_level): New function.
        (unify): Make sure to record unifications for template
        parameters, even when the parameters exactly match the arguments.
        Combine duplicated code for TEMPLATE_TEMPLATE_PARMs and
        TEMPLATE_TYPE_PARMS.  Don't try to unify template parameters that
        aren't from the level we're currently working on.

Tue Apr 21 22:00:04 1998  Mark Mitchell  <mmitchell@usa.net>

        * errfn.c (cp_thing): Use xrealloc, not xmalloc, to copy memory.

        * decl2.c (check_member_template): Set DECL_IGNORED for member
        class templates, too.

        * decl2.c (grokfield): Remangle the name of a member TYPE_DECL.

Tue Apr 21 18:59:11 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

        * decl.c (duplicate_decls): Only check DECL_FRIEND_P if function.

Tue Apr 21 14:22:00 1998  Jeffrey A Law  (law@cygnus.com)

        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Declare.
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Define.
        (init_decl_processing): Handle TI types.
        * typeck.c (unsigned_type, signed_type): Handle TI types.

Sat Apr 18 15:25:21 1998  Jim Wilson  <wilson@cygnus.com>

        * g++spec.c (lang_specific_driver): New argument in_added_libraries.
        New local added_libraries.  Increment count when add library to
        arglist.

Fri Apr 17 21:25:00 1998  Mark Mitchell  <mmitchell@usa.net>

        * cp-tree.h (type_as_string_real): New function.
        * pt.c (mangle_class_name_for_template): Use it.
        * error.c (dump_aggr_type): Change prototype.
        (dump_type_prefix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_type_real): Convert from dump_type.  If desired, the
        "canonica" name of a typedef, i.e., the name of the underlying
        type, can be printed.
        (dump_type): Call dump_type_real.

Fri Apr 17 14:30:45 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (lang_decode_option): -fnew-abi implies -fvtable-thunks.

        * typeck.c (comp_target_types): Tweak pedantic case.
        (comp_target_parms): Tweak pedantic case.  Clean up somewhat.
        Return -1 or 1 instead of 1 or 2.
        (compparms): Remove STRICT handling.
        (convert_for_assignment): Fix handling of pmfs.

Fri Apr 17 14:04:16 1998  Mark Mitchell  <mmitchell@usa.net>

        * typeck.c (comp_target_types): Handle references like pointers.
        (comp_target_parms): Note that return code from comp_target_types
        can be negative to indicate failure.

Fri Apr 17 09:10:52 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

        * Make-lang.in (c++.all.build): Don't depend on $(DEMANGLER_PROG),
        which requires a working target compiler to build.

Fri Apr 17 08:57:35 1998  Jeffrey A Law  (law@cygnus.com)

        * tree.c (avoid_overlap): Add prototype.

        * spew.c (num_tokens): Add prototype.
        (nth_noken, add_token, consume_token, debug_yychar): Likewise.

        * search.c (dfs_check_overlap): Add prototype.
        (dfs_no_overlap_yet): Likewise.

        * pt.c (original_template): Add prototype.
        (inline_needs_template_parms): Likewise.
        (push_inline_template_parms_recursive): Likewise.
        (retrieve_specialization, register_specialization): Likewise.
        (print_candidates, reduce_template_parm_level): Likewise.
        (build_template_decl, mark_template_parm): Likewise.
        (tsubst_friend_function, get_bindings_real): Likewise.

        * method.c (start_squangling): Add prototype.
        (end_squangling, check_ktype, issue_ktype): Likewise.
        (build_overloaded_scope_ref, check_btype): Likewise.
        (build_mangled_template_parm_index): Likewise.

        * lex.c (init_cpp_parse): Add prototype.
        (handle_cp_pragma, handle_sysv_pragma): Likewise.
        (reduce_cmp, token_cmp): Likewise.

        * except.c (call_eh_info): Add prototype.
        (push_eh_info, get_eh_info, get_eh_value, get_eh_type): Likewise.
        (get_eh_caught, get_eh_handlers, do_pop_exception): Likewise.

        * decl2.c (is_namespace_ancestor): Add prototype.
        (namespace_ancestor, add_using_namespace): Likewise.
        (ambiguous_decl): Likewise.

        * decl.c (indent): Add prototype.

        * call.c (add_template_candidate_real): Add prototype.

Fri Apr 17 01:57:12 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl2.c (build_expr_from_tree): Just return a PMF.

Fri Apr 17 00:45:12 1998  Mark Mitchell  <mmitchell@usa.net>

        * typeck2.c (process_init_constructor): Don't strip cv-qualifiers
        when doing initializations.

        * pt.c (unify): Use comptypes to compare type args.

Fri Apr 17 00:24:22 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (duplicate_decls): Fix check for when it's safe to free
        the new decl.

        * pt.c (mangle_class_name_for_template): Don't pass a typedef type
        to type_as_string.

Thu Apr 16 17:47:30 1998  Jeffrey A Law  (law@cygnus.com)

        * pt.c (build_template_parm_index): Add prototype.

        * search.c (my_tree_cons): Don't clear words outside the
        newly allocated node.

Wed Apr 15 15:34:44 1998  Dave Brolley  <brolley@cygnus.com>

        * lex.c (init_parse): Now returns char* containing the filename.

Wed Apr 15 13:20:06 1998  John Carr  <jfc@mit.edu>
                          Jeff Law   <law@cygnus.com>

        * errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
        than a pointer.

Sun Apr 12 22:31:19 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

        * cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.

Fri Apr 10 12:16:49 1998  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * decl.c (duplicate_decls): Don't warn for redundant decls if
        friend: let add_friend take care of it.

Thu Apr  9 02:40:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * sig.c (build_signature_pointer_constructor): Don't set
        TREE_HAS_CONSTRUCTOR for a signature pointer.
        * cvt.c (ocp_convert): Don't force a temporary for internal structs.
        * init.c (resolve_offset_ref): Warn about implicit & on pmfs
        here, too.
        * typeck.c (build_unary_op): Only allow taking the address of a
        real constructor.
        * typeck2.c (digest_init): Simplify.
        (store_init_value): Don't pedwarn about using { } for pmfs.

Thu Apr  9 22:16:57 1998  Per Bothner  <bothner@cygnus.com>

        * cp-tree.h (start_decl):  Update prototype.
        * decl.c (start_decl):  Like the C version, new parameters
        for the attributes.  Call cplus_decl_attributes here,
        (pushdecl):  Like C version, do build_type_copy if TYPE_DECL,
        (grokdeclarator):  Pass NULL for new start_decl arguments.
        * pt.c (tsubst_expr):  Likewise.
        * parse.y:  Merge cplus_decl_attribute calls into start_decl calls.
        * typeck.c (common_type): Check TYPE_MAIN_VARIANT.
        * lex.c (build_lang_decl): Add lang_name_java.
        * class.c (push_lang_context): Add lang_name_java.
        * method.c (build_mangled_name): Check for is_java_type.

Thu Apr  9 22:16:57 1998  Benjamin Kosnik  <bkoz@loony.cygnus.com>

        * decl.c (grokdeclarator): Check TYPE_MAIN_VARIANT.
        * call.c (build_scoped_method_call): Check for TREE_CODE for
        VOID_TYPE instead of type ==  void_type_node.
        (build_method_call): Likewise.
        * decl.c (lookup_name_real): Likewise.
        (grokdeclarator): Likewise.
        (start_decl): Likewise.
        (grokparms): Likewise.
        (start_function): Likewise.
        (finish_function): Likewise.
        (start_method): Likewise.

Thu Apr  9 00:18:44 1998  Dave Brolley  (brolley@cygnus.com)

        * lex.c (finput): New variable.
        (init_cpp_parse):  Renamed from init_parse.
        (init_parse): Handle !USE_CPPLIB.  Call init_cpp_parse when finished.
        (finish_parse): New function.
        * cp-tree.h (init_lex, init_parse): Remove declarations.

Mon Apr  6 02:25:05 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_call): Still evaluate the actual argument.
        * class.c (is_empty_class): Update for -fnew-abi.

        * decl2.c: -fnew-abi implies -fsquangle.

        * method.c (do_build_assign_ref): Don't do anything to copy
        an empty class.
        (do_build_copy_constructor): Likewise.
        * call.c (build_over_call): Likewise.

Sat Apr  4 18:43:58 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (avoid_overlap): Return a value.

Sat Apr  4 12:52:35 1998  Jeffrey A Law  (law@cygnus.com)

        * method.c (check_btype): Add missing argument to xrealloc.
        (check_ktype): Likewise.

Fri Apr  3 02:22:59 1998  Jason Merrill  <jason@yorick.cygnus.com>

        Implement empty base optimization.
        * class.c (finish_struct_1): Add vbase fields earlier.  Set
        CLASSTYPE_SIZE of an empty base to 0.  Types with bases can be empty.
        * search.c (dfs_check_overlap, dfs_no_overlap_yet): New fns.
        (types_overlap_p): New fn.
        * tree.c (avoid_overlap): New fn.
        (build_base_fields): Use it to avoid overlapping empty bases.
        * cp-tree.h, decl2.c, lang-options.h: Add -fnew-abi.

        * decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.

        Re-implement allocation of base class subobjects.
        * tree.c (unshare_base_binfos): New fn.
        (layout_basetypes): Use it.  Now handles offsets of both virtual and
        non-virtual bases, after layout_type.
        (layout_vbasetypes): Remove.
        (build_base_fields): Generate FIELD_DECLs for each non-virtual base.
        (build_vbase_pointer_fields): Split out from old layout_basetypes.
        * class.c (finish_base_struct): Lose offset handling code.
        Move nonvdtor warning here.  Don't mess with t_binfo anymore.
        (finish_struct_1): Don't mess with t_binfo anymore.  Use fns above.
        * cp-tree.h: Adjust.

Thu Apr  2 14:25:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h: Lose CLASSTYPE_VBASE_SIZE, some unused stuff.
        * decl.c, decl2.c, pt.c, ptree.c, lex.c: Likewise.
        * class.c (duplicate_tag_error): Likewise.
        (finish_struct_1): Set CLASSTYPE_SIZE, CLASSTYPE_MODE, CLASSTYPE_ALIGN.
        * tree.c (layout_vbasetypes): Update from layout_record, remove
        var_size support, use CLASSTYPE_SIZE instead of CLASSTYPE_VBASE_SIZE.
        (layout_basetypes): Likewise.

Wed Apr  1 18:22:25 1998  Jeffrey A Law  (law@cygnus.com)

        * class.c, Make sure system.h is included just after config.h.
        Delete lingering stdio and errno references too.
        * decl.c, errfn.c, parse.y, ptree.c search.c, xref.c: Likewise.

Wed Apr  1 15:38:36 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * friend.c (is_friend): Fix access control for local classes.

        * class.c (is_empty_class): New fn.
        * call.c (build_call): Don't pass empty class objects to a function.

Wed Apr  1 14:58:35 1998  Mark Mitchell  <mmitchell@usa.net>

        * call.c (build_over_call): Do name resolution for default
        arguments of function templates in the scope of the templates.

Tue Mar 31 13:43:57 1998  Jeffrey A Law  (law@cygnus.com)

        * call.c: Include system.h.  Remove includes, declarations and
        defines provided by system.h.
        * class.c, cvt.c, decl.c, decl2.c, errfn.c error.c: Likewise.
        * except.c, expr.c friend.c, g++spec.c, init.c, input.c: Likewise.
        * lex.c, parse.y, pt.c, ptree.c repo.c rtti.c, search.c: Likewise.
        * semantics.c, sig.c, spew.c, tree.c, typeck.c: Likewise.
        * typeck2.c, xref.c: Likewise.
        * Makefile.in: Dependencies updated as appropriate.
        * Make-lang.in: Likewise.

Mon Mar 30 12:15:00 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (fn_type_unification): Allow incomplete unification without
        an immediate error message.

Mon Mar 30 08:55:42 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * tree.c (member_p): New fn.
        * decl2.c (finish_file): Only set DECL_STATIC_FUNCTION_P for
        initializing class members.

        * cp-tree.def (TEMPLATE_PARM_INDEX): Class 'x'.
        * ptree.c (lang_print_xnode): Handle TEMPLATE_PARM_INDEX.

        * call.c (build_method_call): Handle non-scoped destructors, too.
        * pt.c (tsubst_copy): Likewise.

        * pt.c (print_template_context): Split out...
        (push_tinst_level): ...from here.

        * friend.c (is_friend): Don't pass a type to decl_function_context.

        * typeck.c (convert_for_initialization): Always hand off
        conversions to class type.

Sun Mar 29 20:01:59 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * friend.c (is_friend): Local classes have the same access as the
        enclosing function.

Sun Mar 29 00:47:32 1998  Jeffrey A Law  (law@cygnus.com)

        * typeck.c (expand_target_expr): Delete dead function.

        * search.c: Put various prototypes inside #ifdef MI_MATRIX.

        * repo.c (save_string): Delete dead function.

        * method.c (thunk_printable_name): Delete dead function.

        * lex.c (yynextch): Delete dead function.

        * expr.c (tree_extract_aggr_init): #if 0 out.

        * except.c (do_unwind): Delete dead function.
        (easy_expand_asm): Likewise.

        * cvt.c (build_conversion_type_1): Delete dead function.

        * cp-tree.h (push_expression_obstack): Declare.

        * call.c (source_type): #if 0 out.

        * class.c (alter_access): Remove unused label.  Add braces
        around empty else clause.

        * lex.c (yyprint): Fix argument to printf.

Sat Mar 28 17:43:52 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.

        * pt.c (instantiate_class_template): Make sure template
        arguments are permanent.
        * init.c (resolve_offset_ref): Don't go looking around in
        template types.

        * semantics.c: Add routines to handle expressions, and some
        declaration processing.
        * parse.y: Use them.
        (current_class_depth): Move declaration to cp-tree.h.
        * parse.c: Regenerated.
        * cp-tree.h: Use them.
        (current_class_depth): Declare.
        * pt.c (tsubst_copy): Use begin_stmt_expr and finish_stmt_expr.

Fri Mar 27 20:23:18 1998  Mark Mitchell  <mmitchell@usa.net>

        * error.c (dump_decl): Be a bit more explicit with template
        type arguments, when verbose.

Fri Mar 27 18:16:40 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * inc/exception: Reorder closing braces.

Fri Mar 27 13:22:18 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (redeclare_class_template): New function.
        * cp_tree.h (redeclare_class_template): Declare it.
        * decl.c (xref_tag): Use it.

Thu Mar 26 11:16:30 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (build_over_call): Check IS_AGGR_TYPE, not
        TYPE_LANG_SPECIFIC.
        * typeck.c (convert_arguments): Likewise.

        * decl.c (grokdeclarator): Remove const and volatile from type after
        setting constp and volatilep.

        * class.c (finish_struct_1): Don't warn about bool bitfield larger
        than one bit.

Thu Mar 26 10:25:52 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.

Thu Mar 26 10:24:05 1998  Mark Mitchell  <mmitchell@usa.net>

        * call.c (build_object_call): Complain about ambiguous operator(),
        rather that crashing.
        (build_new_op): Likewise.
        (build_op_delete_call): Likewise.

Thu Mar 26 10:23:24 1998  Mark Mitchell  <mmitchell@usa.net>

        * cvt.c (perform_qualification_conversions): Use comp_target_types
        instead of comp_ptr_ttypes.

Wed Mar 25 16:10:50 1998  Mark Mitchell  <mmitchell@usa.net>

        * cp-tree.h (enforce_access): Declare.
        * call.c (enforce_access): Make it extern, not static.
        * class.c (alter_access): Use enforce_access; modify code for ISO
        compliance, rather than ARM rules.

Wed Mar 25 12:10:45 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * cp-tree.h: Fix typo.

Wed Mar 25 02:01:02 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * expr.c (cplus_expand_expr): Only do PCC_STATIC_STRUCT_RETURN thing
        if (aggregate_value_p (type)).

        * decl2.c (constructor_name_full): Handle TYPENAME_TYPE.

Tue Mar 24 16:12:01 1998  Mark Mitchell  <mmitchell@usa.net>

        * tree.c (mapcar): When dealing with a DECL, use it's constant
        value, if any.
        * pt.c (lookup_template_class): Don't mangle the names of template
        classes whose arguments are unknown.

        * pt.c (tsubst_expr): Handle GOTO_STMT correctly.

Tue Mar 24 12:21:55 1998  Benjamin Kosnik  <bkoz@lisa.cygnus.com>

        * decl.c (init_decl_processing): Set TYPE_PRECISON for bools to 1.

Tue Mar 24 12:21:48 1998  Jim Wilson  <wilson@cygnus.com>

        * decl.c (init_decl_processing): Initialize TYPE_MAX_VALUE for
        boolean_type_node to 1.

Tue Mar 24 10:23:47 1998  Mark Mitchell  <mmitchell@usa.net>

        * error.c (dump_expr): Remove unused variable `l'.

        * pt.c (for_each_template_parm): New function, created by
        converting uses_template_parms.
        (tree_fn_t): New typedef.
        (uses_template_parms): Use it.
        (mark_template_parm): New function.
        (push_template_decl): Check that the argument list of a partial
        specialization uses all the template parameters.

        * Make-lang.in (c++filt): Don't delete cxxmain.c after we're done
        with it; we might want it for debugging.
        * cp-tree.h (type_unification): Change interface.
        * class.c (finish_struct_1): Skip nested template types, just like
        ordinary nested types.
        (instantiate_type): Use new interface to type_unification.
        * lex.c (init_lex): Add __sz as opname for sizeof.
        * method.c (build_overload_scope_ref): New function.
        (build_overload_int): Handle complex expressions.  Set
        numeric_output_need_bar if necessary.
        (build_overload_value): Handle non-PARM_DECL nodes; this
        routine is now used by build_overload_int.  Remove some
        assignments to numeric_output_need_bar.  Use
        build_overload_scope_ref.
        (build_qualified_name): Note that some template mangled names end
        with digits, and set numeric_output_need_bar appropriately.  Use
        build_underscore_int.
        * pt.c (unify): Change interface.
        (type_unification_real): Likewise.
        (determine_specialization): Use new interfaces.
        (tsubst): Deal gracefully with situations in which the argument
        vector is not fully filled.
        (fn_type_unification): Use new interfaces.
        (type_unification): Likewise.  Remove NOP_EXPR hack.
        (type_unification_real): Likewise.
        (unify): Likewise.  Deal with unification of complex expressions.

Mon Mar 23 12:24:37 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (complete_template_args): Initialize skip properly.

        * decl.c (make_typename_type): Revert.
        (make_implicit_typename): Remove.
        (lookup_name_real): Don't call it.  Call lookup_field if we see a
        TYPE_DECL from a template base.
        * search.c (lookup_field): Do implicit typename stuff.

Sun Mar 22 00:50:42 1998  Nick Clifton  <nickc@cygnus.com>
                          Geoff Noer    <noer@cygnus.com>

        * Makefile.in: Various fixes for building cygwin32 native toolchains.
        * Make-lang.in: Likewise.

Fri Mar 20 18:07:39 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (tsubst, TEMPLATE_TEMPLATE_PARM): Simplify.

Fri Mar 20 10:42:07 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (make_implicit_typename): Rewrite removed code.
        (make_typename_type): Call it if the type we look up comes from
        a base that uses template parms.

        * pt.c (complete_template_args): Rewrite.
        (tsubst, FUNCTION_DECL): Use it.

Fri Mar 20 08:12:43 1998  H.J. Lu  (hjl@gnu.org)

        * semantics.c (finish_asm_stmt): Fix combine strings.  Call
        c_expand_asm_operands () if output_operands, input_operands or
        clobbers is not NULL_TREE.

Fri Mar 20 00:10:19 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (complete_template_args): New function.
        (get_bindings): Deal with specializations of function templates
        with return type containing parameters from outer class
        templates.
        (tsubst, TEMPLATE_TEMPLATE_PARM): When reducing parameter level,
        substitute arguments and compose a new type.

Thu Mar 19 19:01:48 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (tsubst): Clear DECL_PENDING_INLINE_INFO for new
        FUNCTION_DECLs.

Thu Mar 19 11:51:58 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (make_implicit_typename): Lose useless code.

        * call.c (standard_conversion): Handle A* -> const A* properly.

        * pt.c (get_bindings_real): Rename from get_bindings.  Add
        check_rettype parm.
        (get_bindings): Pass 1.
        (get_bindings_overload): Pass 0.

Wed Mar 19 09:08:12 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (check_explicit_specialization): When reverting a static
        member function, also remove the `this' parameter from
        last_function_parms.

Thu Mar 19 02:27:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst_copy, CONST_DECL): Don't bother tsubsting
        a function context.

        * decl.c (store_bindings): Use free_binding_vecs.
        (pop_from_top_level): Likewise.

Wed Mar 18 12:41:43 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (make_implicit_typename): Only change the type of a
        TYPENAME_TYPE.

Wed Mar 18 10:09:51 1998  Mark Mitchell  <mmitchell@usa.net>

        * semantics.c: New file, containing routines to perform the
        semantic phase of parsing.
        * parse.y: Use it.
        * pt.c (tsubst_expr): Likewise.
        * cp-tree.h: Declare the various functions in semantics.c.
        Provide macros to access _STMT tree nodes.
        * cp-tree.def: Add ASM_STMT tree node.
        * Makefile.in, Make-lang.in: Add dependencies on and for
        semantics.c.

Wed Mar 18 00:24:10 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (push_template_decl): Only check primary templates.

        * pt.c (check_explicit_specialization): Complain about default args
        in explicit specialization.

        * parse.y (nomods_initdcl0): Also call cp_finish_decl for a
        constructor_declarator.

Tue Mar 17 14:44:54 1998  Mark Mitchell  <mmitchell@usa.net>

        * typeck2.c (build_x_arrow): Don't crash when an aggregate type
        has no overloaded operator ->.

        * call.c (build_field_call): Don't crash when presented with a
        field that is actually a nested type.

        * decl.c (pushtag): Deal with friend class injection in local
        classes.

        * call.c (build_object_call): Don't crash if OBJ is a
        pointer-to-member-function.

Tue Mar 17 11:40:26 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (push_template_decl): Complain about template with C linkage,
        anonymous template class.

Mon Mar 16 12:10:39 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (pushclass): Only use the mi_matrix stuff #ifdef MI_MATRIX.
        * search.c: Likewise.

        * lex.c (do_pending_defargs): Only call
        maybe_{begin,end}_member_template_processing for FUNCTION_DECLs.

        * parse.y (initdcl0_innards): Move maybeasm back into initdcl0 et al.

Mon Mar 16 10:47:22 1998  Mark Mitchell  <mmitchell@usa.net>

        * parse.y: Deal with CONSTRUCTORS in new_initializers.

Mon Mar 16 10:54:21 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (tsubst_copy): Deal with BIND_EXPR in a way that more
        closely mimics the behavior in parse.y.
        (tsubst_expr): Return the resulting BLOCK when making a tsubst'ing
        into a compound statement.

Sun Mar 15 02:07:26 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h (TEMPLATE_PARMS_FOR_INLINE): New macro.
        * pt.c (inline_needs_template_parms): New fn.
        (original_template): New fn.
        (push_inline_template_parms_recursive): New fn.
        (maybe_begin_member_template_processing): Use them.
        (maybe_end_member_template_processing): Likewise.
        (is_member_or_friend_template): Rename to is_member_template.
        Member functions of local classes are never member templates.

Sun Mar 15 01:14:22 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * lex.c (do_identifier): Handle TEMPLATE_DECL that was
        added in the class scope to catch redefinition error.

        * pt.c (reduce_template_parm_level): Also copy
        the DECL_TEMPLATE_PARMS field.

Sun Mar 15 10:54:08 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (tsubst): Clear TYPE_REFERENCE_TO when creating a
        reduced-level template type parameter.

Sun Mar 15 12:26:02 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * cp-tree.h (struct lang_decl_flags): Add needs_final_overrider.
        (DECL_NEEDS_FINAL_OVERRIDER_P): New macro.
        * class.c (override_one_vtable): Set DECL_NEEDS_FINAL_OVERRIDER_P.
        * decl.c (duplicate_decls): Propagate it.
        * typeck2.c (abstract_virtuals_error): Use two loops to emit
        abstract virtual functions and virtual functions which need a
        final overrider separately.

Thu Mar 12 09:39:40 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * lang-specs.h: Properly put brackets around array elements in
        initializer.

        * typeck.c (build_binary_op_nodefault): Correctly place parens around
        && and || in expression.

Thu Mar 12 09:26:04 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * call.c (default_parm_conversions): Remove prototype definition.
        (build_method_call): Remove unused variable result.

        * cvt.c (ocp_convert): Remove unused variable conversion.

        * decl2.c (ambiguous_decl): Add explicit parameter definition for name.

        * except.c (do_unwind): #if 0 definition of unused variables fcall
        and next_pc.

        * expr.c (extract_scalar_init): #if 0 prototype and function
        definition.

        * init.c (expand_aggr_init_1): Remove unused variable init_type.
        (build_new_1): Remove unused variable t.

        * pt.c (instantiate_class_template): Remove unused variable newtag;
        cast called function return value to void.
        (do_decl_instantiation): Remove unused variables name and fn.

        * tree.c (get_type_decl): Add default return to shut up compiler from
        complaining control reaches end of non-void function.

        * typeck.c (build_x_conditional_expr): Remove unused variable rval.

Thu Mar 12 09:12:15 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * call.c (default_parm_conversions): Remove prototype definition.
        (build_method_call): Remove unused variable result.
        (build_over_call): Add default case in enumeration switch.

Thu Mar 12 08:39:13 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * decl2.c (lang_decode_option): Change j's type to size_t.

        * tree.c (layout_vbasetypes): record_align and desired_align are of
        type unsigned int; const_size and nonvirtual_const_size likewise.

Wed Mar 11 07:25:20 1998  Mark Mitchell  <mmitchell@usa.net>

        * parse.y (new_initializer): Make sure all initializers are
        lists.

Tue Mar 10 07:32:36 1998  Mark Mitchell  <mmitchell@usa.net>

        * decl2.c (import_export_decl): Mark tinfo functions for
        cv-qualified versions of class types as DECL_NOT_REALLY_EXTERN.

Fri Mar  6 23:27:35 1998  Jeffrey A Law  (law@cygnus.com)

        * method.c: Fix typo.

Fri Mar  6 10:06:59 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * method.c: Include "system.h" to get stdlib.h, stdio.h,
        ctype.h, string.h, etc.
        (issue_nrepeats): Add default case in enumeration switch.
        (check_btype): Likewise.
        (process_overload_item): Likewise.

        * Makefile.in (method.o): Depend on system.h.

Wed Mar  4 22:26:53 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

        * lex.c (do_scoped_id): Fix parenthesizing.

Wed Mar  4 12:11:53 1998  Michael Tiemann  <tiemann@axon.cygnus.com>

        * rtti.c (get_tinfo_fn_dynamic): If this function is called an
        FLAG_RTTI is unset, initialize type info machinery and continue
        with FLAG_RTTI enabled.
        (get_typeid): Likewise.

Wed Mar  4 11:47:55 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (unary_complex_lvalue): &D::i has type B::* if i comes
        from B.

Wed Mar  4 11:28:08 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (finish_member_template_decl): Deal more gracefully with
        invalid declarations.

Tue Mar  3 01:38:17 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cvt.c, decl.c, decl2.c, init.c, rtti.c, typeck.c, typeck2.c,
        cp-tree.h: Clean up more old overloading code, old RTTI code, and
        some formatting quirks.

        * call.c, class.c, cp-tree.h, cvt.c, decl.c, init.c, lex.c,
        method.c, pt.c, ptree.c, typeck.c: Remove support for
        -fno-ansi-overloading and overloading METHOD_CALL_EXPR.
        * class.h: Remove.
        * Makefile.in: Adjust.

        * pt.c (unify): Don't allow reduced cv-quals when strict.

        * call.c, class.c, pt.c, cp-tree.h: Remove nsubsts parm from
        *type_unification* and unify.

Mon Mar  2 12:11:06 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (explicit_template_type): Remove TEMPLATE keyword.
        (nested_name_specifier): And add it before this use.
        (typename_sub0): And this use.  Also add use without the keyword.
        (typename_sub1): Likewise.
        * pt.c (instantiate_class_template): Don't actually instantiate
        anything if our type uses template parms.

Mon Mar  2 11:04:59 1998  Jim Wilson  <wilson@cygnus.com>

        * decl.c (start_function): Don't call temporary_allocation for a
        nested function.

Sun Mar  1 21:06:37 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (instantiate_class_template): Don't mess with friends if
        our type uses template parms.

Sat Feb 28 12:06:44 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (nested_name_specifier): Use explicit_template_type.
        (typename_sub): Allow a template_type, an explicit_template_type,
        or an implicit template type at the end.
        * lex.c (yyprint): Handle a PTYPENAME being a TEMPLATE_DECL.
        * decl.c (make_typename_type): Handle template-id where the name
        is a TEMPLATE_DECL.
        * call.c (build_scoped_method_call): Handle member template
        destructor call.
        * pt.c (tsubst_copy, METHOD_CALL_EXPR): Don't assume a member
        destructor is represented by the type.

        * cp-tree.h (TYPENAME_TYPE_FULLNAME): New macro.
        * parse.y (nested_name_specifier): Add 'template' case.
        (explicit_template_type): New rule.
        (typename_sub): Use it.
        * decl.c (make_typename_type): Handle getting a template-id for NAME.
        * pt.c (tsubst): Likewise.

Fri Feb 27 11:17:50 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (add_to_template_args): Fix thinko.
        (instantiate_class_template): Call it later.

        * pt.c (get_class_bindings): Add outer_args parm.
        (most_specialized_class): Likewise.
        (instantiate_class_template): Pass it.
        (more_specialized_class): Likewise.
        (lookup_template_class): Get context from template if none
        was specified.
        (finish_member_template_decl): Don't do anything with a
        partial specialization.
        * decl2.c (check_member_template): Use IS_AGGR_TYPE instead of
        AGGREGATE_TYPE_P.
        * class.c (finish_struct): Member class templates have already been
        checked for name clashes.
        * decl.c (pushdecl_with_scope): Handle pushing at class level.

Fri Feb 27 02:25:16 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (tsubst, TEMPLATE_DECL): Support member class templates.
        (tsubst, *_PARM): Support multiple levels of template classes.
        (instantiate_class_template): Look up the pattern from the
        original template.
        (lookup_template_class): Handle getting a template for d1.
        (push_template_decl): Correct setting of 'primary'.
        (reduce_template_parm_level): Add 'levels' parm.
        (finish_member_template_decl): Support member class templates.
        (template_class_depth): Handle multiple levels.
        * parse.y (component_decl_1, fn.def2): Remove member template case.
        (component_decl): Add member template cases.
        * decl2.c (check_member_template): We now handle member template
        classes.
        * decl.c (pushtag): Handle member templates.
        * method.c (do_inline_function_hair): Don't touch
        IDENTIFIER_GLOBAL_VALUE.
        * init.c (build_offset_ref): If name isn't an identifier, just
        return it.
        * spew.c (yylex): Handle PTYPENAME like TYPENAME.

        * typeck.c (get_delta_difference): Do adjust for conversions to
        and from virtual base.

Wed Feb 25 09:51:29 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck.c (get_delta_difference): Give hard error for conversion
        from virtual base.

        * cp-tree.h: Tweak formatting.

Wed Feb 25 00:35:33 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (push_namespace): Handle redeclaration error.

        * cp-tree.h (IDENTIFIER_NAMESPACE_VALUE): New macro.
        (IDENTIFIER_NAMESPACE_BINDINGS): New macro.
        (NAMESPACE_BINDING): New macro.
        (IDENTIFIER_GLOBAL_VALUE): Use NAMESPACE_BINDING.
        * *.c: Use them.

        * pt.c (push_template_decl): Use innermost_args.

        * decl.c (get_unique_name): Tweak from earlier in the name.

Tue Feb 24 22:15:04 1998  Martin von Löwis  <loewis@informatik.hu-berlin.de>

        * cp-tree.def: Add CPLUS_BINDING node.
        * cp-tree.h (tree_binding): New struct.
        (BINDING_SCOPE, BINDING_VALUE): New macros.
        (current_namespace, global_namespace): Declare extern.
        (struct lang_decl_flags): New field in_namespace.
        (DECL_NAMESPACE_USING, DECL_NAMESPACE_USERS): New macros.
        (DECL_NAMESPACE, SET_DECL_NAMESPACE): New macros.
        (TREE_INDIRECT_USING): New macro.
        * decl2.c (current_namespace, global_namespace): Declare.  The
        value is a NAMESPACE_DECL now, not a TREE_LIST.
        (is_namespace_ancestor, namespace_ancestor): New static functions.
        (add_using_namespace, ambiguous_decl): Likewise.
        (lookup_using_namespace): New support function for lookup_name.
        (qualified_lookup_using_namespace): New support function for
        do_scoped_id and lookup_namespace_name.
        (get_namespace_id): Mark as obsolete.
        (current_namespace_id): Likewise.
        (do_namespace_alias): Implement.
        (do_using_directive): Implement as call to add_using_namespace.
        * decl.c (binding_for_name): New function.
        (push_namespace, pop_namespace): Implement.
        (push_decl): Don't install a FUNCTION_DECL in the global branch.
        (lookup_namespace_name): Implement using qualified lookup.
        (lookup_name_real): For global scoping, lookup in
        global_namespace.  For namespace scoping, lookup in given
        namespace.  For unscoped lookup, iterate over namespace,
        considering using directives.
        (init_decl_processing): Initialize global_namespace.
        (grokvardecl): Build assembler name as static name for globals.
        (grokdeclarator): Remove old namespace mangling.
        (xref_tag): When installing a global binding for the
        tag, make sure we have an identifier.
        * method.c (build_overload_nested_name): Mangle namespaces.
        (build_qualified_name): Likewise.
        (build_decl_overload_real): Likewise.
        * lex.c (build_lang_decl): Set namespace for new declaration to
        current_namespace.
        (do_scoped_id): Find global names in global or current
        namespace, or using qualified namespace lookup, depending on
        context.
        * init.c (build_member_call): When scope is namespace, use
        build_x_function_call instead.
        (build_offset_ref): When scope is namespace, collapse processing
        to lookup_namespace_name instead.
        * error.c (dump_decl): Support NAMESPACE_DECL.
        * decl.c (pushdecl): Bind globals to current namespace.
        (push_overloaded_decl): Likewise.
        (lookup_tag): Likewise.
        (lookup_name_current_level): Likewise.
        (xref_tag): Likewise.
        (start_function): Likewise.
        * lex.c (do_identifier): Likewise.
        (identifier_typedecl_value): Likewise.
        (real_yylex): Likewise.
        * method.c (do_inline_function_hair): Likewise.
        * parse.y (unscoped): Likewise.
        * pt.c (check_explicit_specialization): Likewise.
        (lookup_template_class): Likewise.
        * rtti.c (call_void_fn): Likewise.
        * sig.c (build_sigtable): Likewise.
        * ptree.c (lang_print_xnode): New function.

Tue Feb 24 01:40:24 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (instantiate_class_template): Don't instantiate if pedantic
        and the args use template parms.

        * pt.c (push_tinst_level): If the instantiation uses template parms,
        fail silently.
        * decl.c (xref_basetypes): Do call complete_type for basetypes
        that involve template parameters.

Tue Feb 24 00:36:43 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (process_init_constructor): Fix labeled init check.

Mon Feb 23 05:08:55 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c, call.c, decl.c, method.c, cp-tree.h: Remove unused NARGS
        argument to tsubst and friends.

        * pt.c (tsubst, FUNCTION_DECL): Tidy.

        * typeck.c (build_x_function_call): Handle static member function
        templates like non-templates.  Handle friend templates like normal
        function templates.
        * pt.c (tsubst, *_PARM): Don't use orig_level.
        (get_bindings): Don't call add_to_template_args.
        (instantiate_template): Likewise.
        (tsubst, FUNCTION_DECL): Call add_to_template_args as appropriate.
        * ptree.c (print_lang_type): Print index/level for template parms.

Mon Feb 23 02:52:29 1998  Mark Mitchell  <mmitchell@usa.net>

        * Make-lang.in (cc1plus): Note that cc1plus depends on
        cp/cp-tree.h and cp/cp-tree.def.

        * cp-tree.def (TEMPLATE_CONST_PARM): Remove.
        (TEMPLATE_PARM_INDEX): New tree code, used to indicate a
        position in a template parameter list.
        * cp-tree.h (template_parm_index): New structure, used as the tree
        structure for a TEMPLATE_PARM_INDEX.
        (TEMPLATE_PARM_IDX): New macro.
        (TEMPLATE_PARM_LEVEL): Likewise.
        (TEMPLATE_PARM_DESCENDANTS): Likewise.
        (TEMPLATE_PARM_ORIG_LEVEL): Likewise.
        (TEMPLATE_PARM_DECL): Likewise.
        (TEMPLATE_TYPE_PARM_INDEX): Likewise.
        (TEMPLATE_TYPE_ORIG_LEVEL): Likewise.
        (TEMPLATE_TYPE_DECL): Likewise.
        (TEMPLATE_CONST_IDX): Remove.
        (TEMPLATE_CONST_LEVEL): Likewise.
        (TEMPLATE_CONST_SET_INFO): Likewise.
        (TEMPLATE_TYPE_SET_INFO): Likewise.
        (TEMPLATE_TYPE_IDX): Redefine in terms of TEMPLATE_PARM_INDEX
        node.
        (TEMPLATE_TYPE_LEVEL): Likewise.
        * decl.c (decls_match): Call comp_template_parms, rather than
        expanding it inline.
        (duplicate_decls): If two template declarations are being merged,
        then their TEMPLATE_INFOs should be merged as well.
        (grokfndecl): Save template-id information when declaring a friend
        with explicit template arguments.  Pass arguments to
        check_explicit_specialization via correct convention; at some
        point check_explicit_specialization changed, but these call-sites
        did not.
        (grokdeclarator): Tidy up slightly.
        * decl2.c (check_classfn): Tidy up slightly.  Don't assume that
        two template functions with the same DECL_ASSEMBLER_NAME the same,
        since the names are not yet mangled.
        * error.c (dump_decl): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        (dump_expr): Likewise.  Use the TEMPLATE_PARM_DECL to get at the
        decl for a non-type parameter, rather than printing `<tparm ...>'.
        * friend.c (is_friend): Handle TEMPLATE_DECL friends.
        (do_friend): Deal with template friends.
        * lex.c (do_pending_inlines): Call
        maybe_begin_member_template_processing, rather than
        conditionally calling begin_member_template_processing.
        (process_next_inline): Likewise.  Call
        maybe_end_member_template_processing, rather than
        conditionally calling end_member_template_processing.
        (do_pending_defargs): Likewise.
        (do_identifier): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        * method.c (build_mangled_template_parm_index): New function.
        (build_overload_value): Use it.
        (build_overload_name): Likewise.
        * pt.c (finish_member_template_decl): Allow friend declarations.
        (template_class_depth): New function.
        (is_member_template): Rename, and modify, to become...
        (is_member_or_friend_template): New function.
        (end_member_template_processing): Rename, and modify, to become...
        (maybe_end_member_template_processing).
        (build_template_parm_index): New function.
        (reduce_template_parm_level): New function.
        (process_template_parm): Modify to use build_template_parm_index.
        (push_template_decl): Deal with friend templates.
        (uses_template_parms): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        (tsubst_friend_function): New function.
        (instantiate_class_template): Generate the DECL_FRIENDLIST
        for a new instantiation by using tsubst_friend_function rather
        than just tsubst.
        (tsubst): Don't tsubst into a type which is a TEMPLATE_DECL.
        Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM, and the
        appropriate new macros.  Use reduce_template_parm_level to
        generate lower-level template parameters.  Handle tsubst'ing into
        TEMPLATE_DECLS that declare TEMPLATE_TEMPLATE_PARMS.  Don't forget
        to tsubst the DECL_CONTEXT and DECL_CLASS_CONTEXT of newly created
        templates.  Similarly for the template parameters for a new
        template.
        (tsubst_copy): Tidy up slightly.  Use TEMPLATE_PARM_INDEX instead
        of TEMPLATE_CONST_PARM.  Handle TYPE_DECLs by tsubsting into them.
        (unify): Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM.
        (get_bindings): Call add_to_template_args if necessary.
        (instantiate_decl): Handle instantiations of friend templates.
        * search.c (lookup_field_1): Don't treat the TYPE_FIELDS of a
        TEMPLATE_TYPE_PARM as a list of fields; it's not!
        * spew.c (yylex): Do a little manual constant propagation to
        clarify the code.

Sun Feb 22 19:53:29 1998  Jeffrey A Law  (law@cygnus.com)

        * error.c: Include sys/types.h.

Thu Feb 19 14:49:09 1998  Jeffrey A Law  (law@cygnus.com)

        * method.c (build_mangled_name): Start CPP directives in column zero.

Thu Feb 19 10:36:48 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * typeck2.c (process_init_constructor): Sorry about non-trivial
        labeled initializers.
        * parse.y (initlist): Re-enable labeled initializers.

Thu Feb 19 10:15:55 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (coerce_template_parms): Add a new parameter, is_tmpl_parm,
        all callers changed.  Rely on the new parameter instead of arg
        being a TREE_LIST when determine whether we are working inside
        template template parameter.  Clean up is_type test.

Thu Feb 19 10:04:12 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cvt.c (cp_convert_to_pointer): Preserve TREE_CONSTANT.
        * typeck2.c (initializer_constant_valid_p): Allow conversions
        between pointers and references.

1998-02-19  Brendan Kehoe  <brendan@cygnus.com>

        * typeck.c (build_unary_op): Only warn about incr/decr a pointer
        if pedantic || warn_pointer_arith.

Thu Feb 19 09:37:21 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (unify): Handle TEMPLATE_DECL.

1998-02-18  Brendan Kehoe  <brendan@cygnus.com>

        * cp-tree.h (strip_attrs): Remove decl.

1998-02-18  Doug Evans  <devans@cygnus.com>

        * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
        Update olddecl's attributes too.
        (strip_attrs): Remove function.
        * typeck.c (common_type): Call merge_machine_type_attributes.

Tue Feb 17 14:07:52 1998  Mark Mitchell  <mmitchell@usa.net>

        * parse.y (initdcl0_innards): New grammar symbol.
        (nomods_initdecls, nomods_initdcl0): Change type from itype to
        none, since the resulting value is never used.
        (parse_decl): New function.
        (datadef): Remove redundant actions.
        (initdcl0, notype_initdcl0, nomods_initdcl0): Use initdcl0_innards.
        * parse.c: Regenerated.

Tue Feb 17 11:54:16 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (simple_stmt): Use getdecls() to check for decl.

Sat Feb 14 11:50:51 1998  Manfred Hollstein  <manfred@s-direktnet.de>

        * Make-lang.in (DEMANGLER_INSTALL_NAME, DEMANGLER_CROSS_NAME): New
        macros.
        (c++.install-common): Install c++filt properly as native or as cross
        variant.
        (c++.uninstall): Add c++filt.

Fri Feb 13 14:55:37 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (standard_conversion): Fix multi-level ptr conversions.

Fri Feb 13 14:06:22 1998  Mike Stump  <mrs@wrs.com>

        * init.c (build_new): Propagate error_mark_node up.

Fri Feb 13 13:24:32 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * parse.y (simple_stmt): If the condition isn't a declaration,
        start the controlled block after the test.

Fri Feb 13 02:26:10 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

        * call.c (build_over_call): Convert builtin abs, labs and fabs to
        tree-codes.
        * decl.c (init_decl_processing): Re-enable abs, labs and fabs as
        builtins.

Fri Feb 13 01:36:42 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * call.c (standard_conversion): A BASE_CONV replaces an RVALUE_CONV.

Fri Feb 13 00:21:59 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cp-tree.h: Add access_protected_virtual_node.
        * class.c (init_class_processing): Initialize it.
        * decl.c (xref_basetypes): Use it.
        * parse.y (base_class_access_list): Likewise.

        * Make-lang.in (DEMANGLER_PROG): Add $(exeext).
        (c++.install-common): Install c++filt.

Thu Feb 12 12:46:51 1998  Benjamin Kosnik  <bkoz@rhino.cygnus.com>

        * decl.c (shadow_tag): Give error for typedef-ing built-in types.

Wed Feb 11 23:28:05 1998  Mark Mitchell  <mmitchell@usa.net>

        * call.c (reference_binding): Use comptypes when comparing
        TYPE_MAIN_VARIANTS to handle non-canonical array/index types.

Wed Feb 11 16:42:04 1998  Mark Mitchell  <mmitchell@usa.net>

        * tree.c (is_overloaded_fn): Use really_overloaded_fn.
        (really_overloaded_fn): Move check here from is_overloaded_fn.
        (get_first_fn): Use really_overloaded_fn and is_overloaded_fn.

Wed Feb 11 15:54:18 1998  Mark Mitchell  <mmitchell@usa.net>

        * typeck.c (build_ptrmemfunc): Type-check pointer-to-member
        conversions.

Mon Feb  9 22:23:31 1998  Mark Mitchell  <mmitchell@usa.net>

        * cp-tree.h (push_template_decl): Return the decl passed in, or an
        equivalent duplicate.
        * decl.c (pushtag): Use the return value from push_template_decl.
        (duplicate_decls): When duplicating a template declaration, merge
        the DECL_TEMPLATE_RESULTs as well.
        (make_implicit_typename): Don't try to dive into typename types to
        find a context for making a new implicit typename.
        (start_decl): Use the return value from push_template_decl.
        (grokdeclarator): Complain about declarations list `const operator
        int'.  Since we don't correctly handle in-class initializations of
        non-static data members, complain about this (now illegal)
        practice.  Issue an error for initializations of non-const statics
        since that is illegal as well, and since we don't handle that case
        correctly either.
        (start_function): Use the return value from push_template_decl.
        (start_method): Likewise.
        * decl2.c (grokfield): Likewise.  Since the change to
        grokdeclarator ensures that all initialized fields are in fact
        static, remove a redundant test for TREE_PUBLIC.
        * parse.y (initlist): Disable labeled initializers since they do
        not work as per the documentation, and since they do not use the
        same syntax as the C front end.
        * pt.c (push_template_decl): Return the decl passed in, or an
        equivalent duplicate.
        (lookup_template_class): When searching in a nested context,
        use the right arguments.
        (uses_template_parms): Handle the DECL_INITIAL for a CONST_DECL.
        * typeck.c (build_component_ref): Assign the correct type to the
        result of build_vfn_ref.

Tue Feb 10 23:56:46 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (convert_nontype_argument): Fix typo.
        (check_explicit_specialization): Allow old-style specialization
        of class template members.

Tue Feb 10 20:36:52 1998  Jason Merrill  <jason@yorick.cygnus.com>
                          Manfred Hollstein  <manfred@s-direktnet.de>

        * decl.c (grokdeclarator): Use DECL_USE_TEMPLATE instead
        when deciding to override DECL_ASSEMBLER_NAME.

Tue Feb 10 15:30:55 1998  Andrew MacLeod  <amacleod@torpedo.to.cygnus.com>

        * decl2.c (lang_f_options): Add -fsquangle to option processing list.
        * cp-tree.h (flag_do_squangling): Add declaration.
        * lang-options.h: Add -fsquangle and -fno-squangle.
        * method.c: Add macros and static variables for squangling.
        (build_overload_name): Rename to build_mangled_name, add logic for B
        compression, and split into process_modifiers and
        process_overload_item.
        (process_modifiers): New function, to handle constant, reference,
        and pointer types.
        (process_overload_item): New function, handles issue of type codes.
        (build_overload_name): New function, start squangling and call
        build_mangled_name.
        (ALLOCATE_TYPEVEC, DEALLOCATE_TYPEVEC): Remove macro and expand inline.
        (start_squangling): New function to initialize squangling structs.
        (end_squangling): New function to destroy squangling structs.
        (nrepeats): Rename variable to Nrepeats.
        (issue_nrepeats): New function for issuing 'n' type repeats.
        (check_ktype): New function to check for type K name compression.
        (build_overload_nested_name): Add a check for K name compression.
        (build_qualified_name): Add a check for K name compression and don't
        use DECL_ASSEMBLER_NAME when squangling is on.
        (check_btype): New function, checks for B type compression.
        (build_static_name, build_decl_overload_real): Initiate squangling.
        (build_typename_overload, build_overload_with_type): Initiate
        squangling

Sun Feb  8 23:47:38 1998  scott snyder  <sss@d0linux01.fnal.gov>

        * method.c (make_thunk): Avoid name buffer overflow.

Sat Feb  7 16:48:54 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (instantiate_decl): Call cp_finish_decl for vars even if we
        don't define them yet.

        * parse.y (nomods_initdcl0): Add constructor_declarator case.

Fri Feb  6 21:32:25 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

        * config-lang.in (diff_excludes): Use basename only.

Thu Feb  5 19:10:40 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * tinfo2.cc: Add tinfo for signed char.

Thu Feb  5 14:38:23 1998  Mike Stump  <mrs@wrs.com>

        * search.c (compute_access): Handle protected constructors in derived
        classes as accessible.

Wed Feb  4 01:26:49 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * expr.c (cplus_expand_expr, PCC_STATIC_STRUCT_RETURN code):
        Call convert_from_reference sooner.

Tue Feb  3 23:50:52 1998  Mark Mitchell  <mmitchell@usa.net>

        * cvt.c (ocp_convert): Obtain the constant values from constant
        decls even if the destination type is the same as the type of the
        decl.

        * decl2.c (finish_file): Make sure that static inlines with
        definitions are not marked DECL_EXTERNAL before returning.

Tue Feb  3 22:43:42 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c: Lose arg_looking_for_template.
        (lookup_name_real): Likewise.
        * parse.y: Lose processing_template_arg, template_arg1.
        (primary): Likewise.
        * spew.c (yylex): Set lastiddecl for PTYPENAMEs, too.

Tue Feb  3 22:04:01 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * error.c (dump_decl): Fix type of default arguments for template
        template parameters and nontype template parameters.
        * parse.y (template_parm): Handle invalid default template
        template arguments here.

        * parse.y (template_parm): Use template_arg instead of PTYPENAME
        for default template template argument.
        * pt.c (coerce_template_parms): Merge default template argument
        codes.  Can treat RECORD_TYPE as template name if it is implicitly
        created.  Fix argument index in error message.
        * typeck.c (comptypes): Merge template argument comparison codes in
        TEMPLATE_TEMPLATE_PARM and RECORD_TYPE.

Tue Jan  6 01:42:44 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * lex.c (file_name_nondirectory): Also check for '/'.

Mon Feb  2 11:24:22 1998  Mark Mitchell  <mmitchell@usa.net>

        * parse.y (primary): Deal with statement-expressions in
        templates.
        * pt.c (tsubst_copy): Handle BIND_EXPR.
        * tree.c (mapcar): Likewise.

        * call.c (add_template_candidate_real): Pass extra parameter to
        fn_type_unification.
        * cp-tree.h (fn_type_unification): Add parameter.
        * pt.c (fn_type_unification): Add additional parameter to deal with
        static member functions.
        (get_bindings): Deal with static member functions.

        * cp-tree.h (DECL_NONSTATIC_MEMBER_FUNCTION_P): New macro.
        (revert_static_member_fn): Declare.
        * decl.c (revert_static_member_fn): Remove declaration.  Change
        linkage from internal to external.
        (cp_finish_decl): Deal with virtual functions in classes local to
        template functions.
        * decl2.c (finish_file): Don't forget to emit increment/decrement
        expressions in initializers for file-scope variables.
        * parse.y (typename_sub2): If the typename doesn't names a
        template, rather than a type, issue an error message.
        * pt.c (check_explicit_specialization): Handle specializations of
        static member functions.
        (coerce_template_parms): Handle offset references to lists of
        member functions.
        * search.c (note_debug_info_needed): Don't crash when handed a
        type which is being defined.
        * typeck.c (complete_type): Don't crash when handed NULL_TREE;
        that can happen with some illegal code.

Mon Feb  2 00:57:38 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

        * call.c (user_harshness): Initialize `code' to 0.
        (build_method_call): Initialize `candidates', `cp' and `len' to 0.
        (null_ptr_cst_p): Add parentheses around && within ||.
        (standard_conversion): Likewise.
        (z_candidate): Likewise.
        (build_user_type_conversion_1): Initialize `args' to NULL_TREE.
        (build_object_call): Likewise for `mem_args'.
        (build_new_op): Likewise for `mem_arglist'.  Add `return' from
        default case in enumeration switch.

        * class.c (build_vtable_entry): Add explicit braces to avoid
        ambiguous `else'.
        (build_class_init_list): Likewise.
        (finish_struct_1): Initialize `width' to 0.
        (instantiate_type): Initialize `name' to NULL_TREE.  Add
        explicit braces to avoid ambiguous `else'.

        * cvt.c (convert_to_aggr): Add explicit braces to avoid ambiguous
        `else'.

        * decl.c (grok_reference_init): Eliminate unused parameter, all
        callers changed.
        (record_builtin_type): Initialize `tdecl' to NULL_TREE.
        (init_decl_processing): Initialize `vb_off_identifier' to NULL_TREE.
        (cp_finish_decl): Initialize `ttype' to NULL_TREE.
        (grokdeclarator): Add parentheses around && within ||.  Add
        explicit braces to avoid ambiguous `else'.
        (grokparms): Initialize `type' to NULL_TREE.
        (xref_tag): Remove unused label `just_return'.
        (finish_enum): Initialize `minnode' and `maxnode' to NULL_TREE.
        (finish_function): Initialize `cond' and `thenclause' to NULL_TREE.
        (hack_incomplete_structures): Add parentheses around assignment
        used as truth value.

        * decl2.c (coerce_delete_type): Hide definition of `e3'.

        * error.c: Include <stdlib.h>.
        (dump_expr): Change the type of `i' to size_t.  Remove unused
        label `error'.

        * except.c (init_exception_processing): Remove unused variable `d'.
        (expand_throw): Likewise for `label'.

        * friend.c (add_friends): Add explicit braces to avoid ambiguous
        `else'.

        * init.c (sort_member_init): Initialize `last_field' to NULL_TREE.
        (sort_base_init): Likewise for `binfo'.
        (expand_member_init): Likewise for `rval'.
        (build_member_call): Add parentheses around assignment used as
        truth value.
        (build_offset_ref): Add explicit braces to avoid ambiguous `else'.
        (build_new): Initialize `nelts' to NULL_TREE.  Initialize
        `old_immediate_size_expand' to 0.
        (build_new_1): Initialize `nelts' and `alloc_node' to NULL_TREE.
        (build_vec_delete_1): Remove unused variable `block'.
        (expand_vec_init): Initialize `itype' to NULL_TREE.

        * lex.c: Include <strings.h> if we don't have <string.h>.  Protect
        declaration of `index' and `rindex' with autoconf macros.
        (reinit_parse_for_expr): Remove unused variables
        `look_for_semicolon' and `look_for_lbrac'.
        (cons_up_default_function): Initialize `args' to NULL_TREE.
        (readescape): Initialize `firstdig' to 0.
        (real_yylex): Add parentheses around assignment used as truth value.

        * method.c: Include <strings.h> if we don't have <string.h>.
        Protect declaration of `index' with autoconf macro.

        * parse.y (primary): Add explicit braces to avoid ambiguous `else'.
        Initialize `type' to NULL_TREE.
        (structsp): Remove unused variable `id'.

        * pt.c (coerce_template_parms): Add explicit braces to avoid
        ambiguous `else'.
        (lookup_template_class): Initialize `template' to NULL_TREE.
        (instantiate_class_template): Remove unused variable `name' and `e'.
        (tsubst): Likewise for `i'.  Initialize `last' to NULL_TREE.
        (do_poplevel): Initialize `saved_warn_unused' to 0.
        (type_unification): Remove unused varable `parm'.
        (unify): Likewise for `j'.

        * repo.c (init_repo): Add parentheses around assignment used as
        truth value.
        (finish_repo): Remove unused varable `p'.

        * search.c (get_binfo): Initialize `type' to NULL_TREE.
        (get_base_distance): Likewise.
        (lookup_field): Initialize `rval_binfo_h', `type', `basetype_path'
        and `new_v' to NULL_TREE.
        (lookup_fnfields): Likewise for `rval_binfo_h'.
        (breadth_first_search): Add parentheses around assignment used as
        truth value.
        (get_template_base): Initialize `type' to NULL_TREE.

        * sig.c (append_signature_fields): Initialize `last_mfptr' to
        NULL_TREE.
        (build_signature_table_constructor): Likewise for
        `last_rhs_field', `pfn' and `vt_off'.
        (build_sigtable): Likewise for `init'.

        * tree.c (break_out_calls): Initialize `t2' to NULL_TREE.
        (propagate_binfo_offsets): Likewise for `delta'.
        (hash_tree_cons): Initialize hashcode to 0.
        (can_free): Likewise for `size'.
        (cp_tree_equal): Add explicit braces to avoid ambiguous `else'.

        * typeck.c (convert_sequence): Hide prototype.
        (common_type): Add explicit braces to avoid ambiguous `else'.
        (comp_target_types): Likewise.
        (build_x_function_call): Initialize `ctypeptr' to NULL_TREE.
        (build_function_call_real): Add explicit braces to avoid ambiguous
        `else'.
        (convert_arguments): Initialize `called_thing' to 0.
        (convert_for_initialization): Initialize `savew' and `savee' to 0.

        * typeck2.c (incomplete_type_error): Initialize `errmsg' to 0.
        (digest_init): Initialize `old_tail_contents' to NULL_TREE.
        (build_x_arrow): Likewise for `last_rval'.

        * xref.c (GNU_xref_decl): Initialize `cls' to 0.

Sun Feb  1 12:45:34 1998  J"orn Rennecke  <amylaar@cygnus.co.uk>

        * decl.c (init_decl_processing): Use set_sizetype.
        * decl2.c (sizetype): Don't declare.
        * typeck.c (c_sizeof): Convert result of *_DIV_EXPR to sizetype.
        (c_sizeof_nowarn, build_binary_op_nodefault): Likewise.
        (build_component_addr, unary_complex_lvalue): Likewise.
        * rtti.c (expand_class_desc): Likewise.
        * class.c (get_vfield_offset): Likewise.

Thu Jan 29 10:39:30 1998  Mark Mitchell  <mmitchell@usa.net>

        * pt.c (convert_nontype_argument): Move check for is_overloaded_fn
        early to avoid bogus error.  Handle overloaded function
        names provided as template arguments correctly.
        (coerce_template_parms): Don't mishandle overloaded functions when
        dealing with template template parameters.
        (lookup_template_class): Issue an error message, rather than
        crashing, when the TYPE_DECL provided is not a template type.

Wed Jan 28 23:14:44 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * class.c (instantiate_type): Don't just return a known type if
        it's wrong.

Wed Jan 28 11:04:07 1998  Mark Mitchell  <mmitchell@usa.net>

        * class.c (instantiate_type): Remove handling of FUNCTION_DECL
        since that code could never be reached.

        * error.c (dump_decl): Avoid aborting in the midst of printing an
        error message about an illegal template declaration.

        * parse.y (structsp): Print an error message, rather than crashing,
        when a class-head does not name a class.

        * pt.c (convert_nontype_argument):  Allow REAL_TYPE and COMPLEX_TYPE
        template arguments as a g++ extension.

        * cp-tree.def (ALIGNOF_EXPR): New tree code.
        * decl2.c (grok_alignof): If processing_template_decl, just store
        the expression.
        * typeck.c (c_alignof): Likewise.
        * decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR.
        * error.c (dump_expr): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * tree.c (cp_tree_equal): Likewise.
        * pt.c (uses_template_parms): Correctly determine whether or not a
        SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant
        folding can be done.

        * cp-tree.h (grok_enum_decls): Remove type parameter.
        * decl.c (grok_enum_decls): Likewise.
        * decl2.c (grok_x_components): Call grok_enum_decls
        unconditionally, since it will do nothing if there is no
        current_local_enum.  Use the new calling sequence.
        * pt.c (tsubst_enum): Use the new calling sequence for
        grok_enum_decls.

        * decl.c (start_function): Make member functions of local classes
        in extern inline functions have comdat linkage here...
        (grokdeclarator): Rather than here.

Wed Jan 28 10:55:47 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * pt.c (convert_nontype_argument): Use decl_constant_value.

Tue Jan 27 16:42:21 1998  Mark Mitchell  <mmitchell@usa.net>

        * call.c (add_template_candidate_real): New function.
        (add_template_candidate): Use it.
        (add_template_conv_candidate): Likewise.
        (joust): Pass extra argument to more_specialized.
        * class.c (instantiate_type): Handle a single FUNCTION_DECL.
        (is_local_class): Remove.
        (finish_struct): Check TI_PENDING_SPECIALIZATION_FLAG.
        * cp-tree.h (is_local_class): Remove.
        (perform_array_to_pointer_conversion): Likewise.
        (finish_member_template_decl): Add.
        (check_explicit_specialization): Return a tree, not an int.
        (more_specialized): Take additional argument.
        (get_bindings): Likewise.
        (TI_PENDING_SPECIALIZATION_FLAG): New macro.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
        (perform_array_to_pointer_conversion): Remove.
        * decl.c (saved_scope): Add processing_specialization,
        processing_explicit_instantiation fields.
        (maybe_push_to_top_level): Save them.
        (pop_from_top_level): Restore them.
        (grokfndecl): Use new return value from
        check_explicit_specialization.
        (start_decl): Don't check flag_guiding_decls before pushing
        decls.
        (cp_finish_decl): Remove previous (bogus) change.
        (grok_declarator): Use decl_function_context rather than
        is_local_class.
        * decl2.c (finish_file): Pass extra argument to get_bindings.
        (build_expr_from_tree): Let build_x_component_ref check
        validity of arguments rather than doing it here.
        * lex.c (cons_up_default_function): Remove code fooling with
        processing_specialization, processing_explicit_instantiation
        flags, as that is now done in {maybe_push_top,pop_from}_top_level.
        * method.c (build_overload_identifier): Mangle local classes in
        template functions correctly.
        * parse.y (finish_member_template_decl): Move to pt.c.
        * pt.c (finish_member_template_decl): Moved here from parse.y.
        (print_candidates): New function.
        (determine_specialization): Change interface.  Properly look for
        most specialized versions of template candidates.
        (check_explicit_specialization): Fully process explicit
        instantiations.
        (push_template_decl): Avoid looking at CLASSTYPE fields in
        FUNCTION_DECLS.
        (determine_overloaded_function): Remove.
        (convert_nontype_argument): Change name from
        convert_nontype_parameter.  Use determine_overloaded_function
        instead of instantiate_type.
        (mangle_class_name_for_template): Handle type contexts as well as
        function contexts.
        (classtype_mangled_name): Likewise.
        (lookup_template_class): Likewise.
        (tsubst): Likewise.
        (more_specialized): Take explicit template arguments as a
        parameter.
        (most_specialized): Likewise.
        (get_bindings): Likewise.  Check that return types match before
        proclaiming a function a match.
        (do_decl_instantiation): Remove code searching for function to
        instantiate; that is now done in check_explicit_specialization.
        (add_maybe_template): Pass extra argument to get_bindings.
        * tree.c (really_overloaded_fn): Use is_overloaded_fn to simplify
        implementation.
        * typeck.c (build_component_ref): Check for invalid arguments.

Tue Jan 27 01:44:02 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * expr.c (cplus_expand_expr, AGGR_INIT_EXPR): Don't check that
        return_target and call_target are equivalent.

        * pt.c (type_unification_real): Just accept function parms that
        don't use any template parms.

Sun Jan 25 03:30:00 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * decl.c (cp_finish_decl): When bailing on a comdat variable, also
        unset DECL_NOT_REALLY_EXTERN.

        * parse.y (typename_sub*): Fix std::.

Sat Jan 24 12:13:54 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * error.c (dump_decl): Fix type default template args.
        (dump_type): Hand TEMPLATE_DECL off to dump_decl.

Fri Jan 23 18:34:37 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * lex.c (DIR_SEPARATOR): Define to be '/' if not already defined.
        (file_name_nondirectory): Use.

Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  <lerdsuwa@scf.usc.edu>

        * pt.c (coerce_template_parms): Don't access elements of ARGLIST
        that are not really present.  Substitute default arguments in
        template template arguments.  Correctly convert TEMPLATE_DECL to
        TEMPLATE_TEMPLATE_PARM.
        (comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM
        are no longer treated specially here.
        * parse.y (template_template_parm): Fix copy error.
        * decl.c (grokdeclarator): Warn about missing `typename' for nested
        type created from template template parameters.
        * parse.y (bad_parm): Likewise

        * class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
        (push_nested_class): Likewise.
        * cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
        * cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
        (copy_template_template_parm): Declare.
        * decl.c (arg_looking_for_template): New variable.
        (lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
        Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
        node if arg_looking_for_template is nonzero.
        (pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
        (grok_op_properties, xref_tag, xref_basetypes): Likewise.
        (grokdeclarator): Handle TEMPLATE_DECL.
        * decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
        * error.c (dump_type): Add TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM.
        (dump_type_prefix, dump_type_suffix): Handle TEMPLATE_TEMPLATE_PARM.
        (dump_decl): Handle unnamed template type parameters.
        Handle template template parameters.
        (dump_function_name): Handle template template parameters.
        * init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef):
        Handle TEMPLATE_TEMPLATE_PARM.
        * method.c (build_template_template_parm_names): New function.
        (build_template_parm_names): Handle TEMPLATE_DECL.
        (build_overload_nested_name, build_overload_name):
        Handle TEMPLATE_TEMPLATE_PARM.
        * parse.y (maybe_identifier): New nonterminal.
        (template_type_parm): Use it.
        (template_template_parm, template_arg1): New nonterminal.
        (template_parm): Add template_template_parm rules.
        (template_arg): Set processing_template_arg.
        (template_arg1): Rules moved from template_arg.
        (primary, nonnested_type): Set arg_looking_for_template if we are
        processing template arguments.
        * pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
        (process_template_parm): Handle template template parameters.
        (coerce_template_parms, comp_template_args): Likewise.
        (mangle_class_name_for_template, lookup_template_class): Likewise.
        (uses_template_parms): Handle TEMPLATE_DECL and
        TEMPLATE_TEMPLATE_PARM.
        (current_template_args): Handle TEMPLATE_DECL.
        (tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
        * search.c (dfs_walk, dfs_record_inheritance):
        Handle TEMPLATE_TEMPLATE_PARM.
        * tree.c (copy_template_template_parm): New function.
        (mapcar): Handle TEMPLATE_TEMPLATE_PARM.
        * typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.

Mon Jan 19 22:40:03 1998  Mark Mitchell  <mmitchell@usa.net>

        * decl.c (start_decl): Don't allow duplicate definitions of static
        data members.

        * call.c (build_user_type_conversion_1): Handle user-defined
        template conversion operators correctly.

        * decl2.c (build_expr_from_tree): Issue an error message if the
        object in a COMPONENT_REF is a TEMPLATE_DECL.

        * typeck.c (incomplete_type_error): Handle TEMPLATE_TYPE_PARMs.

        * class.c (is_local_class): New function.
        * cp-tree.h (is_local_class): Declare it.
        (last_tree): Likewise.
        (begin_tree): Likewise.
        (end_tree): Likewise.
        (lookup_template_class): Change prototype.
        * decl.c (cp_finish_decl): Check for NULL where necessary.
        Consider FUNCTION_DECLS to declare objects with top-level binding,
        when calling make_decl_rtl.
        (grokdeclarator): Give members of local classes internal linkage.
        (start_function): Remove declaration of last_tree.
        (finish_function): Set flag_keep_inline_functions around call to
        rest_of_compilation if we are processing a member function in a
        local class.
        (start_method): Call push_template_decl for member functions of
        local classes in template functions.
        * decl2.c (import_export_decl): Don't give external linkage to
        instantiations of templates with internal linkage.
        * parse.y (last_tree): Remove declaration.
        (template_type): Pass extra parameter to lookup_template_class.
        (self_template_type): Likewise.
        (structsp): Move call to reset_specialization into left_curly.
        (left_curly): Call reset_specialization, and begin_tree.
        * pt.c (saved_trees): New variable.
        (mangle_class_name_for_template): Change prototype.  Use
        additional function context to name local classes in templates
        correctly.
        (classtype_mangled_name): Pass the context.
        (push_template_decl): Handle local classes and templates, and
        member functions for such classes.
        (convert_nontype_parameter): Fix handling of pointer-to-member
        constants.
        (lookup_template_class): Handle local classes in templates.
        (tsubst): Likewise.  Don't assume that template instantiations
        have external linkage; pay attention to the template declaration.
        (mark_decl_instantiated): Likewise.
        (begin_tree): New function.
        (end_tree): Likewise.

        * decl.c (xref_basetypes): Don't call complete_type for basetypes
        that involve template parameters; that can lead to infinite
        recursion unnecessarily.

        * pt.c (register_specialization): Do not register specializations
        that aren't ready to be registered yet.
        (check_explicit_specialization): Handle explicit specialization of
        constructors and destructors.
        (build_template_decl): New function.
        (push_template_delc): Handle out-of-class specializations of
        member templates.

        * pt.c (check_explicit_specialization): Set up the template
        information before registering the specialization.
        (coerce_template_parms): Fix thinko.
        (tsubst): Handle specializations of member templates correctly.

        * class.c (finish_struct_methods): Remove calls to
        check_explicit_specialization from here.
        (finish_struct): And insert them here.
        * cp-tree.h (perform_qualification_conversions): New function.
        (perform_array_to_pointer_conversion): Likewise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (determine_specialization): Renamed from
        determine_explicit_specialization.
        (comp_template_parms): New function.
        (processing_explicit_instantiation): New variable.
        * cvt.c (perform_qualification_conversions): New function.
        (perform_array_to_pointer_conversion): Likewise.
        * decl.c (duplicate_decls): Don't consider template functions
        alike unless they have the same parameters.  Refine handling of
        instantiation/specialization mismatches.
        (start_decl): Don't call pushdecl for template specializations,
        since they don't affect overloading.
        (start_function): Likewise.
        (grokfndecl): Call check_explicit_specialization a little later.
        Don't call duplicate_decls for memberm template specializations.
        (grokdeclarator): Don't update template_count for classes that are
        themselves specializations.  Remove use of `2' as parameter to
        grokfndecl since that value isn't used.
        * lex.c (cons_up_default_function): Save and restore
        processing_explicit_instantiation around calls to grokfield.
        * parse.y (finish_member_template_decl): New function.
        (component_decl_1): Use it.
        (fn.def2): Likewise.
        (template_arg_list_opt): New nonterminal.
        (template_type): Use it.
        (self_template_type): Likewise.
        (template_id): Likewise.
        (object_template_id): Likewise.
        (notype_template_declarator): Likwise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (explicit_instantiation): Use them.
        * pt.c (coerce_template_parms): Add parameters.
        (processing_explicit_instantiation): New variable.
        (convert_nontype_parameter): New function.
        (determine_overloaded_function): Likewise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (retrieve_specialization): Likewise.
        (register_specialization): Likewise.
        (processing_explicit_specialization): Removed.
        (determine_specialization): Handle specializations of member
        functions of template class instantiations.
        (check_explicit_specialization): Refine to conform to standard.
        (comp_template_parms): New function.
        (coerce_template_parms): Call convert_nontype_parameter.
        (tsubst): Refine handling of member templates.  Use
        register_specialization.
        (instantiate_template): Use retrieve_specialization.
        (do_decl_instantiation): Likewise.
        (instantiate_decl): Likewise.
        (type_unification): Improve handling of explicit template
        arguments.
        * tree.c (mapcar): Return error_mark_node, rather than aborting,
        on VAR_DECLS, FUNCTION_DECLS, and CONST_DECLS.
        * typeck.c (build_unary_op): Call determine_specialization, rather
        than determine_explicit_specialization.

Mon Jan 19 13:18:51 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * cvt.c (build_up_reference): A TARGET_EXPR has side effects.

Fri Jan 16 11:40:50 1998  Bruno Haible  <bruno@linuix.mathematik.uni-karlsruhe.de>

        * error.c (dump_decl): For enum tags, output the tag, not its value.

1998-01-13  Brendan Kehoe  <brendan@cygnus.com>

        * decl.c (init_decl_processing): Only call init_rtti_processing
        FLAG_RTTI is set.

Mon Jan 12 01:35:18 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * init.c (build_new_1): Split out from build_new.
        (build_new): Just return a NEW_EXPR.
        * expr.c (cplus_expand_expr): Handle NEW_EXPR.

        * decl2.c (get_temp_regvar): Tweak.

        * cp-tree.h (TREE_CALLS_NEW): Comment out.
        * class.c (resolves_to_fixed_type_p): Remove use.
        * method.c (build_opfncall): Likewise.
        * call.c (build_new_op): Likewise.

Wed Jan  7 23:47:13 1998  Jason Merrill  <jason@yorick.cygnus.com>

        * exception.cc (__eh_alloc, __eh_free): New fns.
        (__cp_push_exception, __cp_pop_exception): Use them.
        (__uncatch_exception): Call terminate here if no exception.
        * except.c (build_terminate_handler): New fn.
        (expand_start_catch_block): Use it.
        (expand_exception_blocks): Likewise.
        (alloc_eh_object): New fn.
        (expand_throw): Use it.  Protect exception init with terminate.
        * typeck.c (build_modify_expr): Remove code that ignores trivial
        methods.



Copyright (C) 1998 Free Software Foundation, Inc.

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

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.