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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [cp/] [ChangeLog-1998] - Diff between revs 283 and 338

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 283 Rev 338
Tue Dec 22 15:09:25 1998  Kaveh R. Ghazi  
Tue Dec 22 15:09:25 1998  Kaveh R. Ghazi  
        * Makefile.in (cvt.o): Depend on toplev.h.
        * Makefile.in (cvt.o): Depend on toplev.h.
        * cp-tree.h (check_template_shadow, pod_type_p): Add prototypes.
        * cp-tree.h (check_template_shadow, pod_type_p): Add prototypes.
        * cvt.c: Include toplev.h.
        * cvt.c: Include toplev.h.
        * except.c (get_eh_caught, get_eh_handlers): Hide prototypes and
        * except.c (get_eh_caught, get_eh_handlers): Hide prototypes and
        definitions.
        definitions.
        * init.c (expand_vec_init): Initialize variable `itype'.
        * init.c (expand_vec_init): Initialize variable `itype'.
        * lex.c (yyerror): Cast the argument passed to a ctype function to
        * lex.c (yyerror): Cast the argument passed to a ctype function to
        an unsigned char.
        an unsigned char.
        * method.c (build_mangled_C9x_name): Wrap prototype and definition
        * method.c (build_mangled_C9x_name): Wrap prototype and definition
        in "HOST_BITS_PER_WIDE_INT >= 64".
        in "HOST_BITS_PER_WIDE_INT >= 64".
        * typeck.c (build_binary_op): Mark parameter `convert_p' with
        * typeck.c (build_binary_op): Mark parameter `convert_p' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
1998-12-22  Mark Mitchell  
1998-12-22  Mark Mitchell  
        * cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
        * cp-tree.h (TYPE_RAISES_EXCEPTIONS): Improve documentation.
        * tree.c (build_exception_variant): Don't crash on empty throw
        * tree.c (build_exception_variant): Don't crash on empty throw
        specs.
        specs.
1998-12-18  DJ Delorie  
1998-12-18  DJ Delorie  
        * cvt.c (convert_to_reference): Check for both error_mark_node
        * cvt.c (convert_to_reference): Check for both error_mark_node
        and NULL_NODE after call to convert_for_initialization.
        and NULL_NODE after call to convert_for_initialization.
1998-12-17  Jason Merrill  
1998-12-17  Jason Merrill  
        * error.c (interesting_scope_p): New fn.
        * error.c (interesting_scope_p): New fn.
        (dump_simple_decl): Use it.
        (dump_simple_decl): Use it.
        (dump_expr, case CONSTRUCTOR): Force a & for a PMF.
        (dump_expr, case CONSTRUCTOR): Force a & for a PMF.
        (dump_expr, case OFFSET_REF): Print ->* if appropriate.
        (dump_expr, case OFFSET_REF): Print ->* if appropriate.
1998-12-16  Mark Mitchell  
1998-12-16  Mark Mitchell  
        * class.c (resolve_address_of_overloaded_function): Do conversion
        * class.c (resolve_address_of_overloaded_function): Do conversion
        to correct type here, rather than ...
        to correct type here, rather than ...
        (instantiate_type): Here.
        (instantiate_type): Here.
        * cp-tree.h (DECL_TEMPLATE_PARM_P): New macro.
        * cp-tree.h (DECL_TEMPLATE_PARM_P): New macro.
        (DECL_TEMPLATE_TEMPLATE_PARM_P): Use it.
        (DECL_TEMPLATE_TEMPLATE_PARM_P): Use it.
        (decl_template_parm_p): Remove.
        (decl_template_parm_p): Remove.
        * decl.c (pushdecl): Don't set DECL_CONTEXT for a template
        * decl.c (pushdecl): Don't set DECL_CONTEXT for a template
        parameter.
        parameter.
        * lex.c (do_identifier): Use DECL_TEMPLATE_PARM_P.
        * lex.c (do_identifier): Use DECL_TEMPLATE_PARM_P.
        * pt.c (push_inline_template_parms_recursive): Set it.
        * pt.c (push_inline_template_parms_recursive): Set it.
        (decl_template_parm_p): Remove.
        (decl_template_parm_p): Remove.
        (check_template_shadow): Use DECL_TEMPLATE_PARM_P.
        (check_template_shadow): Use DECL_TEMPLATE_PARM_P.
        (process_template_parm): Set it.
        (process_template_parm): Set it.
Wed Dec 16 16:33:58 1998  Dave Brolley  
Wed Dec 16 16:33:58 1998  Dave Brolley  
        * lang-specs.h (default_compilers): Pass -MD, -MMD and -MG to cc1plus
        * lang-specs.h (default_compilers): Pass -MD, -MMD and -MG to cc1plus
        if configured with cpplib.
        if configured with cpplib.
1998-12-15  Mark Mitchell  
1998-12-15  Mark Mitchell  
        * decl.c (poplevel): Make sure ns_binding is initialized.
        * decl.c (poplevel): Make sure ns_binding is initialized.
        * decl.c (finish_function): Undo inadvertent change in previous
        * decl.c (finish_function): Undo inadvertent change in previous
        patch.
        patch.
1998-12-14  Mark Mitchell  
1998-12-14  Mark Mitchell  
        * class.c (pushclass): Tweak handling of class-level bindings.
        * class.c (pushclass): Tweak handling of class-level bindings.
        (resolve_address_of_overloaded_function): Update pointer-to-member
        (resolve_address_of_overloaded_function): Update pointer-to-member
        handling.
        handling.
        (instantiate_type): Likewise.
        (instantiate_type): Likewise.
        * cvt.c (cp_convert_to_pointer): Likewise.
        * cvt.c (cp_convert_to_pointer): Likewise.
        * decl.c (pop_binding): Take the DECL to pop, not just the name.
        * decl.c (pop_binding): Take the DECL to pop, not just the name.
        Deal with `struct stat' hack.
        Deal with `struct stat' hack.
        (binding_level): Add to documentation.
        (binding_level): Add to documentation.
        (push_binding): Clear BINDING_TYPE.
        (push_binding): Clear BINDING_TYPE.
        (add_binding): New function.
        (add_binding): New function.
        (push_local_binding): Use it.
        (push_local_binding): Use it.
        (push_class_binding): Likewise.
        (push_class_binding): Likewise.
        (poplevel): Adjust calls to pop_binding.
        (poplevel): Adjust calls to pop_binding.
        (poplevel_class): Likewise.
        (poplevel_class): Likewise.
        (pushdecl): Adjust handling of TYPE_DECLs; add bindings for hidden
        (pushdecl): Adjust handling of TYPE_DECLs; add bindings for hidden
        declarations to current binding level.
        declarations to current binding level.
        (push_class_level_binding): Likewise.
        (push_class_level_binding): Likewise.
        (push_overloaded_decl): Adjust handling of OVERLOADs in local
        (push_overloaded_decl): Adjust handling of OVERLOADs in local
        bindings.
        bindings.
        (lookup_namespace_name): Don't crash when confronted with a
        (lookup_namespace_name): Don't crash when confronted with a
        TEMPLATE_DECL.
        TEMPLATE_DECL.
        (lookup_name_real): Do `struct stat' hack in local binding
        (lookup_name_real): Do `struct stat' hack in local binding
        contexts.
        contexts.
        (build_ptrmemfunc_type): Adjust documentation.
        (build_ptrmemfunc_type): Adjust documentation.
        (grokdeclarator): Don't avoid building real array types when
        (grokdeclarator): Don't avoid building real array types when
        processing templates unless really necessary.
        processing templates unless really necessary.
        (finish_method): Adjust calls to pop_binding.
        (finish_method): Adjust calls to pop_binding.
        * decl2.c (reparse_absdcl_as_expr): Recursively call ourselves,
        * decl2.c (reparse_absdcl_as_expr): Recursively call ourselves,
        not reparse_decl_as_expr.
        not reparse_decl_as_expr.
        (build_expr_from_tree): Deal with a template-id as the function to
        (build_expr_from_tree): Deal with a template-id as the function to
        call in a METHOD_CALL_EXPR.
        call in a METHOD_CALL_EXPR.
        * pt.c (convert_nontype_argument): Tweak pointer-to-member handling.
        * pt.c (convert_nontype_argument): Tweak pointer-to-member handling.
        (maybe_adjust_types_For_deduction): Don't do peculiar things with
        (maybe_adjust_types_For_deduction): Don't do peculiar things with
        METHOD_TYPEs here.
        METHOD_TYPEs here.
        (resolve_overloaded_unification): Handle COMPONENT_REFs.  Build
        (resolve_overloaded_unification): Handle COMPONENT_REFs.  Build
        pointer-to-member types where necessary.
        pointer-to-member types where necessary.
        * tree.c (build_cplus_array_type_1): Don't avoid building real
        * tree.c (build_cplus_array_type_1): Don't avoid building real
        array types when processing templates unless really necessary.
        array types when processing templates unless really necessary.
        (build_exception_variant): Compare the exception lists correctly.
        (build_exception_variant): Compare the exception lists correctly.
1998-12-13  Mark Mitchell  
1998-12-13  Mark Mitchell  
        * cp-tree.def (CPLUS_BINDING): Update documentation.
        * cp-tree.def (CPLUS_BINDING): Update documentation.
        * cp-tree.h (LOCAL_BINDING_P): New macro.
        * cp-tree.h (LOCAL_BINDING_P): New macro.
        (lang_identifier): Rename local_value to bindings.
        (lang_identifier): Rename local_value to bindings.
        (tree_binding): Make `scope' of type `void*', not `tree'.
        (tree_binding): Make `scope' of type `void*', not `tree'.
        (BINDING_SCOPE): Update documentation.
        (BINDING_SCOPE): Update documentation.
        (IDENTIFIER_LOCAL_VALUE): Remove.
        (IDENTIFIER_LOCAL_VALUE): Remove.
        (IDENTIFIER_CLASS_VALUE): Document.
        (IDENTIFIER_CLASS_VALUE): Document.
        (IDENTIFIER_BINDING): New macro.
        (IDENTIFIER_BINDING): New macro.
        (IDENTIFIER_VALUE): Likewise.
        (IDENTIFIER_VALUE): Likewise.
        (TIME_IDENTIFIER_TIME): Likewise.
        (TIME_IDENTIFIER_TIME): Likewise.
        (TIME_IDENTIFIER_FILEINFO): Likewise.
        (TIME_IDENTIFIER_FILEINFO): Likewise.
        (IMPLICIT_TYPENAME_P): Likewise.
        (IMPLICIT_TYPENAME_P): Likewise.
        (set_identifier_local_value): Remove.
        (set_identifier_local_value): Remove.
        (push_local_binding): New function.
        (push_local_binding): New function.
        (push_class_binding): Likewise.
        (push_class_binding): Likewise.
        * class.c (pushclass): Update comments; use push_class_binding.
        * class.c (pushclass): Update comments; use push_class_binding.
        * decl.c (set_identifier_local_value_with_scope): Remove.
        * decl.c (set_identifier_local_value_with_scope): Remove.
        (set_identifier_local_value): Likewise.
        (set_identifier_local_value): Likewise.
        (push_binding): New function.
        (push_binding): New function.
        (pop_binding): Likewise.
        (pop_binding): Likewise.
        (binding_level): Update documentation.  Remove shadowed.
        (binding_level): Update documentation.  Remove shadowed.
        (BINDING_LEVEL): New macro.
        (BINDING_LEVEL): New macro.
        (free_binding_nodes): New variable.
        (free_binding_nodes): New variable.
        (poplevel): Adjust for new name-lookup scheme.  Don't mess up
        (poplevel): Adjust for new name-lookup scheme.  Don't mess up
        BLOCK_VARs when doing for-scope extension.  Remove effectively
        BLOCK_VARs when doing for-scope extension.  Remove effectively
        dead code.
        dead code.
        (pushlevel_class): Tweak formatting.
        (pushlevel_class): Tweak formatting.
        (poplevel_class): Adjust for new name-lookup scheme.
        (poplevel_class): Adjust for new name-lookup scheme.
        (print_binding_level): Likewise.
        (print_binding_level): Likewise.
        (store_bindings): Likewise.
        (store_bindings): Likewise.
        (pushdecl): Likewise.
        (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
        (pushdecl_class_level): Likewise.
        (push_class_level_binding): Likewise.
        (push_class_level_binding): Likewise.
        (push_overloaded_decl): Update comments.  Adjust for new
        (push_overloaded_decl): Update comments.  Adjust for new
        name-lookup scheme.
        name-lookup scheme.
        (lookup_name_real): Likewise.
        (lookup_name_real): Likewise.
        (lookup_name_current_level): Likewise.
        (lookup_name_current_level): Likewise.
        (cp_finish_decl): Likewise.
        (cp_finish_decl): Likewise.
        (require_complete_types_for_parms): Likewise.  Remove misleading
        (require_complete_types_for_parms): Likewise.  Remove misleading
        #if 0'd code.
        #if 0'd code.
        (grok_parms): Likewise.  Don't call
        (grok_parms): Likewise.  Don't call
        require_complete_types_for_parms here.
        require_complete_types_for_parms here.
        (grok_ctor_properties): Don't treat templates as copy
        (grok_ctor_properties): Don't treat templates as copy
        constructors.
        constructors.
        (grop_op_properties): Or as assignment operators.
        (grop_op_properties): Or as assignment operators.
        (start_function): Document.  Adjust for new name-lookup scheme.
        (start_function): Document.  Adjust for new name-lookup scheme.
        (finish_function): Likewise.
        (finish_function): Likewise.
        * decl2.c (do_local_using_decl): Use push_local_binding.
        * decl2.c (do_local_using_decl): Use push_local_binding.
        * lex.c (begin_definition_of_inclass_inline): New function, split
        * lex.c (begin_definition_of_inclass_inline): New function, split
        out from ...
        out from ...
        (do_pending_inlines): Here, and ...
        (do_pending_inlines): Here, and ...
        (process_next_inline): Here.
        (process_next_inline): Here.
        (get_time_identifier): Use TIME_IDENTIFIER_* macros.
        (get_time_identifier): Use TIME_IDENTIFIER_* macros.
        (init_filename_times): Likewise.
        (init_filename_times): Likewise.
        (extract_interface_info): Likewise.
        (extract_interface_info): Likewise.
        (ste_typedecl_interface_info): Likewise.
        (ste_typedecl_interface_info): Likewise.
        (check_newline): Likewise.
        (check_newline): Likewise.
        (dump_time_statistics): Likewise.
        (dump_time_statistics): Likewise.
        (handle_cp_pragma): Likewise.
        (handle_cp_pragma): Likewise.
        (do_identifier): Adjust for new name-lookup scheme.
        (do_identifier): Adjust for new name-lookup scheme.
        * parse.y (function_try_block): Return ctor_initializer_opt value.
        * parse.y (function_try_block): Return ctor_initializer_opt value.
        (fndef): Use it.
        (fndef): Use it.
        (fn.defpen): Pass appropriate values to start_function.
        (fn.defpen): Pass appropriate values to start_function.
        (pending_inline): Use functor_try_block value, and pass
        (pending_inline): Use functor_try_block value, and pass
        appropriate values to finish_function.
        appropriate values to finish_function.
        * pt.c (is_member_template): Update documentation; remove handling
        * pt.c (is_member_template): Update documentation; remove handling
        of FUNCTION_DECLs.  As per name, this function should deal only in
        of FUNCTION_DECLs.  As per name, this function should deal only in
        TEMPLATE_DECLs.
        TEMPLATE_DECLs.
        (decl_template_parm_p): Change name of olddecl parameter to decl.
        (decl_template_parm_p): Change name of olddecl parameter to decl.
        (check_template_shadow): Adjust for new name-lookup scheme.
        (check_template_shadow): Adjust for new name-lookup scheme.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        (tsubst_decl): Tweak so as not to confuse member templates with
        (tsubst_decl): Tweak so as not to confuse member templates with
        copy constructors and assignment operators.
        copy constructors and assignment operators.
        (unify): Handle UNION_TYPEs.
        (unify): Handle UNION_TYPEs.
        * ptree.c (print_lang_identifier): Adjust for new name-lookup scheme.
        * ptree.c (print_lang_identifier): Adjust for new name-lookup scheme.
        (lang_print_xnode): Adjust for new name-lookup scheme.
        (lang_print_xnode): Adjust for new name-lookup scheme.
        * typeck.c (mark_addressable): Likewise.
        * typeck.c (mark_addressable): Likewise.
        (c_expand_return): Likewise.
        (c_expand_return): Likewise.
1998-12-08  Jason Merrill  
1998-12-08  Jason Merrill  
        * decl.c (grokdeclarator): Allow field with same name as class
        * decl.c (grokdeclarator): Allow field with same name as class
        in extern "C".
        in extern "C".
        * decl.c (lookup_name_real): Don't limit field lookup to types.
        * decl.c (lookup_name_real): Don't limit field lookup to types.
        * class.c (check_member_decl_is_same_in_complete_scope): No error
        * class.c (check_member_decl_is_same_in_complete_scope): No error
        if icv and x are the same.
        if icv and x are the same.
        * lex.c (do_identifier): Tweak error message.
        * lex.c (do_identifier): Tweak error message.
1998-12-10  Mark Mitchell  
1998-12-10  Mark Mitchell  
        * decl.c (start_enum): Use push_obstacks, not
        * decl.c (start_enum): Use push_obstacks, not
        end_temporary_allocation.
        end_temporary_allocation.
        (finish_enum): Call pop_obstacks.
        (finish_enum): Call pop_obstacks.
1998-12-10  Mark Mitchell  
1998-12-10  Mark Mitchell  
        * class.c (instantiate_type): Return error_mark_node rather than
        * class.c (instantiate_type): Return error_mark_node rather than
        junk.
        junk.
1998-12-09  Mark Mitchell  
1998-12-09  Mark Mitchell  
        * cp-tree.h (most_specialized_instantiation): New function.
        * cp-tree.h (most_specialized_instantiation): New function.
        (print_candidates): Likewise.
        (print_candidates): Likewise.
        * class.c (validate_lhs): Remove.
        * class.c (validate_lhs): Remove.
        (resolve_address_of_overloaded_function): New function, split out
        (resolve_address_of_overloaded_function): New function, split out
        and then substantially reworked, from ...
        and then substantially reworked, from ...
        (instantiate_type): Use it.  Simplify.
        (instantiate_type): Use it.  Simplify.
        * cvt.c (convert_to_reference): Complain when caller has indicated
        * cvt.c (convert_to_reference): Complain when caller has indicated
        that's the right thing to do.  Don't crash if instantiate_type
        that's the right thing to do.  Don't crash if instantiate_type
        fails.
        fails.
        * pt.c: Substitute `parameters' for `paramters' throughout.
        * pt.c: Substitute `parameters' for `paramters' throughout.
        (print_candidates): Don't make it static.
        (print_candidates): Don't make it static.
        (most_specialized_instantiation): Split out from ...
        (most_specialized_instantiation): Split out from ...
        (most_specialized): Here.
        (most_specialized): Here.
Wed Dec  9 15:33:01 1998  Dave Brolley  
Wed Dec  9 15:33:01 1998  Dave Brolley  
        * lex.c (lang_init_options): Initialize cpplib.
        * lex.c (lang_init_options): Initialize cpplib.
        * decl2.c (parse_options,cpp_initialized): Removed.
        * decl2.c (parse_options,cpp_initialized): Removed.
        (lang_decode_option): Move initialization of cpplib to
        (lang_decode_option): Move initialization of cpplib to
        lang_init_options.
        lang_init_options.
1998-12-09  Mark Mitchell  
1998-12-09  Mark Mitchell  
        * decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as
        * decl.c (grokdeclarator): Update the name of the TEMPLATE_DECL, as
        well as the TYPE_DECL, when a typedef name is assigned to a
        well as the TYPE_DECL, when a typedef name is assigned to a
        previously anonymous type.
        previously anonymous type.
1998-12-08  Andrew MacLeod  
1998-12-08  Andrew MacLeod  
        * cp/except.c (call_eh_info): Use __start_cp_handler instead of
        * 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
        __cp_eh_info for getting the eh info pointer.  Add table_index to
        field list.
        field list.
        (push_eh_cleanup): Don't increment 'handlers' data field.
        (push_eh_cleanup): Don't increment 'handlers' data field.
        (process_start_catch_block): Don't set the 'caught' field.
        (process_start_catch_block): Don't set the 'caught' field.
        * cp/exception.cc (CP_EH_INFO): New macro for getting the
        * cp/exception.cc (CP_EH_INFO): New macro for getting the
        exception info pointer within library routines.
        exception info pointer within library routines.
        (__cp_eh_info): Use CP_EH_INFO.
        (__cp_eh_info): Use CP_EH_INFO.
        (__start_cp_handler): Get exception info pointer, set caught field,
        (__start_cp_handler): Get exception info pointer, set caught field,
        and increment the handlers field.  Avoids this being done by handlers.
        and increment the handlers field.  Avoids this being done by handlers.
        (__uncatch_exception, __check_eh_spec): Use CP_EH_INFO macro.
        (__uncatch_exception, __check_eh_spec): Use CP_EH_INFO macro.
        (uncaught_exception): 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)
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
        * Make-lang.in (cxxmain.o): Depend on $(DEMANGLE_H), not demangle.h
Mon Dec  7 17:56:06 1998  Mike Stump  
Mon Dec  7 17:56:06 1998  Mike Stump  
        * lex.c (check_newline): Add support for \ as `natural'
        * lex.c (check_newline): Add support for \ as `natural'
        characters in file names in #line to be consistent with #include
        characters in file names in #line to be consistent with #include
        handling.  We support escape processing in the # 1 "..." version of
        handling.  We support escape processing in the # 1 "..." version of
        the command.  See also support in cp/lex.c.
        the command.  See also support in cp/lex.c.
1998-12-07  Zack Weinberg  
1998-12-07  Zack Weinberg  
        * cp/decl2.c: s/data/opts/ when initializing cpp_reader
        * cp/decl2.c: s/data/opts/ when initializing cpp_reader
        structure.
        structure.
1998-12-07  Jason Merrill  
1998-12-07  Jason Merrill  
        * decl.c (build_typename_type): Set DECL_ARTIFICIAL.
        * decl.c (build_typename_type): Set DECL_ARTIFICIAL.
        * error.c (dump_simple_decl): Also print namespace context.
        * error.c (dump_simple_decl): Also print namespace context.
        (dump_function_decl): Likewise.
        (dump_function_decl): Likewise.
        * decl2.c (ambiguous_decl): Don't print old value if it's
        * decl2.c (ambiguous_decl): Don't print old value if it's
        error_mark_node.
        error_mark_node.
        * decl.c (lookup_name_real): Fix handling of local types shadowed
        * decl.c (lookup_name_real): Fix handling of local types shadowed
        by a non-type decl.  Remove obsolete code.
        by a non-type decl.  Remove obsolete code.
        * cp-tree.h (DECL_FUNCTION_SCOPE_P): New macro.
        * cp-tree.h (DECL_FUNCTION_SCOPE_P): New macro.
        * lang-options.h: Add -fpermissive.
        * lang-options.h: Add -fpermissive.
        * decl2.c: Likewise.
        * decl2.c: Likewise.
        * cp-tree.h: Add flag_permissive.
        * cp-tree.h: Add flag_permissive.
        * decl.c (init_decl_processing): If neither -fpermissive or -pedantic
        * decl.c (init_decl_processing): If neither -fpermissive or -pedantic
        were specified, set flag_pedantic_errors.
        were specified, set flag_pedantic_errors.
        * call.c (build_over_call): Turn dropped qualifier messages
        * call.c (build_over_call): Turn dropped qualifier messages
        back into pedwarns.
        back into pedwarns.
        * cvt.c (convert_to_reference): Likewise.
        * cvt.c (convert_to_reference): Likewise.
        * typeck.c (convert_for_assignment): Likewise.
        * typeck.c (convert_for_assignment): Likewise.
1998-12-05  Jason Merrill  
1998-12-05  Jason Merrill  
        * decl2.c (coerce_new_type): Use same_type_p.
        * decl2.c (coerce_new_type): Use same_type_p.
        (coerce_delete_type): Likewise.
        (coerce_delete_type): Likewise.
        * call.c (check_dtor_name): Return 1, not error_mark_node.
        * call.c (check_dtor_name): Return 1, not error_mark_node.
1998-12-04  Jason Merrill  
1998-12-04  Jason Merrill  
        * lex.c (handle_cp_pragma): Disable #pragma interface/implementation
        * lex.c (handle_cp_pragma): Disable #pragma interface/implementation
        if MULTIPLE_SYMBOL_SPACES.
        if MULTIPLE_SYMBOL_SPACES.
        * pt.c (check_template_shadow): New fn.
        * pt.c (check_template_shadow): New fn.
        * decl2.c (grokfield): Use it.
        * decl2.c (grokfield): Use it.
        * decl.c (pushdecl): Likewise.
        * decl.c (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
        (pushdecl_class_level): Likewise.
        (start_method): Likewise.
        (start_method): Likewise.
        (xref_tag): Don't try to use 't' if we're defining.
        (xref_tag): Don't try to use 't' if we're defining.
        * call.c (check_dtor_name): Just return an error_mark_node.
        * call.c (check_dtor_name): Just return an error_mark_node.
        * pt.c (lookup_template_class): Complain about using non-template here.
        * pt.c (lookup_template_class): Complain about using non-template here.
        * parse.y (apparent_template_type): Not here.
        * parse.y (apparent_template_type): Not here.
        * pt.c (check_explicit_specialization): Complain about specialization
        * pt.c (check_explicit_specialization): Complain about specialization
        with C linkage.
        with C linkage.
        * lang-options.h: Add -f{no-,}implicit-inline-templates.
        * lang-options.h: Add -f{no-,}implicit-inline-templates.
        * pt.c (convert_nontype_argument): Don't assume that any integer
        * pt.c (convert_nontype_argument): Don't assume that any integer
        argument is intended to be a constant-expression.
        argument is intended to be a constant-expression.
1998-12-03  Mark Mitchell  
1998-12-03  Mark Mitchell  
        * class.c (handle_using_decl): Fix comment.  Don't lookup
        * class.c (handle_using_decl): Fix comment.  Don't lookup
        constructors in base classes.
        constructors in base classes.
        (validate_lhs): Fix typo in comment.
        (validate_lhs): Fix typo in comment.
        * search.c (lookup_field_1): Don't return a USING_DECL.
        * search.c (lookup_field_1): Don't return a USING_DECL.
        * cp-tree.h (DECL_ACCESS): Improve documentation.
        * cp-tree.h (DECL_ACCESS): Improve documentation.
        * decl.c (expand_static_init): Don't set the initialization-done
        * decl.c (expand_static_init): Don't set the initialization-done
        flag until the initialization is done.
        flag until the initialization is done.
1998-12-02  Mark Mitchell  
1998-12-02  Mark Mitchell  
        * decl2.c (validate_nonmember_using_decl): Complain about using
        * decl2.c (validate_nonmember_using_decl): Complain about using
        declarations for class members.
        declarations for class members.
1998-11-29  Jason Merrill  
1998-11-29  Jason Merrill  
        * typeck2.c (process_init_constructor): Use same_type_p.
        * typeck2.c (process_init_constructor): Use same_type_p.
        * decl.c (check_tag_decl): Don't warn about null decl inside a
        * decl.c (check_tag_decl): Don't warn about null decl inside a
        class.
        class.
        * pt.c (unify, case OFFSET_TYPE): Pass down 'strict' rather than
        * pt.c (unify, case OFFSET_TYPE): Pass down 'strict' rather than
        UNIFY_ALLOW_NONE.
        UNIFY_ALLOW_NONE.
        (convert_nontype_argument): Use TYPE_PTRMEMFUNC_FN_TYPE.
        (convert_nontype_argument): Use TYPE_PTRMEMFUNC_FN_TYPE.
        (resolve_overloaded_unification): Strip baselinks.
        (resolve_overloaded_unification): Strip baselinks.
Fri Nov 27 13:07:23 1998  Kaveh R. Ghazi  
Fri Nov 27 13:07:23 1998  Kaveh R. Ghazi  
        * g++spec.c: Don't prototype xmalloc.
        * g++spec.c: Don't prototype xmalloc.
1998-11-25  Jason Merrill  
1998-11-25  Jason Merrill  
        * except.c (expand_throw): Use TYPE_PTR_P to check for pointers.
        * except.c (expand_throw): Use TYPE_PTR_P to check for pointers.
        * decl.c (check_tag_decl): Do complain about null friend decl at
        * decl.c (check_tag_decl): Do complain about null friend decl at
        file scope.
        file scope.
1998-11-25  Andreas Schwab  
1998-11-25  Andreas Schwab  
        * lex.c (make_lang_type): Clear the whole struct lang_type, not
        * lex.c (make_lang_type): Clear the whole struct lang_type, not
        only the first multiple of sizeof (int).
        only the first multiple of sizeof (int).
1998-11-24  Jason Merrill  
1998-11-24  Jason Merrill  
        * decl.c (start_decl): An explicit specialization of a static data
        * decl.c (start_decl): An explicit specialization of a static data
        member is only a definition if it has an initializer.
        member is only a definition if it has an initializer.
        * except.c (expand_throw): Use cp_finish_decl for the throw temp.
        * except.c (expand_throw): Use cp_finish_decl for the throw temp.
        * cvt.c (build_up_reference): Pass DIRECT_BIND down into
        * cvt.c (build_up_reference): Pass DIRECT_BIND down into
        cp_finish_decl.
        cp_finish_decl.
        * init.c (expand_default_init): Check for DIRECT_BIND instead of
        * init.c (expand_default_init): Check for DIRECT_BIND instead of
        DECL_ARTIFICIAL.
        DECL_ARTIFICIAL.
        * call.c (build_over_call): Use build_decl.
        * call.c (build_over_call): Use build_decl.
        * except.c (expand_throw): Just use convert, not
        * except.c (expand_throw): Just use convert, not
        build_reinterpret_cast.
        build_reinterpret_cast.
        * lex.c (handle_generic_pragma): Use token_buffer.
        * lex.c (handle_generic_pragma): Use token_buffer.
        * decl.c (check_tag_decl): Don't complain about null friend decl.
        * decl.c (check_tag_decl): Don't complain about null friend decl.
1998-11-24  Dave Pitts  
1998-11-24  Dave Pitts  
        * Make-lang.in (DEMANGLER_PROG): Move the output arguments to the
        * Make-lang.in (DEMANGLER_PROG): Move the output arguments to the
        first position.
        first position.
        * lex.c (check_newline): Use ISALPHA.
        * lex.c (check_newline): Use ISALPHA.
        (readescape): Use ISGRAPH.
        (readescape): Use ISGRAPH.
        (yyerror): Use ISGRAPH.
        (yyerror): Use ISGRAPH.
1998-11-24  Nathan Sidwell  
1998-11-24  Nathan Sidwell  
        * search.c (get_abstract_virtuals): Do not use initial
        * search.c (get_abstract_virtuals): Do not use initial
        CLASSTYPE_ABSTRACT_VIRTUALS.
        CLASSTYPE_ABSTRACT_VIRTUALS.
        * typeck2.c (abstract_virtuals_error): Show location of abstract
        * typeck2.c (abstract_virtuals_error): Show location of abstract
        declaration.
        declaration.
        * call.c (build_new_method_call): Use
        * call.c (build_new_method_call): Use
        CLASSTYPE_ABSTRACT_VIRTUAL, rather than recalculate.
        CLASSTYPE_ABSTRACT_VIRTUAL, rather than recalculate.
        * class.c (finish_struct_bits): Don't bother working out whether
        * class.c (finish_struct_bits): Don't bother working out whether
        get_abstract_virtuals will do anything, just do it.
        get_abstract_virtuals will do anything, just do it.
1998-11-24  Graham  
1998-11-24  Graham  
        * typeck.c (build_component_ref): Remove unused statement.
        * typeck.c (build_component_ref): Remove unused statement.
1998-11-24  Jason Merrill  
1998-11-24  Jason Merrill  
        * class.c (add_method): Catch invalid overloads.
        * class.c (add_method): Catch invalid overloads.
        * class.c (add_method): Build up OVERLOADs properly for conversion ops.
        * class.c (add_method): Build up OVERLOADs properly for conversion ops.
        * search.c (lookup_conversions): Handle getting real OVERLOADs.
        * search.c (lookup_conversions): Handle getting real OVERLOADs.
        (add_conversions): Likewise.  Revert last change.
        (add_conversions): Likewise.  Revert last change.
        * call.c (add_conv_candidate): Pass totype to add_candidate instead
        * 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
        of fn.  Don't add a new candidate if the last one was for the same
        type.
        type.
        (print_z_candidates): Handle getting a type as a function.
        (print_z_candidates): Handle getting a type as a function.
        (joust): If we got two conversion candidates to the same type,
        (joust): If we got two conversion candidates to the same type,
        just pick one.
        just pick one.
        (build_object_call): Lose 'templates'.
        (build_object_call): Lose 'templates'.
        (build_user_type_conversion_1): Handle getting real OVERLOADs.
        (build_user_type_conversion_1): Handle getting real OVERLOADs.
1998-11-23  Jason Merrill  
1998-11-23  Jason Merrill  
        * typeck2.c (process_init_constructor): If there are elements
        * typeck2.c (process_init_constructor): If there are elements
        that don't have initializers and they need to have constructors
        that don't have initializers and they need to have constructors
        run, supply them with initializers.
        run, supply them with initializers.
        * class.c (finish_struct_1): A class with a 0-width bitfield is
        * class.c (finish_struct_1): A class with a 0-width bitfield is
        still empty.
        still empty.
1998-11-23  Mark Mitchell  
1998-11-23  Mark Mitchell  
        * pt.c (instantiate_class_template): Don't try to figure out what
        * pt.c (instantiate_class_template): Don't try to figure out what
        specialization to use for a partial instantiation.  Correct
        specialization to use for a partial instantiation.  Correct
        typos in a couple of comments.  Avoid calling uses_template_parms
        typos in a couple of comments.  Avoid calling uses_template_parms
        multiple times.
        multiple times.
1998-11-23  Benjamin Kosnik  
1998-11-23  Benjamin Kosnik  
        * method.c (process_overload_item): Add call to
        * method.c (process_overload_item): Add call to
        build_mangled_C9x_name for intTI_type_nodes.
        build_mangled_C9x_name for intTI_type_nodes.
        (build_mangled_C9x_name): Add prototype, define.
        (build_mangled_C9x_name): Add prototype, define.
        * decl.c (init_decl_processing): Add names for
        * decl.c (init_decl_processing): Add names for
        TImode_type_node.
        TImode_type_node.
1998-11-23  Jason Merrill  
1998-11-23  Jason Merrill  
        * parse.y (named_class_head): Update CLASSTYPE_DECLARED_CLASS.
        * parse.y (named_class_head): Update CLASSTYPE_DECLARED_CLASS.
        * class.c (finish_struct_1): Set things up for 0-width bitfields
        * class.c (finish_struct_1): Set things up for 0-width bitfields
        like we do for others.
        like we do for others.
        * decl.c (check_tag_decl): New fn.
        * decl.c (check_tag_decl): New fn.
        (shadow_tag): Split out from here.
        (shadow_tag): Split out from here.
        * decl2.c (grok_x_components): Call it.
        * decl2.c (grok_x_components): Call it.
1998-11-22  Jason Merrill  
1998-11-22  Jason Merrill  
        * decl.c: Lose warn_about_return_type.
        * decl.c: Lose warn_about_return_type.
        (grokdeclarator): Always complain about implicit int, except for
        (grokdeclarator): Always complain about implicit int, except for
        `main () { ... }'.
        `main () { ... }'.
        * decl.c (tag_name): New fn.
        * decl.c (tag_name): New fn.
        (xref_tag): Complain about using typedef-name after class-key.
        (xref_tag): Complain about using typedef-name after class-key.
        * init.c (expand_vec_init): Also keep going if from_array.
        * init.c (expand_vec_init): Also keep going if from_array.
        * tree.c (is_overloaded_fn): Also handle the output of
        * tree.c (is_overloaded_fn): Also handle the output of
        build_offset_ref.
        build_offset_ref.
        * decl.c (grokdeclarator): Use constructor_name when comparing
        * decl.c (grokdeclarator): Use constructor_name when comparing
        field name against enclosing class.
        field name against enclosing class.
        * class.c (finish_struct_anon): Likewise.
        * class.c (finish_struct_anon): Likewise.
1998-11-22  Mark Mitchell  
1998-11-22  Mark Mitchell  
        * decl.c (poplevel): Remove code to handle KEEP == 2.
        * decl.c (poplevel): Remove code to handle KEEP == 2.
        (finish_function): Don't confuse BLOCK-order when
        (finish_function): Don't confuse BLOCK-order when
        processing a destructor.
        processing a destructor.
1998-11-21  Jason Merrill  
1998-11-21  Jason Merrill  
        * decl.c (require_complete_types_for_parms): Call layout_decl
        * decl.c (require_complete_types_for_parms): Call layout_decl
        after we've completed the type.
        after we've completed the type.
1998-11-21  Martin von Löwis  
1998-11-21  Martin von Löwis  
        * decl2.c (validate_nonmember_using_decl): Allow using templates
        * decl2.c (validate_nonmember_using_decl): Allow using templates
        from the global namespace.
        from the global namespace.
1998-11-21  Jason Merrill  
1998-11-21  Jason Merrill  
        Handle specifying template args to member function templates.
        Handle specifying template args to member function templates.
        * tree.c (build_overload): Always create an OVERLOAD for a template.
        * tree.c (build_overload): Always create an OVERLOAD for a template.
        * search.c (add_conversions): Handle finding an OVERLOAD.
        * search.c (add_conversions): Handle finding an OVERLOAD.
        * decl2.c (check_classfn): Likewise.
        * decl2.c (check_classfn): Likewise.
        * lex.c (identifier_type): See through a baselink.
        * lex.c (identifier_type): See through a baselink.
        * parse.y (do_id): Don't call do_identifier if we got a baselink.
        * parse.y (do_id): Don't call do_identifier if we got a baselink.
        * class.c (instantiate_type, case TREE_LIST): Recurse.
        * class.c (instantiate_type, case TREE_LIST): Recurse.
        * decl.c (grokdeclarator): Allow a boolean constant for array
        * decl.c (grokdeclarator): Allow a boolean constant for array
        bounds, odd as that sounds.
        bounds, odd as that sounds.
        * pt.c (unify): Be more strict about non-type parms, except for
        * pt.c (unify): Be more strict about non-type parms, except for
        array bounds.
        array bounds.
        (UNIFY_ALLOW_INTEGER): New macro.
        (UNIFY_ALLOW_INTEGER): New macro.
1998-11-19  Manfred Hollstein  
1998-11-19  Manfred Hollstein  
        * Make-lang.in (mandir): Replace all uses of $(mandir) by $(man1dir).
        * Make-lang.in (mandir): Replace all uses of $(mandir) by $(man1dir).
1998-11-19  Jason Merrill  
1998-11-19  Jason Merrill  
        * semantics.c (begin_class_definition): Call
        * semantics.c (begin_class_definition): Call
        maybe_process_partial_specialization before push_template_decl.
        maybe_process_partial_specialization before push_template_decl.
        Don't call push_template_decl for a specialization.
        Don't call push_template_decl for a specialization.
        * search.c (lookup_field): Do return a member template class.
        * search.c (lookup_field): Do return a member template class.
        * decl2.c (handle_class_head): Handle member template classes.
        * decl2.c (handle_class_head): Handle member template classes.
        * decl.c (grokdeclarator): A parm type need not be complete.
        * decl.c (grokdeclarator): A parm type need not be complete.
        * pt.c (convert_nontype_argument): Fix thinko.
        * pt.c (convert_nontype_argument): Fix thinko.
1998-11-18  Mark Mitchell  
1998-11-18  Mark Mitchell  
        * cp-tree.h (PTRMEM_CST_CLASS): Fix typo.
        * cp-tree.h (PTRMEM_CST_CLASS): Fix typo.
        (global_delete_fndecl): New variable.
        (global_delete_fndecl): New variable.
        * decl.c (global_delete_fndecl): Define it.
        * decl.c (global_delete_fndecl): Define it.
        (init_decl_processing): Set it.
        (init_decl_processing): Set it.
        * init.c (build_builtin_delete_call): Use it.
        * init.c (build_builtin_delete_call): Use it.
        * tree.c (mapcar): Recursively call mapcar for the type of EXPR
        * tree.c (mapcar): Recursively call mapcar for the type of EXPR
        nodes.
        nodes.
1998-11-18  Jason Merrill  
1998-11-18  Jason Merrill  
        * decl.c (cplus_expand_expr_stmt): Always complain about unresolved
        * decl.c (cplus_expand_expr_stmt): Always complain about unresolved
        type.
        type.
        * tree.c (lvalue_p_1): An INDIRECT_REF to a function is an lvalue.
        * tree.c (lvalue_p_1): An INDIRECT_REF to a function is an lvalue.
        * call.c (build_object_call): Also support references to functions.
        * call.c (build_object_call): Also support references to functions.
        * typeck.c (convert_for_initialization): Don't decay a function
        * typeck.c (convert_for_initialization): Don't decay a function
        if the target is a reference to function.
        if the target is a reference to function.
        * search.c (add_conversions): Get all the overloads from a class.
        * search.c (add_conversions): Get all the overloads from a class.
        * decl.c (grok_ctor_properties): Complain about any constructor
        * decl.c (grok_ctor_properties): Complain about any constructor
        that will take a single arg of the class type by value.
        that will take a single arg of the class type by value.
        * typeck2.c (build_functional_cast): Can't create objects of
        * typeck2.c (build_functional_cast): Can't create objects of
        abstract classes this way.
        abstract classes this way.
        * cvt.c (ocp_convert): Likewise.
        * cvt.c (ocp_convert): Likewise.
        * decl.c (grokfndecl): Member functions of local classes are not
        * decl.c (grokfndecl): Member functions of local classes are not
        public.
        public.
1998-11-18  Mark Mitchell  
1998-11-18  Mark Mitchell  
        * Make-lang.in (cc1plus): Add dependency on hash.o.
        * Make-lang.in (cc1plus): Add dependency on hash.o.
1998-11-18  Jason Merrill  
1998-11-18  Jason Merrill  
        * search.c (get_abstract_virtuals): Complain about virtuals with
        * search.c (get_abstract_virtuals): Complain about virtuals with
        no final overrider.
        no final overrider.
        * typeck2.c (abstract_virtuals_error): Remove handling for virtuals
        * typeck2.c (abstract_virtuals_error): Remove handling for virtuals
        with no final overrider.
        with no final overrider.
        * class.c (override_one_vtable): Don't set DECL_ABSTRACT_VIRTUAL_P
        * class.c (override_one_vtable): Don't set DECL_ABSTRACT_VIRTUAL_P
        on virtuals with no final overrider.
        on virtuals with no final overrider.
        * lex.c (reinit_parse_for_block): Add a space after the initial ':'.
        * 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
        * class.c (finish_struct_1): Don't remove zero-width bit-fields until
        after layout_type.
        after layout_type.
        * friend.c (do_friend): Don't set_mangled_name_for_decl.
        * friend.c (do_friend): Don't set_mangled_name_for_decl.
        * class.c (finish_struct_anon): Complain about non-fields.
        * class.c (finish_struct_anon): Complain about non-fields.
        * decl2.c (build_anon_union_vars): Likewise.
        * decl2.c (build_anon_union_vars): Likewise.
        * decl.c (grokdeclarator): Normal data members can't have the same
        * decl.c (grokdeclarator): Normal data members can't have the same
        name as the class, either.
        name as the class, either.
        * class.c (finish_struct_anon): Neither can members of an
        * class.c (finish_struct_anon): Neither can members of an
        anonymous union.
        anonymous union.
1998-11-17  Mark Mitchell  
1998-11-17  Mark Mitchell  
        * cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
        * cp-tree.h (TYPE_ALIAS_SET): Document language-dependent uses.
        (TYPE_BINFO): Likewise.
        (TYPE_BINFO): Likewise.
        (IS_AGGR_TYPE): Tweak.
        (IS_AGGR_TYPE): Tweak.
        (SET_IS_AGGR_TYPE): New macro.
        (SET_IS_AGGR_TYPE): New macro.
        (CLASS_TYPE_P): Tweak.
        (CLASS_TYPE_P): Tweak.
        (lang_type): Group mark bitfields together.  Remove linenum.
        (lang_type): Group mark bitfields together.  Remove linenum.
        (CLASSTYPE_SOURCE_LINE): Remove macro.
        (CLASSTYPE_SOURCE_LINE): Remove macro.
        (CLASSTYPE_MARKED_N): New macro.
        (CLASSTYPE_MARKED_N): New macro.
        (SET_CLASSTYPE_MARKED_N): Likewise.
        (SET_CLASSTYPE_MARKED_N): Likewise.
        (CLEAR_CLASSTYPE_MARKED_N): Likewise.
        (CLEAR_CLASSTYPE_MARKED_N): Likewise.
        (CLASS_TYPE_MARKED_*): Use them.
        (CLASS_TYPE_MARKED_*): Use them.
        (SET_CLASSTYPE_MARKED_*): Likewise.
        (SET_CLASSTYPE_MARKED_*): Likewise.
        (CLEAR_CLASSTYPE_MARKED_*): Likewise.
        (CLEAR_CLASSTYPE_MARKED_*): Likewise.
        (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO): Likewise.
        (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO): Likewise.
        (TYPE_TEMPLATE_INFO): Handle TEMPLATE_TEMPLATE_PARMs as well.
        (TYPE_TEMPLATE_INFO): Handle TEMPLATE_TEMPLATE_PARMs as well.
        (TYPENAME_TYPE_FULLNAME): Use TYPE_BINFO rather than CLASSTYPE_SIZE.
        (TYPENAME_TYPE_FULLNAME): Use TYPE_BINFO rather than CLASSTYPE_SIZE.
        * class.c (class_cache_obstack): New variable.
        * class.c (class_cache_obstack): New variable.
        (class_cache_firstobj): Likewise.
        (class_cache_firstobj): Likewise.
        (finish_struct): Don't set CLASSTYPE_SOURCE_LINE.
        (finish_struct): Don't set CLASSTYPE_SOURCE_LINE.
        (pushclass): Free the cache, when appropriate.
        (pushclass): Free the cache, when appropriate.
        (popclass): Tidy.
        (popclass): Tidy.
        (maybe_push_cache_obstack): Use class_cache_obstack.
        (maybe_push_cache_obstack): Use class_cache_obstack.
        * decl.c (include hash.h).
        * decl.c (include hash.h).
        (typename_hash): New function.
        (typename_hash): New function.
        (typename_compare): Likewise.
        (typename_compare): Likewise.
        (build_typename_type): Check the hash table to avoid creating
        (build_typename_type): Check the hash table to avoid creating
        duplicates.
        duplicates.
        (build_ptrmemfunc_type): Use SET_IS_AGGR_TYPE.
        (build_ptrmemfunc_type): Use SET_IS_AGGR_TYPE.
        (grokdeclarator): Use CLASS_TYPE_P.
        (grokdeclarator): Use CLASS_TYPE_P.
        (xref_basetypes): Likewise.
        (xref_basetypes): Likewise.
        (start_function): Likewise.  Don't put current_class_ref on the
        (start_function): Likewise.  Don't put current_class_ref on the
        permanent obstack.
        permanent obstack.
        * error.c (dump_type_real): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO
        * error.c (dump_type_real): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO
        and TYPE_TI_ARGS.
        and TYPE_TI_ARGS.
        * lex.c (note_got_semicolon): Use CLASS_TYPE_P.
        * lex.c (note_got_semicolon): Use CLASS_TYPE_P.
        (make_lang_type): Don't create TYPE_LANG_SPECIFIC and associated
        (make_lang_type): Don't create TYPE_LANG_SPECIFIC and associated
        fields for types other than class types.  Do clear TYPE_ALIAS_SET
        fields for types other than class types.  Do clear TYPE_ALIAS_SET
        for types other than class types, though.
        for types other than class types, though.
        * method.c (build_overload_identifier): Use CLASS_TYPE_P and
        * method.c (build_overload_identifier): Use CLASS_TYPE_P and
        TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        * pt.c (process_template_parm): Don't set
        * pt.c (process_template_parm): Don't set
        CLASSTYPE_GOT_SEMICOLON.
        CLASSTYPE_GOT_SEMICOLON.
        (lookup_template_class): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        (lookup_template_class): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        Coerce arguments on the momentary obstack.
        Coerce arguments on the momentary obstack.
        (for_each_template_parm): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        (for_each_template_parm): Use TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO.
        (instantiate_class_template): Calculate template arguments on the
        (instantiate_class_template): Calculate template arguments on the
        momentary obstack.  Tidy.
        momentary obstack.  Tidy.
        (tsubst_template_arg_vector): Use make_temp_vec.
        (tsubst_template_arg_vector): Use make_temp_vec.
        (tsubst_aggr_type): Put template arguments on the momentary
        (tsubst_aggr_type): Put template arguments on the momentary
        obstack.
        obstack.
        (tsubst_decl): Likewise.
        (tsubst_decl): Likewise.
        (tsubst): Copy the array bounds index to the permanent obstack
        (tsubst): Copy the array bounds index to the permanent obstack
        before building index types.  Use new macros.
        before building index types.  Use new macros.
        (unify): Use new macros.
        (unify): Use new macros.
        (do_type_instantiation): Likewise.
        (do_type_instantiation): Likewise.
        * search.c (lookup_fnfields_1): Use new macros.
        * search.c (lookup_fnfields_1): Use new macros.
        (dfs_pushdecls): Build envelopes on the cache obstack.
        (dfs_pushdecls): Build envelopes on the cache obstack.
        (dfs_compress_decls): Use new macros.
        (dfs_compress_decls): Use new macros.
        (push_class_decls): Build on the cache obstack.
        (push_class_decls): Build on the cache obstack.
        * semantics.c (finish_typeof): Don't set CLASSTYPE_GOT_SEMICOLON.
        * semantics.c (finish_typeof): Don't set CLASSTYPE_GOT_SEMICOLON.
        * sign.c (build_signature_pointer_or_reference_type): Use
        * sign.c (build_signature_pointer_or_reference_type): Use
        SET_IS_AGGR_TYPE.
        SET_IS_AGGR_TYPE.
        * tree.c (make_binfo): Check CLASS_TYPE_P.
        * tree.c (make_binfo): Check CLASS_TYPE_P.
        (copy_template_template_parm): Adjust.
        (copy_template_template_parm): Adjust.
        (make_temp_vec): Use push_expression_obstack.
        (make_temp_vec): Use push_expression_obstack.
        * typeck.c (complete_type): Use new macros.
        * typeck.c (complete_type): Use new macros.
        (comptypes): Likewise.
        (comptypes): Likewise.
1998-11-17  Jason Merrill  
1998-11-17  Jason Merrill  
        * pt.c (tsubst): Add diagnostics for invalid array, reference
        * pt.c (tsubst): Add diagnostics for invalid array, reference
        and pointer to member types.
        and pointer to member types.
1998-11-16  Jason Merrill  
1998-11-16  Jason Merrill  
        * typeck2.c (my_friendly_abort): Don't fatal twice in a row.
        * typeck2.c (my_friendly_abort): Don't fatal twice in a row.
        * typeck.c (c_expand_start_case): Use build_expr_type_conversion.
        * typeck.c (c_expand_start_case): Use build_expr_type_conversion.
        Simplify.
        Simplify.
        * parse.y (structsp): Fix cut-and-paste error.
        * parse.y (structsp): Fix cut-and-paste error.
        * init.c (build_new): Complain about non-integral size.
        * init.c (build_new): Complain about non-integral size.
        * parse.y (unary_expr): Complain about defining types in sizeof.
        * parse.y (unary_expr): Complain about defining types in sizeof.
        * typeck.c (expr_sizeof): Complain about sizeof an overloaded fn.
        * typeck.c (expr_sizeof): Complain about sizeof an overloaded fn.
        * rtti.c (build_x_typeid): Complain about typeid without
        * rtti.c (build_x_typeid): Complain about typeid without
        including .
        including .
        (get_typeid): Likewise.  Complain about typeid of incomplete type.
        (get_typeid): Likewise.  Complain about typeid of incomplete type.
        (get_tinfo_fn_dynamic): Likewise.
        (get_tinfo_fn_dynamic): Likewise.
        (get_typeid_1): Not static anymore.
        (get_typeid_1): Not static anymore.
        * except.c (build_eh_type_type): Use get_typeid_1.
        * except.c (build_eh_type_type): Use get_typeid_1.
        * rtti.c (build_dynamic_cast_1): Give errors for dynamic_cast to
        * rtti.c (build_dynamic_cast_1): Give errors for dynamic_cast to
        ambiguous or private bases.  Fix warning for reference cast.
        ambiguous or private bases.  Fix warning for reference cast.
1998-11-16  Mark Mitchell  
1998-11-16  Mark Mitchell  
        * cp-tree.h (DECL_TEMPLATE_INSTANTIATED): New macro.
        * cp-tree.h (DECL_TEMPLATE_INSTANTIATED): New macro.
        * decl.c (duplicate_decls): Remove special-case code to deal with
        * decl.c (duplicate_decls): Remove special-case code to deal with
        template friends, and just do the obvious thing.
        template friends, and just do the obvious thing.
        * pt.c (register_specialization): Tweak for clarity, and also to
        * pt.c (register_specialization): Tweak for clarity, and also to
        clear DECL_INITIAL for an instantiation before it is merged with a
        clear DECL_INITIAL for an instantiation before it is merged with a
        specialization.
        specialization.
        (check_explicit_specialization): Fix indentation.
        (check_explicit_specialization): Fix indentation.
        (tsubst_friend_function): Handle both definitions in friend
        (tsubst_friend_function): Handle both definitions in friend
        declaration and outside friend declarations.
        declaration and outside friend declarations.
        (tsubst_decl): Don't clear DECL_INITIAL for an instantiation.
        (tsubst_decl): Don't clear DECL_INITIAL for an instantiation.
        (regenerate_decl_from_template): Tweak accordingly.
        (regenerate_decl_from_template): Tweak accordingly.
        (instantiate_decl): Likewise.
        (instantiate_decl): Likewise.
1998-11-16  Jason Merrill  
1998-11-16  Jason Merrill  
        * decl.c (cplus_expand_expr_stmt): Promote warning about naked
        * decl.c (cplus_expand_expr_stmt): Promote warning about naked
        member function reference to error.
        member function reference to error.
        * cvt.c (ocp_convert): Complain about converting an overloaded
        * cvt.c (ocp_convert): Complain about converting an overloaded
        function to void.
        function to void.
        * init.c (build_offset_ref): Just return a lone static member
        * init.c (build_offset_ref): Just return a lone static member
        function.
        function.
        * decl.c (cp_finish_decl): Only complain about real CONSTRUCTORs,
        * decl.c (cp_finish_decl): Only complain about real CONSTRUCTORs,
        not internal ones.
        not internal ones.
        * typeck.c (build_binary_op_nodefault): Improve error handling.
        * typeck.c (build_binary_op_nodefault): Improve error handling.
        * decl.c (grokfndecl): Complain about making 'main' a template.
        * decl.c (grokfndecl): Complain about making 'main' a template.
        * typeck.c (string_conv_p): Don't convert from wchar_t[] to char*.
        * 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
        * call.c (build_method_call): Handle a BIT_NOT_EXPR around a
        TYPE_DECL in a template.
        TYPE_DECL in a template.
1998-11-15  Jason Merrill  
1998-11-15  Jason Merrill  
        * typeck2.c (my_friendly_abort): Add URL in the other case, too.
        * typeck2.c (my_friendly_abort): Add URL in the other case, too.
        * decl.c (struct cp_function): Add named_label_uses.
        * decl.c (struct cp_function): Add named_label_uses.
        (push_cp_function_context): Save it.
        (push_cp_function_context): Save it.
        (pop_cp_function_context): Restore it.
        (pop_cp_function_context): Restore it.
        (define_label): Also complain about jumping into the scope of
        (define_label): Also complain about jumping into the scope of
        non-POD objects that don't have constructors.
        non-POD objects that don't have constructors.
        * tree.c (pod_type_p): New fn.
        * tree.c (pod_type_p): New fn.
        * pt.c (instantiate_class_template): Clear TYPE_BEING_DEFINED sooner.
        * pt.c (instantiate_class_template): Clear TYPE_BEING_DEFINED sooner.
        * rtti.c (synthesize_tinfo_fn): Call import_export_decl here.
        * rtti.c (synthesize_tinfo_fn): Call import_export_decl here.
        (get_tinfo_fn): Not here.
        (get_tinfo_fn): Not here.
        * repo.c (repo_get_id): Abort if we get called for an incomplete
        * repo.c (repo_get_id): Abort if we get called for an incomplete
        type.
        type.
1998-11-13  Mark Mitchell  
1998-11-13  Mark Mitchell  
        * except.c (expand_throw): Make sure first argument to
        * except.c (expand_throw): Make sure first argument to
        __cp_push_exception is of type `void*' to avoid spurious error
        __cp_push_exception is of type `void*' to avoid spurious error
        messages.
        messages.
1998-11-11  Jason Merrill  
1998-11-11  Jason Merrill  
        * pt.c (try_one_overload): Take orig_targs again.  Only check for
        * pt.c (try_one_overload): Take orig_targs again.  Only check for
        mismatches against them; we don't care what a previous call found.
        mismatches against them; we don't care what a previous call found.
        (resolve_overloaded_unification): Adjust.
        (resolve_overloaded_unification): Adjust.
        * search.c (lookup_field): Don't return anything for a non-type
        * search.c (lookup_field): Don't return anything for a non-type
        field from a dependent type.
        field from a dependent type.
        * decl.c (grokdeclarator): Resolve SCOPE_REFs of the current class
        * decl.c (grokdeclarator): Resolve SCOPE_REFs of the current class
        in an array declarator.
        in an array declarator.
        (start_decl): Push into the class before looking for the field.
        (start_decl): Push into the class before looking for the field.
1998-11-08  Mark Mitchell  
1998-11-08  Mark Mitchell  
        * method.c (build_overload_value): Handle REFERENCE_TYPE.
        * method.c (build_overload_value): Handle REFERENCE_TYPE.
1998-11-08  Martin von Löwis  
1998-11-08  Martin von Löwis  
        * decl.c (grokdeclarator): Allow namespace-scoped members if they
        * decl.c (grokdeclarator): Allow namespace-scoped members if they
        are friends.
        are friends.
1998-11-08  Jason Merrill  
1998-11-08  Jason Merrill  
        * pt.c (tsubst_decl): Don't mess with the global value of an
        * pt.c (tsubst_decl): Don't mess with the global value of an
        un-mangled DECL_ASSEMBLER_NAME.
        un-mangled DECL_ASSEMBLER_NAME.
1998-11-03  Christopher Faylor  
1998-11-03  Christopher Faylor  
        * decl.c (init_decl_processing): Remove CYGWIN conditional
        * decl.c (init_decl_processing): Remove CYGWIN conditional
        since CYGWIN is now able to deal with trapping signals.
        since CYGWIN is now able to deal with trapping signals.
Sat Nov  7 15:48:02 1998  Kaveh R. Ghazi  
Sat Nov  7 15:48:02 1998  Kaveh R. Ghazi  
        * cp-tree.h: Don't include gansidecl.h.
        * cp-tree.h: Don't include gansidecl.h.
        * exception.cc: Include gansidecl.h (since we don't include config.h)
        * exception.cc: Include gansidecl.h (since we don't include config.h)
        * g++spec.c: Don't include gansidecl.h.
        * g++spec.c: Don't include gansidecl.h.
1998-11-06  Mark Mitchell  
1998-11-06  Mark Mitchell  
        * cp-tree.h (lang_decl_flags): Add defined_in_class.  Decrease
        * cp-tree.h (lang_decl_flags): Add defined_in_class.  Decrease
        size of dummy.
        size of dummy.
        (DECL_DEFINED_IN_CLASS_P): New macro.
        (DECL_DEFINED_IN_CLASS_P): New macro.
        (TEMPLATE_PARMS_FOR_INLINE): Document.
        (TEMPLATE_PARMS_FOR_INLINE): Document.
        (check_static_variable_definition): New function.
        (check_static_variable_definition): New function.
        * decl.c (cp_finish_decl): Set DECL_DEFINED_IN_CLASS_P, if
        * decl.c (cp_finish_decl): Set DECL_DEFINED_IN_CLASS_P, if
        appropriate.
        appropriate.
        (check_static_variable_definition): Split out from ...
        (check_static_variable_definition): Split out from ...
        (grokdeclarator): Here.
        (grokdeclarator): Here.
        * pt.c (check_default_tmpl_args): New function, split out from ...
        * pt.c (check_default_tmpl_args): New function, split out from ...
        (push_template_decl_real): Here.
        (push_template_decl_real): Here.
        (instantiate_template): Fix comment.
        (instantiate_template): Fix comment.
1998-11-04  Mark Mitchell  
1998-11-04  Mark Mitchell  
        * cp-tree.h (CP_TYPE_CONST_P): Make {0,1}-valued.
        * cp-tree.h (CP_TYPE_CONST_P): Make {0,1}-valued.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.
1998-11-03  Mark Mitchell  
1998-11-03  Mark Mitchell  
        * pt.c (tsubst): Use build_index_type, not build_index_2_type.
        * pt.c (tsubst): Use build_index_type, not build_index_2_type.
1998-11-02  Jason Merrill  
1998-11-02  Jason Merrill  
        * class.c (instantiate_type): Be more helpful.
        * class.c (instantiate_type): Be more helpful.
        * decl2.c (import_export_decl): Call import_export_class.
        * decl2.c (import_export_decl): Call import_export_class.
        * cp-tree.h (EMPTY_CONSTRUCTOR_P): Check !TREE_HAS_CONSTRUCTOR.
        * cp-tree.h (EMPTY_CONSTRUCTOR_P): Check !TREE_HAS_CONSTRUCTOR.
        * decl2.c (build_expr_from_tree): Propagate TREE_HAS_CONSTRUCTOR.
        * decl2.c (build_expr_from_tree): Propagate TREE_HAS_CONSTRUCTOR.
        * pt.c (tsubst_copy): Likewise.
        * pt.c (tsubst_copy): Likewise.
1998-11-02  Mark Mitchell  
1998-11-02  Mark Mitchell  
        * init.c (expand_vec_init): Fix off-by-one error.
        * init.c (expand_vec_init): Fix off-by-one error.
1998-11-02  Alexandre Oliva  
1998-11-02  Alexandre Oliva  
        * parse.y (apparent_template_type): New type.
        * parse.y (apparent_template_type): New type.
        (named_complex_class_head_sans_basetype): Use it.
        (named_complex_class_head_sans_basetype): Use it.
        * Makefile.in (CONFLICTS): One new conflict.
        * Makefile.in (CONFLICTS): One new conflict.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
1998-11-01  Mark Mitchell  
1998-11-01  Mark Mitchell  
        * cp-tree.h (COMPARE_STRICT): New macro.
        * cp-tree.h (COMPARE_STRICT): New macro.
        (COMPARE_BASE): Likewise.
        (COMPARE_BASE): Likewise.
        (COMPARE_RELAXED): Likewise.
        (COMPARE_RELAXED): Likewise.
        (COMPARE_REDECLARATION): Likewise.
        (COMPARE_REDECLARATION): Likewise.
        (same_type_p): Likewise.
        (same_type_p): Likewise.
        (same_or_base_type_p): Likewise.
        (same_or_base_type_p): Likewise.
        * call.c (standard_conversion): Use them, in place of comptypes
        * call.c (standard_conversion): Use them, in place of comptypes
        with numeric arguments.
        with numeric arguments.
        (reference_binding): Likewise.
        (reference_binding): Likewise.
        (convert_like): Likewise.
        (convert_like): Likewise.
        (build_over_call): Likewise.
        (build_over_call): Likewise.
        (is_subseq): Likewise.
        (is_subseq): Likewise.
        (is_properly_derived_from): Likewise.
        (is_properly_derived_from): Likewise.
        (compare_ics): Likewise.
        (compare_ics): Likewise.
        (joust): Likewise.
        (joust): Likewise.
        * class.c (delete_duplicate_fields_1): Likewise.
        * class.c (delete_duplicate_fields_1): Likewise.
        (resolves_to_fixed_type_p): Likewise.
        (resolves_to_fixed_type_p): Likewise.
        (instantiate_type): Likewise.  Remove #if 0'd code.
        (instantiate_type): Likewise.  Remove #if 0'd code.
        * decl.c (decls_match): Likewise.  Use COMPARE_REDECLARATION here.
        * decl.c (decls_match): Likewise.  Use COMPARE_REDECLARATION here.
        (pushdecl): Likewise.
        (pushdecl): Likewise.
        (lookup_name_real): Likewise.
        (lookup_name_real): Likewise.
        (grokdeclarator): Likewise.  Check for illegal array declarations.
        (grokdeclarator): Likewise.  Check for illegal array declarations.
        (grokparms): Likewise.
        (grokparms): Likewise.
        (grok_op_properties): Likewise.
        (grok_op_properties): Likewise.
        * decl2.c (check_classfn): Likewise.
        * decl2.c (check_classfn): Likewise.
        * friend.c (is_friend): Likewise.
        * friend.c (is_friend): Likewise.
        (make_friend_class): Likewise.
        (make_friend_class): Likewise.
        * init.c (expand_aggr_init): Likewise.
        * init.c (expand_aggr_init): Likewise.
        (expand_vec_init): Likewise.
        (expand_vec_init): Likewise.
        * pt.c (is_member_template_class): Remove declaration.
        * pt.c (is_member_template_class): Remove declaration.
        (is_specialization_of): Use COMPARE_* and new macros.
        (is_specialization_of): Use COMPARE_* and new macros.
        (comp_template_parms): Likewise.
        (comp_template_parms): Likewise.
        (convert_nontype_argument): Likewise.
        (convert_nontype_argument): Likewise.
        (coerce_template_template_parms): Likewise.
        (coerce_template_template_parms): Likewise.
        (template_args_equal): Likewise.
        (template_args_equal): Likewise.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        (type_unification_real): Likewise.
        (type_unification_real): Likewise.
        (unify): Likewise.
        (unify): Likewise.
        (get_bindings_real): Likewise.
        (get_bindings_real): Likewise.
        * search.c (covariant_return_p): Likewise.
        * search.c (covariant_return_p): Likewise.
        (get_matching_virtual): Likewise.
        (get_matching_virtual): Likewise.
        * sig.c (match_method_types): Likewise.
        * sig.c (match_method_types): Likewise.
        * tree.c (vec_binfo_member): Likewise.
        * tree.c (vec_binfo_member): Likewise.
        (cp_tree_equal): Likewise.
        (cp_tree_equal): Likewise.
        * typeck.c (common_type): Likewise.
        * typeck.c (common_type): Likewise.
        (comp_array_types): Likewise.  Get issues involving unknown array
        (comp_array_types): Likewise.  Get issues involving unknown array
        bounds right.
        bounds right.
        (comptypes): Update comments.  Use new flags.
        (comptypes): Update comments.  Use new flags.
        (comp_target_types): Use new macros.
        (comp_target_types): Use new macros.
        (compparms): Likewise.
        (compparms): Likewise.
        (comp_target_parms): Likewise.
        (comp_target_parms): Likewise.
        (string_conv_p): Likewise.
        (string_conv_p): Likewise.
        (build_component_ref): Likewise.
        (build_component_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_conditional_expr): Likewise.
        (build_conditional_expr): Likewise.
        (build_static_cast): Likewise.
        (build_static_cast): Likewise.
        (build_reinterpret_cast): Likewise.
        (build_reinterpret_cast): Likewise.
        (build_const_cast): Likewise.
        (build_const_cast): Likewise.
        (build_modify_expr): Likewise.
        (build_modify_expr): Likewise.
        (convert_for_assignment): Likewise.
        (convert_for_assignment): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (ptr_reasonably_similar): Likewise.
        (ptr_reasonably_similar): Likewise.
        (comp_ptr_ttypes_const): Likewise.
        (comp_ptr_ttypes_const): Likewise.
1998-10-31  Jason Merrill  
1998-10-31  Jason Merrill  
        * rtti.c (build_dynamic_cast_1): Fix cut-and-paste error.
        * rtti.c (build_dynamic_cast_1): Fix cut-and-paste error.
1998-10-30  Mark Mitchell  
1998-10-30  Mark Mitchell  
        * decl2.c (delete_sanity): Pass integer_zero_node, not
        * decl2.c (delete_sanity): Pass integer_zero_node, not
        integer_two_node, to build_vec_delete.
        integer_two_node, to build_vec_delete.
        * init.c (build_array_eh_cleanup): Remove.
        * init.c (build_array_eh_cleanup): Remove.
        (expand_vec_init_try_block): New function.
        (expand_vec_init_try_block): New function.
        (expand_vec_init_catch_clause): Likewise.
        (expand_vec_init_catch_clause): Likewise.
        (build_vec_delete_1): Don't deal with case that auto_delete_vec
        (build_vec_delete_1): Don't deal with case that auto_delete_vec
        might be integer_two_node anymore.
        might be integer_two_node anymore.
        (expand_vec_init): Rework for initialization-correctness and
        (expand_vec_init): Rework for initialization-correctness and
        exception-correctness.
        exception-correctness.
        * typeck2.c (process_init_constructor): Make mutual exclusivity
        * typeck2.c (process_init_constructor): Make mutual exclusivity
        of cases more obvious.
        of cases more obvious.
1998-10-29  Jason Merrill  
1998-10-29  Jason Merrill  
        * decl.c (lookup_name_real): OK, only warn if not lexing.
        * decl.c (lookup_name_real): OK, only warn if not lexing.
        Simplify suggested fix.
        Simplify suggested fix.
        * cp-tree.h (IDENTIFIER_MARKED): New macro.
        * cp-tree.h (IDENTIFIER_MARKED): New macro.
        * search.c (lookup_conversions): Use breadth_first_search.
        * search.c (lookup_conversions): Use breadth_first_search.
        (add_conversions): Avoid adding two conversions to the same type.
        (add_conversions): Avoid adding two conversions to the same type.
        (breadth_first_search): Work with base binfos, rather
        (breadth_first_search): Work with base binfos, rather
        than binfos and base indices.
        than binfos and base indices.
        (get_virtual_destructor): Adjust.
        (get_virtual_destructor): Adjust.
        (tree_has_any_destructor_p): Adjust.
        (tree_has_any_destructor_p): Adjust.
        (get_matching_virtual): Adjust.
        (get_matching_virtual): Adjust.
        * pt.c (push_template_decl_real): Generalize check for incorrect
        * pt.c (push_template_decl_real): Generalize check for incorrect
        number of template parms.
        number of template parms.
        (is_member_template_class): #if 0.
        (is_member_template_class): #if 0.
1998-10-29  Richard Henderson  
1998-10-29  Richard Henderson  
        * Makefile.in (cc1plus): Put CXX_OBJS, and thence @extra_cxx_objs@,
        * Makefile.in (cc1plus): Put CXX_OBJS, and thence @extra_cxx_objs@,
        last.
        last.
1998-10-28  Zack Weinberg  
1998-10-28  Zack Weinberg  
        * lex.c: Call check_newline from lang_init always.  After
        * lex.c: Call check_newline from lang_init always.  After
        calling cpp_start_read, set yy_cur and yy_lim to read from the
        calling cpp_start_read, set yy_cur and yy_lim to read from the
        cpplib token buffer.
        cpplib token buffer.
1998-10-28  Jason Merrill  
1998-10-28  Jason Merrill  
        * class.c (instantiate_type): Don't consider templates for a normal
        * class.c (instantiate_type): Don't consider templates for a normal
        match.
        match.
        * class.c (finish_struct_1): Don't complain about non-copy
        * class.c (finish_struct_1): Don't complain about non-copy
        assignment ops in union members.
        assignment ops in union members.
        * class.c (build_vtable): Don't pass at_eof to import_export_vtable.
        * class.c (build_vtable): Don't pass at_eof to import_export_vtable.
        (prepare_fresh_vtable): Likewise.
        (prepare_fresh_vtable): Likewise.
        (finish_struct_1): Don't call import_export_class.
        (finish_struct_1): Don't call import_export_class.
        * decl2.c (finish_vtable_vardecl): Do import/export stuff.
        * decl2.c (finish_vtable_vardecl): Do import/export stuff.
        (finish_prevtable_vardecl): Lose.
        (finish_prevtable_vardecl): Lose.
        (finish_file): Don't call it.
        (finish_file): Don't call it.
        * pt.c (instantiate_class_template): Likewise.
        * pt.c (instantiate_class_template): Likewise.
        * cp-tree.h: Remove it.
        * cp-tree.h: Remove it.
        * init.c (build_delete): Reset TYPE_HAS_DESTRUCTOR here.
        * init.c (build_delete): Reset TYPE_HAS_DESTRUCTOR here.
        * decl.c (finish_function): Not here.
        * decl.c (finish_function): Not here.
        (start_function): Do set DECL_INITIAL.
        (start_function): Do set DECL_INITIAL.
        * pt.c (push_template_decl_real): Complain about default template
        * pt.c (push_template_decl_real): Complain about default template
        args for enclosing classes.
        args for enclosing classes.
        * call.c (add_function_candidate): Treat conversion functions
        * call.c (add_function_candidate): Treat conversion functions
        as coming from the argument's class.
        as coming from the argument's class.
        * cp-tree.h (DECL_CONV_FN_P): New fn.
        * cp-tree.h (DECL_CONV_FN_P): New fn.
        (DECL_DESTRUCTOR_P): Also check DECL_LANGUAGE.
        (DECL_DESTRUCTOR_P): Also check DECL_LANGUAGE.
        * class.c (add_method): Use DECL_CONV_FN_P.
        * class.c (add_method): Use DECL_CONV_FN_P.
        * decl2.c (check_classfn): Likewise.
        * decl2.c (check_classfn): Likewise.
        * error.c (dump_function_name): Likewise.
        * error.c (dump_function_name): Likewise.
        (dump_function_decl): Likewise.
        (dump_function_decl): Likewise.
        * pt.c (fn_type_unification): Likewise.
        * pt.c (fn_type_unification): Likewise.
        * search.c (add_conversions): Likewise.
        * search.c (add_conversions): Likewise.
1998-10-27  Jason Merrill  
1998-10-27  Jason Merrill  
        * lex.c (do_identifier): Also generate LOOKUP_EXPR for RESULT_DECL.
        * lex.c (do_identifier): Also generate LOOKUP_EXPR for RESULT_DECL.
        * method.c (hack_identifier): Also check for using RESULT_DECL
        * method.c (hack_identifier): Also check for using RESULT_DECL
        from outer context.
        from outer context.
1998-10-27  Mark Mitchell  
1998-10-27  Mark Mitchell  
        * decl.c (grokdeclarator): Use type_quals, rather than constp,
        * decl.c (grokdeclarator): Use type_quals, rather than constp,
        consistently.
        consistently.
1998-10-27  Jason Merrill  
1998-10-27  Jason Merrill  
        * call.c (standard_conversion): instantiate_type here.
        * call.c (standard_conversion): instantiate_type here.
        (reference_binding): And here.
        (reference_binding): And here.
        (implicit_conversion): Not here.
        (implicit_conversion): Not here.
        (build_op_delete_call): No need to cons up an OVERLOAD.
        (build_op_delete_call): No need to cons up an OVERLOAD.
        * cvt.c (cp_convert_to_pointer): instantiate_type here.
        * cvt.c (cp_convert_to_pointer): instantiate_type here.
        (convert_to_reference): And here.
        (convert_to_reference): And here.
        * decl.c (grok_reference_init): Not here.
        * decl.c (grok_reference_init): Not here.
        (grokparms): Or here.
        (grokparms): Or here.
        * typeck2.c (digest_init): Or here.
        * typeck2.c (digest_init): Or here.
        * typeck.c (decay_conversion): Take the address of overloaded
        * typeck.c (decay_conversion): Take the address of overloaded
        functions, too.
        functions, too.
        (require_instantiated_type): Lose.
        (require_instantiated_type): Lose.
        (convert_arguments): Don't handle unknown types here.
        (convert_arguments): Don't handle unknown types here.
        (build_c_cast): Likewise.
        (build_c_cast): Likewise.
        (build_binary_op): Gut.
        (build_binary_op): Gut.
        (build_conditional_expr): Don't require_instantiated_type.
        (build_conditional_expr): Don't require_instantiated_type.
        (build_modify_expr): Likewise.
        (build_modify_expr): Likewise.
        (build_static_cast): Don't instantiate_type.
        (build_static_cast): Don't instantiate_type.
        (build_reinterpret_cast): Likewise.
        (build_reinterpret_cast): Likewise.
        (build_const_cast): Likewise.
        (build_const_cast): Likewise.
        (convert_for_initialization): Likewise.
        (convert_for_initialization): Likewise.
        (build_ptrmemfunc): Use type_unknown_p.
        (build_ptrmemfunc): Use type_unknown_p.
        (convert_for_assignment): Also do default_conversion on overloaded
        (convert_for_assignment): Also do default_conversion on overloaded
        functions.  Hand them off to ocp_convert.
        functions.  Hand them off to ocp_convert.
1998-10-26  Mark Mitchell  
1998-10-26  Mark Mitchell  
        * error.c (dump_decl): Deal with TEMPLATE_DECLs that are
        * error.c (dump_decl): Deal with TEMPLATE_DECLs that are
        VAR_DECLs.  Handle vtables whose DECL_CONTEXT is not a type.
        VAR_DECLs.  Handle vtables whose DECL_CONTEXT is not a type.
        * class.c (finish_struct_1): Use build_cplus_array_type to build
        * class.c (finish_struct_1): Use build_cplus_array_type to build
        array types.
        array types.
        * decl.c (init_decl_processing): Likewise.
        * decl.c (init_decl_processing): Likewise.
        * except.c (expand_end_eh_spec): Likewise.
        * except.c (expand_end_eh_spec): Likewise.
        * search.c (expand_upcast_fixups): Simplify very slightly.
        * search.c (expand_upcast_fixups): Simplify very slightly.
1998-10-26  Jason Merrill  
1998-10-26  Jason Merrill  
        * decl.c (grokdeclarator): Complain about a variable using
        * decl.c (grokdeclarator): Complain about a variable using
        constructor syntax coming back null from start_decl.
        constructor syntax coming back null from start_decl.
        * friend.c (make_friend_class): Complain about trying to make
        * friend.c (make_friend_class): Complain about trying to make
        a non-class type a friend.
        a non-class type a friend.
        * decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
        * decl.c (grokfndecl): Set DECL_INITIAL for a defn here.
        (start_function): Not here.
        (start_function): Not here.
1998-10-26  Brendan Kehoe  
1998-10-26  Brendan Kehoe  
        * decl.c (grokdeclarator): Disallow `explicit' in a friend declaration.
        * decl.c (grokdeclarator): Disallow `explicit' in a friend declaration.
1998-10-26  Jason Merrill  
1998-10-26  Jason Merrill  
        * typeck2.c (process_init_constructor): Only skip anonymous fields
        * typeck2.c (process_init_constructor): Only skip anonymous fields
        if they are bitfields.
        if they are bitfields.
        * cp-tree.def (TYPEOF_TYPE): New code.
        * cp-tree.def (TYPEOF_TYPE): New code.
        * error.c (dump_type_real): Handle it.
        * error.c (dump_type_real): Handle it.
        * pt.c (tsubst): Likewise.
        * pt.c (tsubst): Likewise.
        * tree.c (search_tree): Likewise.
        * tree.c (search_tree): Likewise.
        * semantics.c (finish_typeof): New fn.
        * semantics.c (finish_typeof): New fn.
        * parse.y (typespec): Use it.
        * parse.y (typespec): Use it.
        * cp-tree.h: Declare it.
        * cp-tree.h: Declare it.
1998-10-26  Manfred Hollstein  
1998-10-26  Manfred Hollstein  
        * cp-tree.h (FORMAT_VBASE_NAME): Make definition unconditional.
        * cp-tree.h (FORMAT_VBASE_NAME): Make definition unconditional.
1998-10-26  Jason Merrill  
1998-10-26  Jason Merrill  
        * typeck.c (convert_arguments): Don't handle pmf references
        * typeck.c (convert_arguments): Don't handle pmf references
        specially.
        specially.
        * init.c (build_member_call): Don't try to convert to the base type
        * init.c (build_member_call): Don't try to convert to the base type
        if it's ambiguous or pedantic.
        if it's ambiguous or pedantic.
        * typeck2.c (check_for_new_type): Only depend on pedantic for
        * typeck2.c (check_for_new_type): Only depend on pedantic for
        C-style casts.
        C-style casts.
1998-10-25  Mark Mitchell  
1998-10-25  Mark Mitchell  
        * decl.c (grokdeclarator): Set DECL_NONCONVERTING_P for all
        * decl.c (grokdeclarator): Set DECL_NONCONVERTING_P for all
        non-converting constructors.
        non-converting constructors.
1998-10-24  Martin von Löwis  
1998-10-24  Martin von Löwis  
        * gxxint.texi: Correct documentation for n, N, Q, and B.
        * gxxint.texi: Correct documentation for n, N, Q, and B.
1998-10-23  Martin von Löwis  
1998-10-23  Martin von Löwis  
        * parse.y (condition): Convert VAR_DECL from reference to indirect
        * parse.y (condition): Convert VAR_DECL from reference to indirect
        reference.
        reference.
1998-10-23  Andrew MacLeod  
1998-10-23  Andrew MacLeod  
        * exception.cc (__cp_pop_exception): Free the original exception
        * exception.cc (__cp_pop_exception): Free the original exception
        value, not the potentially coerced one.
        value, not the potentially coerced one.
1998-10-23  Mark Mitchell  
1998-10-23  Mark Mitchell  
        * Makefile.in (hash.h): Run gperf when necessary.
        * Makefile.in (hash.h): Run gperf when necessary.
        * cp-tree.h (CP_TYPE_READONLY): Remove.
        * cp-tree.h (CP_TYPE_READONLY): Remove.
        (CP_TYPE_VOLATILE): Likewise.
        (CP_TYPE_VOLATILE): Likewise.
        (CP_TYPE_QUALS): New macro.
        (CP_TYPE_QUALS): New macro.
        (CP_TYPE_CONST_P): Likewise.
        (CP_TYPE_CONST_P): Likewise.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_VOLATILE_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.
        (CP_TYPE_RESTRICT_P): Likewise.
        (CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
        (CP_TYPE_CONST_NON_VOLATILE_P): Likewise.
        (cp_build_type_variant): Rename to ...
        (cp_build_type_variant): Rename to ...
        (cp_build_qualified_type): New function.
        (cp_build_qualified_type): New function.
        (c_apply_type_quals_to_decl): Declare.
        (c_apply_type_quals_to_decl): Declare.
        (SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
        (SIGNATURE_POINTER_NAME_FORMAT): Modify to allow `restrict'.
        (SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
        (SIGNATURE_REFERENCE_NAME_FORMAT): Likewise.
        (cp_type_qual_from_rid): New function.
        (cp_type_qual_from_rid): New function.
        (compparms): Remove unused parameter.  All callers changed.
        (compparms): Remove unused parameter.  All callers changed.
        (cp_type_quals): New function.
        (cp_type_quals): New function.
        (at_least_as_qualified_p): Likewise.
        (at_least_as_qualified_p): Likewise.
        (more_qualified_p): Likewise.
        (more_qualified_p): Likewise.
        * call.c (standard_conversion): Replace calls to
        * call.c (standard_conversion): Replace calls to
        cp_build_type_variant with cp_build_qualified_type.  Use
        cp_build_type_variant with cp_build_qualified_type.  Use
        CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
        CP_TYPE_QUALS to get qualifiers and at_least_as_qualified_p to
        compare them.  Use CP_TYPE_* macros to check qualifiers.
        compare them.  Use CP_TYPE_* macros to check qualifiers.
        (reference_binding): Likewise.
        (reference_binding): Likewise.
        (implicit_conversion): Likewise.
        (implicit_conversion): Likewise.
        (add_builtin_candidates): Likewise.
        (add_builtin_candidates): Likewise.
        (build_over_call): Likewise.
        (build_over_call): Likewise.
        * class.c (overrides): Compare all qualifiers, not just `const',
        * class.c (overrides): Compare all qualifiers, not just `const',
        on method declarations.
        on method declarations.
        * cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
        * cvt.c (convert_to_reference): More CP_TYPE_QUALS conversion, etc.
        (convert_pointer_to_real): Likewise.
        (convert_pointer_to_real): Likewise.
        (type_promotes_to): Likewise.
        (type_promotes_to): Likewise.
        * decl.c (check_for_uninitialized_const_var): New function.
        * decl.c (check_for_uninitialized_const_var): New function.
        (init_decl_processing): More CP_TYPE_QUALS conversion, etc.
        (init_decl_processing): More CP_TYPE_QUALS conversion, etc.
        (cp_finish_decl): Use check_for_uninitialized_const_var.
        (cp_finish_decl): Use check_for_uninitialized_const_var.
        (grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
        (grokdeclarator): More CP_TYPE_QUALS conversion, etc.  Update to
        handle `restrict'.
        handle `restrict'.
        (grok_ctor_properties): Likewise.
        (grok_ctor_properties): Likewise.
        (grok_op_properties): Likewise.
        (grok_op_properties): Likewise.
        (start_function): Likewise.
        (start_function): Likewise.
        (rever_static_member_fn): Likewise.
        (rever_static_member_fn): Likewise.
        * decl2.c (grok_method_quals): Likewise.
        * decl2.c (grok_method_quals): Likewise.
        (grokfield): Likewise.
        (grokfield): Likewise.
        * error.c (dump_readonly_or_volatile): Rename to ...
        * error.c (dump_readonly_or_volatile): Rename to ...
        (dump_qualifiers): New function.  Handle `restrict'.
        (dump_qualifiers): New function.  Handle `restrict'.
        (dump_type_real): Use it.
        (dump_type_real): Use it.
        (dump_aggr_type): Likewise.
        (dump_aggr_type): Likewise.
        (dump_type_prefix): Likewise.
        (dump_type_prefix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_function_decl): Likewise.
        (dump_function_decl): Likewise.
        (cv_as_string): Likewise.
        (cv_as_string): Likewise.
        * gxx.gperf: Add __restrict and __restrict__.
        * gxx.gperf: Add __restrict and __restrict__.
        * gxxint.texi: Document `u' as used for `__restrict', and a few
        * gxxint.texi: Document `u' as used for `__restrict', and a few
        other previously undocumented codes.
        other previously undocumented codes.
        * hash.h: Regenerated.
        * hash.h: Regenerated.
        * init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
        * init.c (expand_aggr_init): More CP_TYPE_QUALS conversion, etc.
        (build_member_call): Likewise.
        (build_member_call): Likewise.
        (build_new_1): Likewise.
        (build_new_1): Likewise.
        * lex.c (init_parse): Add entry for RID_RESTRICT.
        * lex.c (init_parse): Add entry for RID_RESTRICT.
        (cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
        (cons_up_default_function): More CP_TYPE_QUALS conversion, etc.
        (cp_type_qual_from_rid): Define.
        (cp_type_qual_from_rid): Define.
        * lex.h (enum rid): Add RID_RESTRICT.
        * lex.h (enum rid): Add RID_RESTRICT.
        * method.c (process_modifiers): Deal with `restrict'.
        * method.c (process_modifiers): Deal with `restrict'.
        * parse.y (primary): More CP_TYPE_QUALS conversion, etc.
        * parse.y (primary): More CP_TYPE_QUALS conversion, etc.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
        * pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
        * pt.c (convert_nontype_argument): More CP_TYPE_QUALS conversion, etc.
        (tsubst_aggr_type): Likewise.
        (tsubst_aggr_type): Likewise.
        (tsubst): Likewise.
        (tsubst): Likewise.
        (check_cv_quals_for_unify): Likewise.
        (check_cv_quals_for_unify): Likewise.
        (unify): Likewise.
        (unify): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        (build_headof): Likewise.
        (build_headof): Likewise.
        (get_tinfo_var): Likewise.
        (get_tinfo_var): Likewise.
        (buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
        (buidl_dynamic_cast_1): Likewise.  Fix `volatile' handling.
        (expand_class_desc): Likewise.
        (expand_class_desc): Likewise.
        (expand_attr_desc): Likewise.
        (expand_attr_desc): Likewise.
        (synthesize_tinfo_fn): Likewise.
        (synthesize_tinfo_fn): Likewise.
        * search.c (covariant_return_p): Likewise.  Fix `volatile' handling.
        * search.c (covariant_return_p): Likewise.  Fix `volatile' handling.
        (get_matching_virtual): Likewise.
        (get_matching_virtual): Likewise.
        (expand_upcast_fixups): Likewise.
        (expand_upcast_fixups): Likewise.
        * sig.c (build_signature_pointer_or_reference_name): Take
        * sig.c (build_signature_pointer_or_reference_name): Take
        type_quals, not constp and volatilep.
        type_quals, not constp and volatilep.
        (build_signature_pointer_or_reference_type): Likewise.
        (build_signature_pointer_or_reference_type): Likewise.
        (match_method_types): More CP_TYPE_QUALS conversion, etc.
        (match_method_types): More CP_TYPE_QUALS conversion, etc.
        (build_signature_pointer_constructor): Likewise.
        (build_signature_pointer_constructor): Likewise.
        (build_signature_method_call): Likewise.
        (build_signature_method_call): Likewise.
        * tree.c (build_cplus_array_type): Likewise.
        * tree.c (build_cplus_array_type): Likewise.
        (cp_build_type_variant): Rename to ...
        (cp_build_type_variant): Rename to ...
        (cp_build_qualified_type): New function.  Deal with `__restrict'.
        (cp_build_qualified_type): New function.  Deal with `__restrict'.
        (canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
        (canonical_type_variant): More CP_TYPE_QUALS conversion, etc.
        (build_exception_variant): Likewise.
        (build_exception_variant): Likewise.
        (mapcar): Likewise.
        (mapcar): Likewise.
        * typeck.c (qualif_type): Likewise.
        * typeck.c (qualif_type): Likewise.
        (common_type): Likewise.
        (common_type): Likewise.
        (comptypes): Likewise.
        (comptypes): Likewise.
        (comp_cv_target_types): Likewise.
        (comp_cv_target_types): Likewise.
        (at_least_as_qualified_p): Define.
        (at_least_as_qualified_p): Define.
        (more_qualified_p): Likewise.
        (more_qualified_p): Likewise.
        (comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
        (comp_cv_qualification): More CP_TYPE_QUALS conversion, etc.
        (compparms): Likewise.
        (compparms): Likewise.
        (inline_conversion): Likewise.
        (inline_conversion): Likewise.
        (string_conv_p): Likewise.
        (string_conv_p): Likewise.
        (build_component_ref): Likewise.
        (build_component_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_indirect_ref): Likewise.
        (build_array_ref): Likewise.
        (build_array_ref): Likewise.
        (build_unary_op): Likewise.
        (build_unary_op): Likewise.
        (build_conditional_expr): Likewise.
        (build_conditional_expr): Likewise.
        (build_static_cast): Likewise.
        (build_static_cast): Likewise.
        (build_c_cast): Likewise.
        (build_c_cast): Likewise.
        (build_modify_expr): Likewise.
        (build_modify_expr): Likewise.
        (convert_For_assignment): Likewise.
        (convert_For_assignment): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (comp_ptr_ttypes_real): Likewise.
        (cp_type_quals): New function.
        (cp_type_quals): New function.
1998-10-23  Jason Merrill  
1998-10-23  Jason Merrill  
        * cp-tree.h (CP_TYPE_READONLY): New macro to handle arrays.
        * cp-tree.h (CP_TYPE_READONLY): New macro to handle arrays.
        (CP_TYPE_VOLATILE): Likewise.
        (CP_TYPE_VOLATILE): Likewise.
        * decl.c (grokdeclarator): Use them.
        * decl.c (grokdeclarator): Use them.
        * tree.c (canonical_type_variant): Likewise.
        * tree.c (canonical_type_variant): Likewise.
1998-10-22  Martin von Löwis  
1998-10-22  Martin von Löwis  
        * parse.y (named_class_head): Push into class while parsing the
        * parse.y (named_class_head): Push into class while parsing the
        base class list.
        base class list.
        * decl2.c (push_scope, pop_scope): New functions.
        * decl2.c (push_scope, pop_scope): New functions.
        * cp-tree.h: Declare them.
        * cp-tree.h: Declare them.
        * init.c (build_new_1): Delay cleanup until end of full expression.
        * init.c (build_new_1): Delay cleanup until end of full expression.
1998-10-21  Jason Merrill  
1998-10-21  Jason Merrill  
        * typeck.c (build_component_ref): Use of a type here is an error.
        * typeck.c (build_component_ref): Use of a type here is an error.
1998-10-19  Jason Merrill  
1998-10-19  Jason Merrill  
        Revamp references to member functions.
        Revamp references to member functions.
        * method.c (hack_identifier): Call build_component_ref for a
        * method.c (hack_identifier): Call build_component_ref for a
        reference to a member function.
        reference to a member function.
        * typeck.c (build_component_ref): Only return a single function
        * typeck.c (build_component_ref): Only return a single function
        if it's static.  Otherwise, return a COMPONENT_REF.
        if it's static.  Otherwise, return a COMPONENT_REF.
        (build_x_function_call): Handle a COMPONENT_REF.
        (build_x_function_call): Handle a COMPONENT_REF.
        (build_unary_op): Handle all unknown-type things.
        (build_unary_op): Handle all unknown-type things.
        * decl2.c (arg_assoc): Handle COMPONENT_REF.
        * decl2.c (arg_assoc): Handle COMPONENT_REF.
        * class.c (instantiate_type): Complain if the function we get is a
        * class.c (instantiate_type): Complain if the function we get is a
        nonstatic member function.  Remove code for finding "compatible"
        nonstatic member function.  Remove code for finding "compatible"
        functions.
        functions.
        * pt.c (tsubst_copy): Handle NOP_EXPR.
        * pt.c (tsubst_copy): Handle NOP_EXPR.
        * tree.c (build_dummy_object): New fn.
        * tree.c (build_dummy_object): New fn.
        (maybe_dummy_object): New fn.
        (maybe_dummy_object): New fn.
        (is_dummy_object): New fn.
        (is_dummy_object): New fn.
        * cp-tree.h: Declare them.
        * cp-tree.h: Declare them.
        * cvt.c (cp_convert_to_pointer): Use maybe_dummy_object.
        * cvt.c (cp_convert_to_pointer): Use maybe_dummy_object.
        * error.c (dump_expr, case OFFSET_REF): Use is_dummy_object.
        * error.c (dump_expr, case OFFSET_REF): Use is_dummy_object.
        * init.c (build_member_call): Use maybe_dummy_object and
        * init.c (build_member_call): Use maybe_dummy_object and
        is_dummy_object.
        is_dummy_object.
        (build_offset_ref): Use maybe_dummy_object.
        (build_offset_ref): Use maybe_dummy_object.
        (resolve_offset_ref): Use is_dummy_object.
        (resolve_offset_ref): Use is_dummy_object.
        * typeck.c (build_x_function_call): Call build_dummy_object.
        * typeck.c (build_x_function_call): Call build_dummy_object.
        (unary_complex_lvalue): Call is_dummy_object.
        (unary_complex_lvalue): Call is_dummy_object.
        * typeck.c (build_component_addr): Make sure field is a field.
        * typeck.c (build_component_addr): Make sure field is a field.
        * call.c (build_new_op): Delete obsolete code.
        * call.c (build_new_op): Delete obsolete code.
        * pt.c (tsubst, TEMPLATE*PARM*): Abort if we don't have any args.
        * pt.c (tsubst, TEMPLATE*PARM*): Abort if we don't have any args.
1998-10-18  Martin von Löwis  
1998-10-18  Martin von Löwis  
        * decl2.c (validate_nonmember_using_decl): Fix using-directives of
        * decl2.c (validate_nonmember_using_decl): Fix using-directives of
        std if std is ignored.
        std if std is ignored.
1998-10-18  Jason Merrill  
1998-10-18  Jason Merrill  
        * decl.c (grokvardecl): Fix thinko.
        * decl.c (grokvardecl): Fix thinko.
        * decl.c (grokdeclarator): Embedded attrs bind to the right,
        * decl.c (grokdeclarator): Embedded attrs bind to the right,
        not the left.
        not the left.
        * parse.y (fn.def2): Fix 'attrs' format.
        * parse.y (fn.def2): Fix 'attrs' format.
1998-10-18  Alastair J. Houghton  
1998-10-18  Alastair J. Houghton  
        * Makefile.in (CONFLICTS): Update.
        * Makefile.in (CONFLICTS): Update.
        * parse.y (expr_or_declarator_intern): New rule.
        * parse.y (expr_or_declarator_intern): New rule.
        (expr_or_declarator, direct_notype_declarator, primary,
        (expr_or_declarator, direct_notype_declarator, primary,
        functional_cast): Use it.
        functional_cast): Use it.
        (notype_declarator_intern): New rule.
        (notype_declarator_intern): New rule.
        (notype_declarator, complex_notype_declarator): Use it.
        (notype_declarator, complex_notype_declarator): Use it.
1998-10-17  Jason Merrill  
1998-10-17  Jason Merrill  
        * decl.c (grokfndecl): Set DECL_CONTEXT to namespace if appropriate.
        * decl.c (grokfndecl): Set DECL_CONTEXT to namespace if appropriate.
        (grokvardecl): Likewise.
        (grokvardecl): Likewise.
Sat Oct 17 23:27:20 1998  Kaveh R. Ghazi  
Sat Oct 17 23:27:20 1998  Kaveh R. Ghazi  
        * class.c (make_method_vec): Cast 1st argument of `bzero' to (PTR).
        * class.c (make_method_vec): Cast 1st argument of `bzero' to (PTR).
        (add_method): Likewise for arguments 1 & 2 of `bcopy'.
        (add_method): Likewise for arguments 1 & 2 of `bcopy'.
        * decl.c (signal_catch): Mark with ATTRIBUTE_NORETURN.
        * decl.c (signal_catch): Mark with ATTRIBUTE_NORETURN.
        * pt.c (process_partial_specialization): Cast 1st argument of
        * pt.c (process_partial_specialization): Cast 1st argument of
        `bzero' to (PTR).
        `bzero' to (PTR).
        * tree.c (build_base_fields): Cast `base_align' to (int) when
        * tree.c (build_base_fields): Cast `base_align' to (int) when
        comparing against one.
        comparing against one.
1998-10-16  Mark Mitchell  
1998-10-16  Mark Mitchell  
        * decl.c (lookup_name_real): Handle template parameters for member
        * decl.c (lookup_name_real): Handle template parameters for member
        templates where said parameters have the same name as the
        templates where said parameters have the same name as the
        surrounding class.
        surrounding class.
        * decl.c (expand_static_init): Build cleanups before entering the
        * decl.c (expand_static_init): Build cleanups before entering the
        anonymous function used to do them to avoid access-checking
        anonymous function used to do them to avoid access-checking
        confusion.
        confusion.
        * decl.c (grokfndecl): Add back call to cplus_decl_attributes
        * decl.c (grokfndecl): Add back call to cplus_decl_attributes
        accidentally removed by previous change, and make DECL_RTL here.
        accidentally removed by previous change, and make DECL_RTL here.
        * class.c (add_method): Don't make DECL_RTL here.
        * class.c (add_method): Don't make DECL_RTL here.
        * pt.c (for_each_template_parm): Don't examine uninstantiated
        * pt.c (for_each_template_parm): Don't examine uninstantiated
        default arguments.
        default arguments.
1998-10-16  Dave Brolley  
1998-10-16  Dave Brolley  
        * lex.c (real_yylex): Fix unaligned access of wchar_t.
        * lex.c (real_yylex): Fix unaligned access of wchar_t.
1998-10-16  Mark Mitchell  
1998-10-16  Mark Mitchell  
        * class.c (add_method): Fix documentation to reflect previous
        * class.c (add_method): Fix documentation to reflect previous
        changes.  Check for duplicate method declarations here.
        changes.  Check for duplicate method declarations here.
        * decl.c (decls_match): Handle FUNCTION_DECL vs TEMPLATE_DECL
        * decl.c (decls_match): Handle FUNCTION_DECL vs TEMPLATE_DECL
        correctly; such things never match.
        correctly; such things never match.
        (grokfndecl): Don't look for duplicate methods here.
        (grokfndecl): Don't look for duplicate methods here.
        * decl2.c (check_classfn): Don't assume names are mangled.
        * decl2.c (check_classfn): Don't assume names are mangled.
        Don't add bogus member function declarations to a class before the
        Don't add bogus member function declarations to a class before the
        class type is complete.
        class type is complete.
        (grokfield): Reformat error message.
        (grokfield): Reformat error message.
        * method.c (set_mangled_name_for_decl): Don't mangle names while
        * method.c (set_mangled_name_for_decl): Don't mangle names while
        processing_template_decl.
        processing_template_decl.
1998-10-16  Jason Merrill  
1998-10-16  Jason Merrill  
        * typeck.c (build_indirect_ref): Complain about a pointer to data
        * typeck.c (build_indirect_ref): Complain about a pointer to data
        member, too.
        member, too.
        * typeck2.c (build_m_component_ref): Don't indirect a pointer to
        * typeck2.c (build_m_component_ref): Don't indirect a pointer to
        data member.
        data member.
        * init.c (resolve_offset_ref): Don't undo the above.
        * init.c (resolve_offset_ref): Don't undo the above.
        * cp-tree.h (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): New macros.
        * cp-tree.h (DECL_C_BIT_FIELD, SET_DECL_C_BIT_FIELD): New macros.
        (struct lang_decl_flags): Add `bitfield'.
        (struct lang_decl_flags): Add `bitfield'.
        * class.c (finish_struct_1): Use DECL_C_BIT_FIELD instead of
        * class.c (finish_struct_1): Use DECL_C_BIT_FIELD instead of
        DECL_BIT_FIELD.
        DECL_BIT_FIELD.
        * decl2.c (grokbitfield, grok_alignof): Likewise.
        * decl2.c (grokbitfield, grok_alignof): Likewise.
        * init.c (build_offset_ref): Likewise.
        * init.c (build_offset_ref): Likewise.
        * typeck.c (build_component_addr, expr_sizeof): Likewise.
        * typeck.c (build_component_addr, expr_sizeof): Likewise.
        * cvt.c (build_up_reference): Don't crash if taking the address
        * cvt.c (build_up_reference): Don't crash if taking the address
        returns error_mark_node.
        returns error_mark_node.
        * decl.c (grokfndecl): Also check ctype when checking for ::main().
        * decl.c (grokfndecl): Also check ctype when checking for ::main().
1998-10-15  Jason Merrill  
1998-10-15  Jason Merrill  
        * decl.c (grokfndecl): ::main and __builtin_* get C linkage.
        * decl.c (grokfndecl): ::main and __builtin_* get C linkage.
        Do mangling here.
        Do mangling here.
        (grokdeclarator): Instead of here.
        (grokdeclarator): Instead of here.
        * friend.c (do_friend): Lose special handling of ::main and
        * friend.c (do_friend): Lose special handling of ::main and
        __builtin_*.
        __builtin_*.
        * cp-tree.h (DECL_MAIN_P): Check for C linkage.
        * cp-tree.h (DECL_MAIN_P): Check for C linkage.
        * spew.c (yylex): Clear looking_for_typename if we got
        * spew.c (yylex): Clear looking_for_typename if we got
        'enum { ... };'.
        'enum { ... };'.
1998-10-15  Mark Mitchell  
1998-10-15  Mark Mitchell  
        * class.c (maybe_warn_about_overly_private_class): Improve error
        * class.c (maybe_warn_about_overly_private_class): Improve error
        messages for class with only private constructors.
        messages for class with only private constructors.
        * cp-tree.def (TYPENAME_TYPE): Add to documentation.
        * cp-tree.def (TYPENAME_TYPE): Add to documentation.
        * cp-tree.h (TYPENAME_TYPE_FULLNAME): Document.
        * cp-tree.h (TYPENAME_TYPE_FULLNAME): Document.
        (build_typename_type): New function.
        (build_typename_type): New function.
        * decl.c (build_typename_type): Broken out from ...
        * decl.c (build_typename_type): Broken out from ...
        (make_typename_type): Use it.
        (make_typename_type): Use it.
        * search.c (lookup_field): Likewise.
        * search.c (lookup_field): Likewise.
1998-10-14  Benjamin Kosnik  
1998-10-14  Benjamin Kosnik  
        * pt.c (convert_nontype_argument): Check against type_referred_to.
        * pt.c (convert_nontype_argument): Check against type_referred_to.
        * decl.c (grokvardecl): Check for declarator name before building
        * decl.c (grokvardecl): Check for declarator name before building
        DECL_ASSEMBLER_NAME.
        DECL_ASSEMBLER_NAME.
1998-10-14  Mark Mitchell  
1998-10-14  Mark Mitchell  
        * pt.c (lookup_template_class): Add comment.
        * pt.c (lookup_template_class): Add comment.
        (instantiate_class_template): Don't mark the _TYPE node for
        (instantiate_class_template): Don't mark the _TYPE node for
        member class templates as an instantiation.
        member class templates as an instantiation.
1998-10-14  Jason Merrill  
1998-10-14  Jason Merrill  
        * decl.c (grokfndecl): Fix my thinko.
        * decl.c (grokfndecl): Fix my thinko.
1998-10-13  Jason Merrill  
1998-10-13  Jason Merrill  
        * tinfo2.cc (fast_compare): Remove.
        * tinfo2.cc (fast_compare): Remove.
        (before): Just use strcmp.
        (before): Just use strcmp.
        * tinfo.cc (operator==): Just use strcmp.
        * tinfo.cc (operator==): Just use strcmp.
1998-10-13  Klaus-Georg Adams  
1998-10-13  Klaus-Georg Adams  
        * decl.c (grokfndecl): Don't check for linkage in `extern "C"'
        * decl.c (grokfndecl): Don't check for linkage in `extern "C"'
        declarations.
        declarations.
1998-10-13  Mark Mitchell  
1998-10-13  Mark Mitchell  
        * cp-tree.h (specializations_of_same_template_p): Remove.
        * cp-tree.h (specializations_of_same_template_p): Remove.
        * search.c (get_template_base): Don't use it.
        * search.c (get_template_base): Don't use it.
        (get_template_base_recursive): Likewise.
        (get_template_base_recursive): Likewise.
        * pt.c (specializations_of_same_template_p): Remove.
        * pt.c (specializations_of_same_template_p): Remove.
        (unify): Don't use it.
        (unify): Don't use it.
        (lookup_template_class): Find the correct parent when setting
        (lookup_template_class): Find the correct parent when setting
        CLASSTYPE_TI_TEMPLATE.
        CLASSTYPE_TI_TEMPLATE.
1998-10-12  Jason Merrill  
1998-10-12  Jason Merrill  
        * tinfo.cc (operator==): Always compare names.
        * tinfo.cc (operator==): Always compare names.
1998-10-12  Herman ten Brugge  
1998-10-12  Herman ten Brugge  
        * decl.c (start_function): Fix cut-and-paste error.
        * decl.c (start_function): Fix cut-and-paste error.
1998-10-12  Jason Merrill  
1998-10-12  Jason Merrill  
        * inc/typeinfo: Add #pragma interface.
        * inc/typeinfo: Add #pragma interface.
        (operator!=): Just call operator==.
        (operator!=): Just call operator==.
        * tinfo.cc: Add #pragma implementation.
        * tinfo.cc: Add #pragma implementation.
        (operator==): Move from inc/typeinfo and tinfo2.cc.
        (operator==): Move from inc/typeinfo and tinfo2.cc.
        Check __COMMON_UNRELIABLE instead of _WIN32.
        Check __COMMON_UNRELIABLE instead of _WIN32.
        * typeck2.c (my_friendly_abort): Add URL.
        * typeck2.c (my_friendly_abort): Add URL.
1998-10-12  Alastair J. Houghton  
1998-10-12  Alastair J. Houghton  
        * decl.c (start_method): Added extra parameter for attributes.
        * decl.c (start_method): Added extra parameter for attributes.
        * cp-tree.h (start_method): Update prototype.
        * cp-tree.h (start_method): Update prototype.
        * parse.y (fn.def2): Update start_method parameter list.
        * parse.y (fn.def2): Update start_method parameter list.
1998-10-11  Mark Mitchell  
1998-10-11  Mark Mitchell  
        * cp-tree.h (specializations_of_same_template_p): Declare.
        * cp-tree.h (specializations_of_same_template_p): Declare.
        * pt.c (specializations_of_same_template_p): New function.
        * pt.c (specializations_of_same_template_p): New function.
        (unify): Use it.
        (unify): Use it.
        * search.c (get_template_base): Use it.
        * search.c (get_template_base): Use it.
        (get_template_base_recursive): Likewise.
        (get_template_base_recursive): Likewise.
1998-10-10  Manfred Hollstein  
1998-10-10  Manfred Hollstein  
        * decl2.c (start_objects): Add new variable `joiner' and
        * decl2.c (start_objects): Add new variable `joiner' and
        initialize it properly.
        initialize it properly.
1998-10-09  Mark Mitchell  
1998-10-09  Mark Mitchell  
        * search.c (expand_upcast_fixups): Tweak to match 1998-10-07
        * search.c (expand_upcast_fixups): Tweak to match 1998-10-07
        change to vtable types.
        change to vtable types.
        * cvt.c (ocp_convert): Avoid infinite recursion caused by
        * cvt.c (ocp_convert): Avoid infinite recursion caused by
        1998-10-03 change.
        1998-10-03 change.
1998-10-08  Jason Merrill  
1998-10-08  Jason Merrill  
        * pt.c (resolve_overloaded_unification): New fn.
        * pt.c (resolve_overloaded_unification): New fn.
        (try_one_overload): Likewise.
        (try_one_overload): Likewise.
        (unify): Don't fail on unknown type.
        (unify): Don't fail on unknown type.
        (type_unification_real): Likewise.  Use resolve_overloaded_unification
        (type_unification_real): Likewise.  Use resolve_overloaded_unification
        to handle an overloaded argument.
        to handle an overloaded argument.
        (template_args_equal): Split out...
        (template_args_equal): Split out...
        (comp_template_args): From here.
        (comp_template_args): From here.
        (determine_specialization): Also allow a template with more
        (determine_specialization): Also allow a template with more
        parms than were explicitly specified.
        parms than were explicitly specified.
        * cp-tree.h: Add template_args_equal.
        * cp-tree.h: Add template_args_equal.
        * call.c (resolve_args): Remove TEMPLATE_ID_EXPR code.
        * call.c (resolve_args): Remove TEMPLATE_ID_EXPR code.
Thu Oct  8 15:58:30 1998  Anthony Green  
Thu Oct  8 15:58:30 1998  Anthony Green  
        * semantics.c (finish_asm_stmt): Revert my 1998-09-28
        * semantics.c (finish_asm_stmt): Revert my 1998-09-28
        change.
        change.
Thu Oct  8 06:00:19 1998  Jeffrey A Law  (law@cygnus.com)
Thu Oct  8 06:00:19 1998  Jeffrey A Law  (law@cygnus.com)
        * typeck.c (unsigned_type): Only return TItype nodes when
        * typeck.c (unsigned_type): Only return TItype nodes when
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        (signed_type): Likewise.
        (signed_type): Likewise.
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Only declare
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Only declare
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.
        (init_decl_processing): Only create TItype nodes when
        (init_decl_processing): Only create TItype nodes when
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        HOST_BITS_PER_WIDE_INT is >= 64 bits.
        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Only declare
        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Only declare
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.
        when HOST_BITS_PER_WIDE_INT is >= 64 bits.
Wed Oct  7 12:32:44 1998  Kaveh R. Ghazi  
Wed Oct  7 12:32:44 1998  Kaveh R. Ghazi  
        * Makefile.in (hash.h): Add -L KR-C -F ', 0, 0' flags to gperf.
        * Makefile.in (hash.h): Add -L KR-C -F ', 0, 0' flags to gperf.
        (gxx.gperf): Update comments describing invocation flags.
        (gxx.gperf): Update comments describing invocation flags.
        (hash.h): Regenerate using gperf 2.7.1 (19981006 egcs).
        (hash.h): Regenerate using gperf 2.7.1 (19981006 egcs).
1998-10-07  Mark Mitchell  
1998-10-07  Mark Mitchell  
        * class.c (finish_struct_1): Add commentary on previous change.
        * class.c (finish_struct_1): Add commentary on previous change.
        * cp-tree.h (vtbl_ptr_type_node): New variable.
        * cp-tree.h (vtbl_ptr_type_node): New variable.
        * class.c (build_vtbl_ref): Don't indirect through the vptr; it's
        * class.c (build_vtbl_ref): Don't indirect through the vptr; it's
        already of the right type.
        already of the right type.
        (finish_struct_1): Make the vptr be of type vtbl_ptr_type_node.
        (finish_struct_1): Make the vptr be of type vtbl_ptr_type_node.
        Simplify code to grow vtable.
        Simplify code to grow vtable.
        * decl.c (vtbl_ptr_type_node): Define.
        * decl.c (vtbl_ptr_type_node): Define.
        (init_decl_processing): Initialize it.
        (init_decl_processing): Initialize it.
1998-10-06  Mark Mitchell  
1998-10-06  Mark Mitchell  
        * cp-tree.def (PTRMEM_CST): New tree node.
        * cp-tree.def (PTRMEM_CST): New tree node.
        * cp-tree.h (ptrmem_cst): New type.
        * cp-tree.h (ptrmem_cst): New type.
        (lang_type): Remove local_typedecls.
        (lang_type): Remove local_typedecls.
        (dummy): Increase to 12 bits from 11.
        (dummy): Increase to 12 bits from 11.
        (CLASSTYPE_LOCAL_TYPEDECLS): Remove.
        (CLASSTYPE_LOCAL_TYPEDECLS): Remove.
        (PTRMEM_CST_CLASS): New macro.
        (PTRMEM_CST_CLASS): New macro.
        (PTRMEM_CST_MEMBER): Likewise.
        (PTRMEM_CST_MEMBER): Likewise.
        (current_access_specifier): New variable.
        (current_access_specifier): New variable.
        (current_class_type): Remove duplicate declaration.
        (current_class_type): Remove duplicate declaration.
        (finish_struct): Change prototype.
        (finish_struct): Change prototype.
        (unreverse_member_declarations): New function.
        (unreverse_member_declarations): New function.
        (pushdecl_class_level): Change prototype.
        (pushdecl_class_level): Change prototype.
        (grok_enum_decls): Remove.
        (grok_enum_decls): Remove.
        (fixup_anonymous_union): New function.
        (fixup_anonymous_union): New function.
        (grok_x_components): Change prototype.
        (grok_x_components): Change prototype.
        (tsubst_chain): Remove.
        (tsubst_chain): Remove.
        (finish_member_template_decl): Likewise.
        (finish_member_template_decl): Likewise.
        (check_explicit_specialization): Fix indentation.
        (check_explicit_specialization): Fix indentation.
        (finish_class_definition): Change prototype.
        (finish_class_definition): Change prototype.
        (finish_member_class_template): Likewise.
        (finish_member_class_template): Likewise.
        (finish_member_declaration): New function.
        (finish_member_declaration): New function.
        (check_multiple_declarators): Likewise.
        (check_multiple_declarators): Likewise.
        * class.c (class_stack_node_t): New type.
        * class.c (class_stack_node_t): New type.
        (current_class_base): Remove.
        (current_class_base): Remove.
        (current_class_stack): Change type.
        (current_class_stack): Change type.
        (current_access_specifier): New variable.
        (current_access_specifier): New variable.
        (grow_method): Remove.
        (grow_method): Remove.
        (check_member_decl_is_same_in_complete_scope): Break out from
        (check_member_decl_is_same_in_complete_scope): Break out from
        finish_struct.
        finish_struct.
        (make_method_vec): New function.
        (make_method_vec): New function.
        (free_method_vec): Likewise.
        (free_method_vec): Likewise.
        (add_implicitly_declared_members): Break out from finish_struct_1.
        (add_implicitly_declared_members): Break out from finish_struct_1.
        (free_method_vecs): New variable.
        (free_method_vecs): New variable.
        (add_method): Rework for direct use from parser.
        (add_method): Rework for direct use from parser.
        (handle_using_decl): Watch for NULL_TREE while iterating through
        (handle_using_decl): Watch for NULL_TREE while iterating through
        CLASSTYPE_METHOD_VEC.
        CLASSTYPE_METHOD_VEC.
        (finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
        (finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
        just do some error-checking.
        just do some error-checking.
        (warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
        (warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
        (finish_struct_1): Simplify.  Use add_implicitly_declared_members.
        (finish_struct_1): Simplify.  Use add_implicitly_declared_members.
        (finish_struct): Change prototype.  Simplify; fields and methods
        (finish_struct): Change prototype.  Simplify; fields and methods
        are already set up at this point.
        are already set up at this point.
        (init_class_processing): Set up current_class_stack.
        (init_class_processing): Set up current_class_stack.
        (pushclass): Save current_access_specifier.
        (pushclass): Save current_access_specifier.
        (popclass): Restore it.
        (popclass): Restore it.
        (currently_open_class): Simplify.
        (currently_open_class): Simplify.
        (build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
        (build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
        * decl.c (saved_scope): Add access_specifier.
        * decl.c (saved_scope): Add access_specifier.
        (maybe_push_to_top_level): Save it.
        (maybe_push_to_top_level): Save it.
        (pop_from_top_level): Restore it.
        (pop_from_top_level): Restore it.
        (maybe_process_template_type_declaration): Use
        (maybe_process_template_type_declaration): Use
        finish_member_declaration.
        finish_member_declaration.
        (pushtag): Likewise.
        (pushtag): Likewise.
        (pushdecl_class_level): Don't return a value.
        (pushdecl_class_level): Don't return a value.
        (fixup_anonymous_union): Break out from grok_x_components.
        (fixup_anonymous_union): Break out from grok_x_components.
        (shadow_tag): Use it.
        (shadow_tag): Use it.
        (xref_tag): Complain about using an elaborated type specifier to
        (xref_tag): Complain about using an elaborated type specifier to
        reference a template type parameter or typedef name.
        reference a template type parameter or typedef name.
        (xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (current_local_enum): Remove.
        (current_local_enum): Remove.
        (build_enumerator): Call finish_member_declaration.
        (build_enumerator): Call finish_member_declaration.
        (grok_enum_decls): Remove.
        (grok_enum_decls): Remove.
        * decl2.c (grok_x_components): Simplify.
        * decl2.c (grok_x_components): Simplify.
        (check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
        (check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
        (grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
        (merge_functions): Add to comment.
        (merge_functions): Add to comment.
        (arg_assoc_type): Prototype.
        (arg_assoc_type): Prototype.
        (arg_assoc): Pass as many arguments as there are parameters.
        (arg_assoc): Pass as many arguments as there are parameters.
        * error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
        * error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
        OFFSET_REF.
        OFFSET_REF.
        * expr.c (cpls_expand_expr): Remove dead code.  Handle
        * expr.c (cpls_expand_expr): Remove dead code.  Handle
        PTRMEM_CST.
        PTRMEM_CST.
        * friend.c (do_friend): Lookup friends when in nested classes.
        * friend.c (do_friend): Lookup friends when in nested classes.
        Change comments.
        Change comments.
        * init.c (build_offset_ref): Do lookup even for classes that are
        * init.c (build_offset_ref): Do lookup even for classes that are
        only partially defined.
        only partially defined.
        (decl_constant_value): Remove dead code.
        (decl_constant_value): Remove dead code.
        * method.c (build_overload_value): Remove hack where by TYPE was
        * method.c (build_overload_value): Remove hack where by TYPE was
        not a TYPE.  Handle PTRMEM_CST.
        not a TYPE.  Handle PTRMEM_CST.
        (build_template_parm_names): Don't pass a PARM_DECL where a TYPE
        (build_template_parm_names): Don't pass a PARM_DECL where a TYPE
        should go.
        should go.
        * parse.y (components, notype_components, component_decl,
        * parse.y (components, notype_components, component_decl,
        component_decl_1, component_declarator, component_declarator0):
        component_decl_1, component_declarator, component_declarator0):
        Now all are itype rather than ttype.  Rework to add members to
        Now all are itype rather than ttype.  Rework to add members to
        classes on the fly.
        classes on the fly.
        (typesqpecqual_reserved): Use check_multiple_declarators.
        (typesqpecqual_reserved): Use check_multiple_declarators.
        (structsp): Update class to finish_class_definition.
        (structsp): Update class to finish_class_definition.
        (do_xref_defn): Unsplit into named_class_head.
        (do_xref_defn): Unsplit into named_class_head.
        (access_specifier): Set current_access_specifier.
        (access_specifier): Set current_access_specifier.
        * pt.c (set_current_access_from_decl): New function.
        * pt.c (set_current_access_from_decl): New function.
        (finish_member_template_decl): Don't take the parameters.
        (finish_member_template_decl): Don't take the parameters.
        (comp_template_args): Make more robust.
        (comp_template_args): Make more robust.
        (lookup_template_class): Don't use current_local_enum.
        (lookup_template_class): Don't use current_local_enum.
        (for_each_template_parm): Handle PTRMEM_CST.
        (for_each_template_parm): Handle PTRMEM_CST.
        (instantiate_class_template): Use set_current_access_from_decl,
        (instantiate_class_template): Use set_current_access_from_decl,
        finish_member_declaration and unreverse_member_declarations.  Set
        finish_member_declaration and unreverse_member_declarations.  Set
        lineno/input_filename before generating implicit member functions.
        lineno/input_filename before generating implicit member functions.
        (type_unification_real): Don't assume back-unification happens
        (type_unification_real): Don't assume back-unification happens
        only for the last argument.
        only for the last argument.
        (regenerate_decl_from_template): Call pushclass a bit earlier.
        (regenerate_decl_from_template): Call pushclass a bit earlier.
        (tsubst_chain): Remove.
        (tsubst_chain): Remove.
        (tsubst_enum): Use set_current_access_from_decl.
        (tsubst_enum): Use set_current_access_from_decl.
        (set_mangled_name_for_template_decl): Fix indentation.
        (set_mangled_name_for_template_decl): Fix indentation.
        * search.c (lookup_fnfields_1): Change iteration through
        * search.c (lookup_fnfields_1): Change iteration through
        CLASSTYPE_METHOD_VEC.
        CLASSTYPE_METHOD_VEC.
        (dfs_pushdecls): Likewise.
        (dfs_pushdecls): Likewise.
        (dfs_compress_decls): Likewise.
        (dfs_compress_decls): Likewise.
        (add_conversions): Likewise.
        (add_conversions): Likewise.
        * semantics.c (finish_class_definition): Don't take components.
        * semantics.c (finish_class_definition): Don't take components.
        Change call to finish_struct.
        Change call to finish_struct.
        (finish_member_declaration): New function.
        (finish_member_declaration): New function.
        (finish_member_class_template): Don't take template parameters.
        (finish_member_class_template): Don't take template parameters.
        Change call to grok_x_components.  Call finish_member_template_decl.
        Change call to grok_x_components.  Call finish_member_template_decl.
        (check_multiple_declarators): New function.
        (check_multiple_declarators): New function.
        * sig.c (append_signature_fields): Work from the TYPE_METHODS, not
        * sig.c (append_signature_fields): Work from the TYPE_METHODS, not
        a passed in fieldlist.
        a passed in fieldlist.
        * tree.c (search_tree): Handle PTRMEM_CST.
        * tree.c (search_tree): Handle PTRMEM_CST.
        (mapcar): Likewise.
        (mapcar): Likewise.
        * typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
        * typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
        INTEGER_CSTs, for pointer-to-data members.
        INTEGER_CSTs, for pointer-to-data members.
        * call.c (resolve_args): Resolve template specializations, if
        * call.c (resolve_args): Resolve template specializations, if
        possible.
        possible.
Tue Oct  6 07:57:26 1998  Kaveh R. Ghazi  
Tue Oct  6 07:57:26 1998  Kaveh R. Ghazi  
        * Makefile.in (spew.o): Depend on toplev.h.
        * Makefile.in (spew.o): Depend on toplev.h.
        * call.c (compare_ics): Initialize variables `deref_from_type2',
        * call.c (compare_ics): Initialize variables `deref_from_type2',
        `deref_to_type1' and `deref_to_type2'.
        `deref_to_type1' and `deref_to_type2'.
        * except.c (get_eh_type): Hide prototype and definition.
        * except.c (get_eh_type): Hide prototype and definition.
        (process_start_catch_block_old): Remove unused static prototype.
        (process_start_catch_block_old): Remove unused static prototype.
        * pt.c (tsubst_decl): Initialize variable `argvec'.
        * pt.c (tsubst_decl): Initialize variable `argvec'.
        * spew.c: Include toplev.h.
        * spew.c: Include toplev.h.
1998-10-05  Jason Merrill  
1998-10-05  Jason Merrill  
        * pt.c (instantiate_decl): Do save and restore file position.
        * pt.c (instantiate_decl): Do save and restore file position.
1998-10-05  Martin von Löwis  
1998-10-05  Martin von Löwis  
        * method.c (build_decl_overload_real): Clear
        * method.c (build_decl_overload_real): Clear
        numeric_output_need_bar after __.
        numeric_output_need_bar after __.
1998-10-05  Nathan Sidwell  
1998-10-05  Nathan Sidwell  
        * call.c (build_new_method_call): Issue 'incomplete type' error,
        * call.c (build_new_method_call): Issue 'incomplete type' error,
        if class is not defined.
        if class is not defined.
1998-10-05  Kaveh R. Ghazi  
1998-10-05  Kaveh R. Ghazi  
        * call.c (build_object_call): Move declaration of variable
        * call.c (build_object_call): Move declaration of variable
        `fn' into the scope where it is used.  Don't access variable
        `fn' into the scope where it is used.  Don't access variable
        `fn' when it is uninitialized, instead use `fns'.
        `fn' when it is uninitialized, instead use `fns'.
1998-10-04  Theodore Papadopoulo  
1998-10-04  Theodore Papadopoulo  
        * errfn.c (cp_thing): Print buf as a string not as a printf format
        * errfn.c (cp_thing): Print buf as a string not as a printf format
        to avoid problems with the operator%.  Consequently, `%%' sequences
        to avoid problems with the operator%.  Consequently, `%%' sequences
        in format are copied as `%' in buf.
        in format are copied as `%' in buf.
1998-10-04  Jason Merrill  
1998-10-04  Jason Merrill  
        * pt.c (pop_tinst_level): Call extract_interface_info.
        * pt.c (pop_tinst_level): Call extract_interface_info.
        (instantiate_decl): Don't save and restore file position.
        (instantiate_decl): Don't save and restore file position.
        * decl.c (cp_finish_decl): Make statics in extern inlines and
        * decl.c (cp_finish_decl): Make statics in extern inlines and
        templates common, if possible and the target doesn't support weak
        templates common, if possible and the target doesn't support weak
        symbols.
        symbols.
        * decl.c (grokdeclarator): Remove redundant calls to
        * decl.c (grokdeclarator): Remove redundant calls to
        build_type_variant and some duplicated code.
        build_type_variant and some duplicated code.
        * sig.c (build_signature_reference_type): Only take the type parm.
        * sig.c (build_signature_reference_type): Only take the type parm.
        (build_signature_pointer_type): Likewise.
        (build_signature_pointer_type): Likewise.
        * tree.c (build_cplus_method_type): Adjust.
        * tree.c (build_cplus_method_type): Adjust.
        * cp-tree.h: Update.
        * cp-tree.h: Update.
1998-10-04  Mark Mitchell  
1998-10-04  Mark Mitchell  
        * call.c (build_over_call): Make pedwarns about dropped qualifiers
        * call.c (build_over_call): Make pedwarns about dropped qualifiers
        into full-fledged errors.
        into full-fledged errors.
        * cvt.c (convert_to_reference): Likewise.
        * cvt.c (convert_to_reference): Likewise.
        * typeck.c (convert_for_assignment): Likewise.
        * typeck.c (convert_for_assignment): Likewise.
        * search.c (expand_upcast_vtables): In addition to unsetting
        * search.c (expand_upcast_vtables): In addition to unsetting
        TREE_READONLY, remove top-level const type qualifier.
        TREE_READONLY, remove top-level const type qualifier.
1998-10-03  Mark Mitchell  
1998-10-03  Mark Mitchell  
        * class.c (current_class_ptr, current_class_ref): Clarify
        * class.c (current_class_ptr, current_class_ref): Clarify
        documentation.
        documentation.
        * cvt.c (ocp_convert): Don't expect fold to remove all trivial
        * cvt.c (ocp_convert): Don't expect fold to remove all trivial
        NOP type conversions.
        NOP type conversions.
        * decl.c (decls_match): Use comptypes directly; ignore
        * decl.c (decls_match): Use comptypes directly; ignore
        qualifiers on the DECL.
        qualifiers on the DECL.
        (duplicate_decls): Remove qualifier checks on DECL.
        (duplicate_decls): Remove qualifier checks on DECL.
        (grokdeclarator): Make the type built up include top-level
        (grokdeclarator): Make the type built up include top-level
        qualifiers.
        qualifiers.
        * decl2.c (do_dtors): Fix spelling error.
        * decl2.c (do_dtors): Fix spelling error.
        * error.c (dump_simple_decl): Don't look at qualifiers on the decl
        * error.c (dump_simple_decl): Don't look at qualifiers on the decl
        when printing type information.
        when printing type information.
        * init.c (build_new_1): Add documentation.  Deal with the fact
        * init.c (build_new_1): Add documentation.  Deal with the fact
        that type of allocated memory now contains qualifiers.
        that type of allocated memory now contains qualifiers.
        * lex.c (is_global): Improve error-recovery.
        * lex.c (is_global): Improve error-recovery.
        * sig.c (build_member_function_pointer): Don't cast away const
        * sig.c (build_member_function_pointer): Don't cast away const
        on fields of sigtable_entry_type.
        on fields of sigtable_entry_type.
        * tree.c (lvalue_type): Don't look at top-level qualifiers on
        * tree.c (lvalue_type): Don't look at top-level qualifiers on
        expressions.
        expressions.
        * typeck.c (decay_conversion): Likewise.
        * typeck.c (decay_conversion): Likewise.
        (build_component_ref): Make sure the type of the COMPONENT_REF
        (build_component_ref): Make sure the type of the COMPONENT_REF
        contains top-level qualifiers, as appropriate.  Improve
        contains top-level qualifiers, as appropriate.  Improve
        error-handling.
        error-handling.
        (build_indirect_ref): Simplify.  Don't strip top-level qualifiers.
        (build_indirect_ref): Simplify.  Don't strip top-level qualifiers.
        (build_array_ref): Likewise.
        (build_array_ref): Likewise.
        (build_unary_op): Improve error-recovery.
        (build_unary_op): Improve error-recovery.
        (unary_complex_lvalue): Make taking the address a bound member
        (unary_complex_lvalue): Make taking the address a bound member
        function an error, not a sorry.
        function an error, not a sorry.
        (build_conditional_expr): Look at the type qualifiers, not the
        (build_conditional_expr): Look at the type qualifiers, not the
        qualifiers on the expression itself.
        qualifiers on the expression itself.
1998-10-03  Jason Merrill  
1998-10-03  Jason Merrill  
        * decl2.c (merge_functions): Remove duplicates.
        * decl2.c (merge_functions): Remove duplicates.
        * decl2.c: Add -f{no-,}implicit-inline-templates.
        * decl2.c: Add -f{no-,}implicit-inline-templates.
        (import_export_decl): Check it.
        (import_export_decl): Check it.
        * decl.c (lookup_name_real): Template parms also take precedence
        * decl.c (lookup_name_real): Template parms also take precedence
        over implicit typename.  Only warn if yylex.
        over implicit typename.  Only warn if yylex.
        * typeck.c (build_conditional_expr): Only fold if ifexp is an
        * typeck.c (build_conditional_expr): Only fold if ifexp is an
        INTEGER_CST.
        INTEGER_CST.
        * decl2.c (finish_vtable_vardecl): Check DECL_INTERFACE_KNOWN
        * decl2.c (finish_vtable_vardecl): Check DECL_INTERFACE_KNOWN
        instead of linkage.
        instead of linkage.
1998-10-01  Jason Merrill  
1998-10-01  Jason Merrill  
        * cp-tree.h (FORMAT_VBASE_NAME): New macro.
        * cp-tree.h (FORMAT_VBASE_NAME): New macro.
        * class.c (build_vbase_pointer): Use it.
        * class.c (build_vbase_pointer): Use it.
        * rtti.c (expand_class_desc): Likewise.
        * rtti.c (expand_class_desc): Likewise.
        * tree.c (build_vbase_pointer_fields): Likewise.
        * tree.c (build_vbase_pointer_fields): Likewise.
Thu Oct  1 10:43:45 1998  Nick Clifton  
Thu Oct  1 10:43:45 1998  Nick Clifton  
        * decl.c (start_decl): Add invocation of
        * decl.c (start_decl): Add invocation of
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.
        (start_function): Add invocation of
        (start_function): Add invocation of
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.
        SET_DEFAULT_DECL_ATTRIBUTES, if defined.
        * lex.c: Replace occurrences of HANDLE_SYSV_PRAGMA with
        * lex.c: Replace occurrences of HANDLE_SYSV_PRAGMA with
        HANDLE_GENERIC_PRAGMAS.
        HANDLE_GENERIC_PRAGMAS.
1998-09-28  Anthony Green  
1998-09-28  Anthony Green  
        * semantics.c (finish_asm_stmt): Always permit volatile asms.
        * semantics.c (finish_asm_stmt): Always permit volatile asms.
1998-09-28  Mark Mitchell  
1998-09-28  Mark Mitchell  
        * decl.c (grokdeclarator): Tighten checks for invalid
        * decl.c (grokdeclarator): Tighten checks for invalid
        destructors.  Improve error-messages and error-recovery.
        destructors.  Improve error-messages and error-recovery.
        * decl2.c (check_classfn): Don't assume that mangled destructor
        * decl2.c (check_classfn): Don't assume that mangled destructor
        names contain type information.
        names contain type information.
1998-09-25  Jason Merrill  
1998-09-25  Jason Merrill  
        * search.c (get_base_distance): Remove assert.
        * search.c (get_base_distance): Remove assert.
        * decl2.c (build_anon_union_vars): Don't process a field with no
        * decl2.c (build_anon_union_vars): Don't process a field with no
        name.
        name.
        (finish_anon_union): Also complain about local anon unions with no
        (finish_anon_union): Also complain about local anon unions with no
        members.
        members.
1998-09-25  Martin von Löwis  
1998-09-25  Martin von Löwis  
        * decl.c (lookup_namespace_name): If the name is a namespace,
        * decl.c (lookup_namespace_name): If the name is a namespace,
        return it immediately.
        return it immediately.
Fri Sep 25 11:45:38 1998  Kaveh R. Ghazi  
Fri Sep 25 11:45:38 1998  Kaveh R. Ghazi  
        * cp-tree.h (define_case_label): Remove unused parameter.
        * cp-tree.h (define_case_label): Remove unused parameter.
        (check_java_method): Likewise.
        (check_java_method): Likewise.
        (grokclassfn): Likewise.
        (grokclassfn): Likewise.
        (expand_aggr_init): Likewise.
        (expand_aggr_init): Likewise.
        (build_x_delete): Likewise.
        (build_x_delete): Likewise.
        (maybe_end_member_template_processing): Likewise.
        (maybe_end_member_template_processing): Likewise.
        (unshare_base_binfos): Add prototype.
        (unshare_base_binfos): Add prototype.
        (string_conv_p): Likewise.
        (string_conv_p): Likewise.
        (my_friendly_abort): Mark with ATTRIBUTE_NORETURN.
        (my_friendly_abort): Mark with ATTRIBUTE_NORETURN.
        * cvt.c (build_up_reference): Remove unused parameter
        * cvt.c (build_up_reference): Remove unused parameter
        `checkconst', all callers changed.
        `checkconst', all callers changed.
        (build_type_conversion): Mark parameter `code' with
        (build_type_conversion): Mark parameter `code' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
        (build_expr_type_conversion): Initialize variable `conv'.
        (build_expr_type_conversion): Initialize variable `conv'.
        * decl.c (push_namespace): Initialize variable `d'.
        * decl.c (push_namespace): Initialize variable `d'.
        (define_case_label): Remove unused parameter `decl', all callers
        (define_case_label): Remove unused parameter `decl', all callers
        changed.
        changed.
        * decl2.c (lang_decode_option): If !USE_CPPLIB, mark parameter
        * decl2.c (lang_decode_option): If !USE_CPPLIB, mark parameter
        `argc' with ATTRIBUTE_UNUSED.
        `argc' with ATTRIBUTE_UNUSED.
        (grokclassfn): Remove unused parameter `cname', all callers
        (grokclassfn): Remove unused parameter `cname', all callers
        changed.
        changed.
        (check_java_method): Likewise for parameter `ctype'.
        (check_java_method): Likewise for parameter `ctype'.
        (copy_assignment_arg_p): Mark parameter `virtualp' with
        (copy_assignment_arg_p): Mark parameter `virtualp' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
        (finish_prevtable_vardecl): Likewise for parameter `prev'.
        (finish_prevtable_vardecl): Likewise for parameter `prev'.
        * expr.c (extract_init): Likewise for parameters `decl' and `init'.
        * expr.c (extract_init): Likewise for parameters `decl' and `init'.
        * init.c (expand_aggr_init_1): Remove unused parameter
        * init.c (expand_aggr_init_1): Remove unused parameter
        `alias_this', all callers changed.
        `alias_this', all callers changed.
        (expand_aggr_init): Likewise.
        (expand_aggr_init): Likewise.
        (expand_default_init): Likewise.
        (expand_default_init): Likewise.
        (build_new_1): Initialize variable `susp'.
        (build_new_1): Initialize variable `susp'.
        (build_x_delete): Remove unused parameter `type', all callers
        (build_x_delete): Remove unused parameter `type', all callers
        changed.
        changed.
        * lex.c (set_typedecl_interface_info): Mark parameter `prev' with
        * lex.c (set_typedecl_interface_info): Mark parameter `prev' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
        (readescape): Use (unsigned) value in shift.
        (readescape): Use (unsigned) value in shift.
        (real_yylex): Likewise.  Likewise.  Also cast `sizeof' to int when
        (real_yylex): Likewise.  Likewise.  Also cast `sizeof' to int when
        comparing to a signed quantity.
        comparing to a signed quantity.
        * pt.c (maybe_end_member_template_processing): Remove unused
        * pt.c (maybe_end_member_template_processing): Remove unused
        parameter `decl', all callers changed.
        parameter `decl', all callers changed.
        (check_explicit_specialization): Add braces around empty body in
        (check_explicit_specialization): Add braces around empty body in
        an else-statement.
        an else-statement.
        (current_template_args): Initialize variable `args'.
        (current_template_args): Initialize variable `args'.
        (lookup_template_class): Likewise for variable `prev_local_enum'.
        (lookup_template_class): Likewise for variable `prev_local_enum'.
        (tsubst_decl): Likewise for variable `r'.
        (tsubst_decl): Likewise for variable `r'.
        (set_mangled_name_for_template_decl): Initialize variable
        (set_mangled_name_for_template_decl): Initialize variable
        `context'.
        `context'.
        * spew.c (scan_tokens): Change type of parameter `n' to unsigned.
        * spew.c (scan_tokens): Change type of parameter `n' to unsigned.
        Likewise for variable `i'.
        Likewise for variable `i'.
        (yylex): Initialize variable `trrr'.
        (yylex): Initialize variable `trrr'.
        * typeck.c (compparms): Mark variable `strict' with
        * typeck.c (compparms): Mark variable `strict' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
        * xref.c (simplify_type): Cast argument of ctype function to
        * xref.c (simplify_type): Cast argument of ctype function to
        `unsigned char'.
        `unsigned char'.
1998-09-24  Mark Mitchell  
1998-09-24  Mark Mitchell  
        * cp-tree.h (language_lvalue_valid): Remove.
        * cp-tree.h (language_lvalue_valid): Remove.
        * decl.c (grokdeclarator): Don't disallow references to functions.
        * decl.c (grokdeclarator): Don't disallow references to functions.
        * tree.c (lvalue_p_1): New function, combining duplicated
        * tree.c (lvalue_p_1): New function, combining duplicated
        code from ...
        code from ...
        (lvalue_p): Use it.
        (lvalue_p): Use it.
        (real_lvalue_p): Likewise.
        (real_lvalue_p): Likewise.
        * typeck.c (language_lvalue_valid): Remove.
        * typeck.c (language_lvalue_valid): Remove.
        (build_modify_expr): Treat FUNCTION_TYPEs as readonly, even though
        (build_modify_expr): Treat FUNCTION_TYPEs as readonly, even though
        they don't have TREE_READONLY set.
        they don't have TREE_READONLY set.
        * typeck2.c (readonly_error): Add case for FUNCTION_DECLs.
        * typeck2.c (readonly_error): Add case for FUNCTION_DECLs.
1998-09-24  Benjamin Kosnik  
1998-09-24  Benjamin Kosnik  
        * spew.c (yylex): Give diagnostic.
        * spew.c (yylex): Give diagnostic.
        * hash.h (is_reserved_word): Add export.
        * hash.h (is_reserved_word): Add export.
        * gxx.gperf: Likewise.
        * gxx.gperf: Likewise.
        * lex.h (rid): Add RID_EXPORT.
        * lex.h (rid): Add RID_EXPORT.
        * lex.c (init_parse): Likewise.
        * lex.c (init_parse): Likewise.
Tue Sep 22 21:01:19 1998  Gerald Pfeifer  
Tue Sep 22 21:01:19 1998  Gerald Pfeifer  
        * friend.c (do_friend): Make warning a full sentence.
        * friend.c (do_friend): Make warning a full sentence.
1998-09-22  Mark Mitchell  
1998-09-22  Mark Mitchell  
        * parse.y (component_decl_list): Improve error-recovery.
        * parse.y (component_decl_list): Improve error-recovery.
1998-09-22  Benjamin Kosnik  
1998-09-22  Benjamin Kosnik  
        * decl.c (make_typename_type): Move error to point where name
        * decl.c (make_typename_type): Move error to point where name
        variable can be used by dump_type.
        variable can be used by dump_type.
1998-09-22  Mark Mitchell  
1998-09-22  Mark Mitchell  
        * decl.c (grokfndecl): Improve error-recovery.
        * decl.c (grokfndecl): Improve error-recovery.
        * decl2.c (grokfield): Likewise.
        * decl2.c (grokfield): Likewise.
        * pt.c (finish_member_template_decl): Likewise.
        * pt.c (finish_member_template_decl): Likewise.
1998-09-20  Martin von Löwis  
1998-09-20  Martin von Löwis  
        * method.c (hack_identifier): Finding multiple members is always
        * method.c (hack_identifier): Finding multiple members is always
        an error.
        an error.
1998-09-21  Per Bothner  
1998-09-21  Per Bothner  
        * Make-lang.in (c++-filt):  Link libiberty.a after cxxmain.o.
        * Make-lang.in (c++-filt):  Link libiberty.a after cxxmain.o.
Mon Sep 21 01:53:05 1998  Felix Lee  
Mon Sep 21 01:53:05 1998  Felix Lee  
        * lex.c (init_lex): Use getenv ("LANG"), not GET_ENVIRONMENT ().
        * lex.c (init_lex): Use getenv ("LANG"), not GET_ENVIRONMENT ().
1998-09-20  Mark Mitchell  
1998-09-20  Mark Mitchell  
        * class.c (maybe_warn_about_overly_private_class): Reformat.
        * class.c (maybe_warn_about_overly_private_class): Reformat.
1998-09-17  Andrew MacLeod  
1998-09-17  Andrew MacLeod  
        * exception.cc (__cplus_type_matcher): Realign some code.
        * exception.cc (__cplus_type_matcher): Realign some code.
1998-09-16  Mark Mitchell  
1998-09-16  Mark Mitchell  
        * Make-lang.in (tinfo.o): Use CXXFLAGS when compiling.
        * Make-lang.in (tinfo.o): Use CXXFLAGS when compiling.
        (tinfo2.o): Likewise.
        (tinfo2.o): Likewise.
        (exception.o): Likewise.
        (exception.o): Likewise.
        (new.o): Likewise.
        (new.o): Likewise.
        (opnew.o): Likewise.
        (opnew.o): Likewise.
        (opnewnt.o): Likewise.
        (opnewnt.o): Likewise.
        (opvnew.o): Likewise.
        (opvnew.o): Likewise.
        (opvnewnt.o): Likewise.
        (opvnewnt.o): Likewise.
        (opdel.o): Likewise.
        (opdel.o): Likewise.
        (opdelnt.o): Likewise.
        (opdelnt.o): Likewise.
        (opvdel.o): Likewise.
        (opvdel.o): Likewise.
        (opvdelnt.o): Likewise.
        (opvdelnt.o): Likewise.
1998-09-16  Richard Henderson  
1998-09-16  Richard Henderson  
        * decl.c (init_decl_processing): Kill __builtin_fp and __builtin_sp.
        * decl.c (init_decl_processing): Kill __builtin_fp and __builtin_sp.
1998-09-15  Alexandre Oliva  
1998-09-15  Alexandre Oliva  
        * call.c (build_field_call): Handle static data members too.
        * call.c (build_field_call): Handle static data members too.
        * typeck.c (comptypes): When comparing pointer types, check
        * typeck.c (comptypes): When comparing pointer types, check
        whether referred types match even in strictest modes.
        whether referred types match even in strictest modes.
1998-09-15  Mark Mitchell  
1998-09-15  Mark Mitchell  
        * cp-tree.h: Revert previous change.
        * cp-tree.h: Revert previous change.
        (finish_struct_methods): Remove declaration.
        (finish_struct_methods): Remove declaration.
        * class.c: Revert previous change.
        * class.c: Revert previous change.
        (maybe_warn_about_overly_private_class): New function.
        (maybe_warn_about_overly_private_class): New function.
        (finish_struct_methods): Declare here, and make static.  Remove
        (finish_struct_methods): Declare here, and make static.  Remove
        unnecessary parameters.  Tidy slightly.  Use
        unnecessary parameters.  Tidy slightly.  Use
        maybe_warn_about_overly_private_class.
        maybe_warn_about_overly_private_class.
        (finish_struct_1): Adjust.  Remove check for private constructors,
        (finish_struct_1): Adjust.  Remove check for private constructors,
        now done elsewhere.
        now done elsewhere.
        (finish_struct): Adjust.
        (finish_struct): Adjust.
1998-09-15  Andrew MacLeod  
1998-09-15  Andrew MacLeod  
        * except.c (expand_start_catch_block): No need to check for new
        * except.c (expand_start_catch_block): No need to check for new
        exception model.
        exception model.
        (process_start_catch_block_old): Deleted.
        (process_start_catch_block_old): Deleted.
        (process_start_catch_block): Add call to start_decl_1().
        (process_start_catch_block): Add call to start_decl_1().
        (expand_end_catch_block): Add call to end_catch_handler().
        (expand_end_catch_block): Add call to end_catch_handler().
        * exception.cc (__cplus_type_matcher): Only check the exception
        * exception.cc (__cplus_type_matcher): Only check the exception
        language if there is an exception table.
        language if there is an exception table.
1998-09-15  Andrew MacLeod  
1998-09-15  Andrew MacLeod  
        * search.c (expand_indirect_vtbls_init): Mark temporary stack slots
        * search.c (expand_indirect_vtbls_init): Mark temporary stack slots
        as used to prevent conflicts with virtual function tables.
        as used to prevent conflicts with virtual function tables.
1998-09-14  Mark Mitchell  
1998-09-14  Mark Mitchell  
        * cp-tree.h (lang_type): Add has_non_private_static_mem_fn.
        * cp-tree.h (lang_type): Add has_non_private_static_mem_fn.
        (CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN): New macro, to access it.
        (CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN): New macro, to access it.
        * class.c (maybe_class_too_private_p): New function.
        * class.c (maybe_class_too_private_p): New function.
        (finish_struct_methods): Use it.
        (finish_struct_methods): Use it.
        (finish_struct_1): Likewise.
        (finish_struct_1): Likewise.
        (finish_struct): Set CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN if
        (finish_struct): Set CLASSTYPE_HAS_NON_PRIVATE_STATIC_MEM_FN if
        appropriate.
        appropriate.
        * pt.c (check_specialization_scope): Fix spelling error.
        * pt.c (check_specialization_scope): Fix spelling error.
        (check_explicit_specialization): Remove code to handle explicit
        (check_explicit_specialization): Remove code to handle explicit
        specializations in class scope; they are now correctly diagnosed
        specializations in class scope; they are now correctly diagnosed
        as errors.
        as errors.
1998-09-10  Mark Mitchell  
1998-09-10  Mark Mitchell  
        * decl.c (pushdecl): Don't copy types if the
        * decl.c (pushdecl): Don't copy types if the
        DECL_ABSTRACT_ORIGIN of the new decl matches the TYPE_NAME of the
        DECL_ABSTRACT_ORIGIN of the new decl matches the TYPE_NAME of the
        type.
        type.
1998-09-09  Kriang Lerdsuwanakij  
1998-09-09  Kriang Lerdsuwanakij  
        * class.c (get_enclosing_class): New function.
        * class.c (get_enclosing_class): New function.
        (is_base_of_enclosing_class): Likewise.
        (is_base_of_enclosing_class): Likewise.
        * cp-tree.h (get_enclosing_class): Declare.
        * cp-tree.h (get_enclosing_class): Declare.
        (is_base_of_enclosing_class): Likewise.
        (is_base_of_enclosing_class): Likewise.
        * pt.c (coerce_template_parms): Use them.
        * pt.c (coerce_template_parms): Use them.
1998-09-09  Jason Merrill  
1998-09-09  Jason Merrill  
        * g++spec.c (lang_specific_driver): Check whether MATH_LIBRARY is
        * g++spec.c (lang_specific_driver): Check whether MATH_LIBRARY is
        null to decide whether to use it.
        null to decide whether to use it.
        * error.c (dump_type_real): Handle NAMESPACE_DECL.
        * error.c (dump_type_real): Handle NAMESPACE_DECL.
        * parse.y (base_class.1): Avoid crash on error.
        * parse.y (base_class.1): Avoid crash on error.
1998-09-08  Martin von Löwis  
1998-09-08  Martin von Löwis  
        * decl.c (make_typename_type): If context is a namespace, the code
        * decl.c (make_typename_type): If context is a namespace, the code
        is in error.
        is in error.
1998-09-08  Mumit Khan  
1998-09-08  Mumit Khan  
        * parse.y (nomods_initdcl0): Set up the parser stack correctly.
        * parse.y (nomods_initdcl0): Set up the parser stack correctly.
1998-09-08  Mark Mitchell  
1998-09-08  Mark Mitchell  
        * cp-tree.h (anonymous_namespace_name): Declare.
        * cp-tree.h (anonymous_namespace_name): Declare.
        * decl.c: Define it.
        * decl.c: Define it.
        (push_namespace): Use anonymous_namespace_name, rather than local
        (push_namespace): Use anonymous_namespace_name, rather than local
        static anon_name.
        static anon_name.
        * error.c (dump_decl): If a namespace is named
        * error.c (dump_decl): If a namespace is named
        anonymous_namespace_name, call it {anonymous}.
        anonymous_namespace_name, call it {anonymous}.
        * decl.c (grokparms): Distinguish between references and pointers
        * decl.c (grokparms): Distinguish between references and pointers
        in error message.
        in error message.
1998-09-08  Richard Henderson  
1998-09-08  Richard Henderson  
            Mark Mitchell  
            Mark Mitchell  
        * pt.c (process_partial_specialization): Consistently allocate
        * pt.c (process_partial_specialization): Consistently allocate
        and zero tpd.parms based on ntparms.  Use tpd2.parms, not
        and zero tpd.parms based on ntparms.  Use tpd2.parms, not
        tpd.parms, where appropriate.
        tpd.parms, where appropriate.
Sun Sep  6 00:00:51 1998  Jeffrey A Law  (law@cygnus.com)
Sun Sep  6 00:00:51 1998  Jeffrey A Law  (law@cygnus.com)
        * Makefile.in (INCLUDES): Update after recent toplevel gcc
        * Makefile.in (INCLUDES): Update after recent toplevel gcc
        reorganizations.
        reorganizations.
1998-09-05  Mark Mitchell  
1998-09-05  Mark Mitchell  
        * cp-tree.h (TI_PENDING_SPECIALIZATION_FLAG): Remove.
        * cp-tree.h (TI_PENDING_SPECIALIZATION_FLAG): Remove.
        * class.c (finish_struct): Remove hackery to deal with explicit
        * class.c (finish_struct): Remove hackery to deal with explicit
        specializations in class scope.
        specializations in class scope.
        * decl.c (grokfndecl): Improve error-recovery.
        * decl.c (grokfndecl): Improve error-recovery.
        * decl2.c (grokfield): Likewise.
        * decl2.c (grokfield): Likewise.
        * pt.c (check_specialization_scope): New function.
        * pt.c (check_specialization_scope): New function.
        (begin_specialization): Call it.
        (begin_specialization): Call it.
        (process_partial_specialization): New function, split out from
        (process_partial_specialization): New function, split out from
        push_template_decl.  Check partial specializations more
        push_template_decl.  Check partial specializations more
        stringently.
        stringently.
        (push_template_decl): Call it.
        (push_template_decl): Call it.
        (check_explicit_specialization): Don't attempt to handle explicit
        (check_explicit_specialization): Don't attempt to handle explicit
        specializations in class scope.
        specializations in class scope.
        (template_parm_data): Document.  Add current_arg and
        (template_parm_data): Document.  Add current_arg and
        arg_uses_template_parms.
        arg_uses_template_parms.
        (mark_template_parm): Set it.
        (mark_template_parm): Set it.
        (tsubst_arg_types): Remove unused variable.
        (tsubst_arg_types): Remove unused variable.
        * semantics.c (begin_class_definition): Tweak.
        * semantics.c (begin_class_definition): Tweak.
1998-09-04  Mark Mitchell  
1998-09-04  Mark Mitchell  
        * inc/typeinfo (type_info::type_info(const char*)): Make
        * inc/typeinfo (type_info::type_info(const char*)): Make
        `explicit'.
        `explicit'.
        * cp-tree.h (hash_tree_cons_simple): New macro.
        * cp-tree.h (hash_tree_cons_simple): New macro.
        * pt.c (tsubst_arg_types): New function.  Use hash_tree_cons.
        * pt.c (tsubst_arg_types): New function.  Use hash_tree_cons.
        (coerce_template_parms): Use make_temp_vec, instead of
        (coerce_template_parms): Use make_temp_vec, instead of
        make_tree_vec.  Document this behavior.
        make_tree_vec.  Document this behavior.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        (tsubst, cases METHOD_TYPE, FUNCTION_TYPE): Use tsubst_arg_types.
        (tsubst, cases METHOD_TYPE, FUNCTION_TYPE): Use tsubst_arg_types.
        Remove dead code (and add assertion to check its deadness).  Fix
        Remove dead code (and add assertion to check its deadness).  Fix
        bug w.r.t. exception specifications.
        bug w.r.t. exception specifications.
1998-09-03  Jason Merrill  
1998-09-03  Jason Merrill  
        * decl2.c (import_export_vtable): Always make artificials comdat.
        * decl2.c (import_export_vtable): Always make artificials comdat.
        (import_export_decl): Likewise.
        (import_export_decl): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.
1998-09-03  Mark Mitchell  
1998-09-03  Mark Mitchell  
        * cp-tree.h (finish_globally_qualified_member_call_expr):
        * cp-tree.h (finish_globally_qualified_member_call_expr):
        Rename to ...
        Rename to ...
        (finish_qualified_call_expr).
        (finish_qualified_call_expr).
        * semantics.c: Likewise.
        * semantics.c: Likewise.
        * parse.y (primary): Use it.
        * parse.y (primary): Use it.
        * method.c (hack_identifier): Remove redundant code.
        * method.c (hack_identifier): Remove redundant code.
        * init.c (resolve_offset_ref): Call convert_from_reference to
        * init.c (resolve_offset_ref): Call convert_from_reference to
        handle members of reference type.  Improve error recovery.
        handle members of reference type.  Improve error recovery.
1998-09-03  Benjamin Kosnik  
1998-09-03  Benjamin Kosnik  
        * cp-tree.h: Declare warn_nontemplate_friend.
        * cp-tree.h: Declare warn_nontemplate_friend.
        * decl2.c (lang_decode_option): Set.
        * decl2.c (lang_decode_option): Set.
        * lang-options.h: Add -Wnon-template-friend.
        * lang-options.h: Add -Wnon-template-friend.
        * friend.c (do_friend): Use to toggle non-template function warning.
        * friend.c (do_friend): Use to toggle non-template function warning.
1998-09-03  Mark Mitchell  
1998-09-03  Mark Mitchell  
        * decl.c (finish_enum): Don't resolve CONST_DECLs to their
        * decl.c (finish_enum): Don't resolve CONST_DECLs to their
        corresponding INTEGER_CSTs when processing_template_decl.
        corresponding INTEGER_CSTs when processing_template_decl.
        * pt.c (tsubst_enum): Tweak accordingly.
        * pt.c (tsubst_enum): Tweak accordingly.
1998-09-03  Benjamin Kosnik  
1998-09-03  Benjamin Kosnik  
        * decl.c (pushdecl_class_level): Add warning here.
        * decl.c (pushdecl_class_level): Add warning here.
        (pushdecl): Tweak.
        (pushdecl): Tweak.
1998-09-02  Jason Merrill  
1998-09-02  Jason Merrill  
        * cvt.c (convert_pointer_to_real): Tidy.
        * cvt.c (convert_pointer_to_real): Tidy.
        * search.c (get_base_distance_recursive): Simplify.
        * search.c (get_base_distance_recursive): Simplify.
        (get_base_distance): Likewise.
        (get_base_distance): Likewise.
        * pt.c (unify): Only special-case INTEGER_TYPE if it uses template
        * pt.c (unify): Only special-case INTEGER_TYPE if it uses template
        parms.
        parms.
Wed Sep 02 09:25:29 1998  Nick Clifton  
Wed Sep 02 09:25:29 1998  Nick Clifton  
        * lex.c (check_newline):  Call HANDLE_PRAGMA before
        * lex.c (check_newline):  Call HANDLE_PRAGMA before
        HANDLE_SYSV_PRAGMA if both are defined.  Generate warning messages
        HANDLE_SYSV_PRAGMA if both are defined.  Generate warning messages
        if unknown pragmas are encountered.
        if unknown pragmas are encountered.
        (handle_sysv_pragma): Interpret return code from
        (handle_sysv_pragma): Interpret return code from
        handle_pragma_token ().  Return success/failure indication rather
        handle_pragma_token ().  Return success/failure indication rather
        than next unprocessed character.
        than next unprocessed character.
        (pragma_getc): New function: retrieves characters from the
        (pragma_getc): New function: retrieves characters from the
        input stream.  Defined when HANDLE_PRAGMA is defined.
        input stream.  Defined when HANDLE_PRAGMA is defined.
        (pragma_ungetc): New function: replaces characters back into the
        (pragma_ungetc): New function: replaces characters back into the
        input stream.  Defined when HANDLE_PRAGMA is defined.
        input stream.  Defined when HANDLE_PRAGMA is defined.
1998-09-01  Jason Merrill  
1998-09-01  Jason Merrill  
        * decl2.c (output_vtable_inherit): Use %cDIGIT in the operands.
        * decl2.c (output_vtable_inherit): Use %cDIGIT in the operands.
        * class.c (build_vtable_entry_ref): Likewise.
        * class.c (build_vtable_entry_ref): Likewise.
1998-09-01  Mark Mitchell  
1998-09-01  Mark Mitchell  
        * cp-tree.h (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION): New macro.
        * cp-tree.h (DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION): New macro.
        * decl2.c (import_export_decl): Likewise.
        * decl2.c (import_export_decl): Likewise.
        * pt.c (instantiate_decl): Use it.
        * pt.c (instantiate_decl): Use it.
1998-09-01  Jason Merrill  
1998-09-01  Jason Merrill  
        * decl.c (lookup_name_real): Also do implicit typename thing for
        * decl.c (lookup_name_real): Also do implicit typename thing for
        artificial TYPE_DECLs.
        artificial TYPE_DECLs.
        * search.c (lookup_field): Likewise.
        * search.c (lookup_field): Likewise.
        (lookup_fnfields, lookup_field): Adjust for implicit typename kludge.
        (lookup_fnfields, lookup_field): Adjust for implicit typename kludge.
        * semantics.c (begin_constructor_declarator): Use enter_scope_of.
        * semantics.c (begin_constructor_declarator): Use enter_scope_of.
        (enter_scope_of): Extract type from implicit typename.
        (enter_scope_of): Extract type from implicit typename.
        (begin_class_definition): Likewise.
        (begin_class_definition): Likewise.
        * lex.c (identifier_type): Handle implicit typename when checking
        * lex.c (identifier_type): Handle implicit typename when checking
        for SELFNAME.
        for SELFNAME.
        * cp-tree.h: Declare flag_strict_prototype.
        * cp-tree.h: Declare flag_strict_prototype.
        * lex.c (do_scoped_id, do_identifier): Don't implicitly_declare if
        * lex.c (do_scoped_id, do_identifier): Don't implicitly_declare if
        -fstrict-prototype.
        -fstrict-prototype.
        * decl.c (init_decl_processing): If -f{no,-}strict-prototype wasn't
        * decl.c (init_decl_processing): If -f{no,-}strict-prototype wasn't
        specified, set it to the value of pedantic.
        specified, set it to the value of pedantic.
1998-09-01  Mark Mitchell  
1998-09-01  Mark Mitchell  
        * decl2.c (arg_assoc): Handle template-id expressions as arguments.
        * decl2.c (arg_assoc): Handle template-id expressions as arguments.
1998-08-31  Mark Mitchell  
1998-08-31  Mark Mitchell  
        * decl.c (finish_enum): Handle member enums of classes declared in
        * decl.c (finish_enum): Handle member enums of classes declared in
        template functions.
        template functions.
        * decl2.c (grok_x_components): Strip attributes before calling
        * decl2.c (grok_x_components): Strip attributes before calling
        groktypename.
        groktypename.
1998-08-31  Jason Merrill  
1998-08-31  Jason Merrill  
        * cp-tree.h, decl2.c: Remove support for -fall-virtual,
        * cp-tree.h, decl2.c: Remove support for -fall-virtual,
        -fenum-int-equivalence and -fno-nonnull-objects.
        -fenum-int-equivalence and -fno-nonnull-objects.
        * class.c (check_for_override): Remove support for -fall-virtual.
        * class.c (check_for_override): Remove support for -fall-virtual.
        (finish_struct_1): Likewise.
        (finish_struct_1): Likewise.
        * call.c (build_new_op): Remove support for -fenum-int-equivalence.
        * call.c (build_new_op): Remove support for -fenum-int-equivalence.
        * typeck.c (build_binary_op_nodefault): Likewise.
        * typeck.c (build_binary_op_nodefault): Likewise.
        * cvt.c (ocp_convert): Likewise.
        * cvt.c (ocp_convert): Likewise.
        * call.c (build_vfield_ref): Remove support for -fno-nonnull-objects.
        * call.c (build_vfield_ref): Remove support for -fno-nonnull-objects.
        * class.c (build_vbase_path): Likewise.
        * class.c (build_vbase_path): Likewise.
Sun Aug 30 22:16:31 1998  H.J. Lu  (hjl@gnu.org)
Sun Aug 30 22:16:31 1998  H.J. Lu  (hjl@gnu.org)
        * Makefile.in (INTERFACE): New, set to 1.
        * Makefile.in (INTERFACE): New, set to 1.
1998-08-30  Mark Mitchell  
1998-08-30  Mark Mitchell  
        * error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when
        * error.c (dump_decl): Use CP_DECL_CONTEXT, not DECL_CONTEXT, when
        comparing with global_namespace.
        comparing with global_namespace.
        (dump_aggr_type): Likewise.
        (dump_aggr_type): Likewise.
        * decl.c (grokfndecl): Issue error on declaration of friend
        * decl.c (grokfndecl): Issue error on declaration of friend
        templates with explicit template arguments.
        templates with explicit template arguments.
        * pt.c (convert_template_argument): New function, split out
        * pt.c (convert_template_argument): New function, split out
        from...
        from...
        (coerce_template_parms): Here.
        (coerce_template_parms): Here.
        (tsubst): Attempt better error-recovery.
        (tsubst): Attempt better error-recovery.
1998-08-28  Benjamin Kosnik  
1998-08-28  Benjamin Kosnik  
        * pt.c (decl_template_parm_p): Add checks for
        * pt.c (decl_template_parm_p): Add checks for
        TEMPLATE_TEMPLATE_PARM.
        TEMPLATE_TEMPLATE_PARM.
1998-08-28  Mark Mitchell  
1998-08-28  Mark Mitchell  
        * lex.c (do_identifier): Fix thinko in previous change.
        * lex.c (do_identifier): Fix thinko in previous change.
1998-08-28  Jason Merrill  
1998-08-28  Jason Merrill  
        * search.c (dfs_search, binfo_for_vtable, dfs_bfv_helper): New fns.
        * search.c (dfs_search, binfo_for_vtable, dfs_bfv_helper): New fns.
        * decl2.c (output_vtable_inherit): Call binfo_for_vtable.
        * decl2.c (output_vtable_inherit): Call binfo_for_vtable.
1998-08-28  Richard Henderson  
1998-08-28  Richard Henderson  
        Add support for discarding unused virtual functions.
        Add support for discarding unused virtual functions.
        * lang-options.h: Add -fvtable-gc.
        * lang-options.h: Add -fvtable-gc.
        * cp-tree.h: Add flag_vtable_gc.
        * cp-tree.h: Add flag_vtable_gc.
        * decl2.c (output_vtable_inherit): New fn.
        * decl2.c (output_vtable_inherit): New fn.
        (finish_vtable_vardecl): Call it.
        (finish_vtable_vardecl): Call it.
        * class.c (build_vtable_entry_ref): New fn.
        * class.c (build_vtable_entry_ref): New fn.
        (build_vtbl_ref): Call it.
        (build_vtbl_ref): Call it.
1998-08-28  Mark Mitchell  
1998-08-28  Mark Mitchell  
        * cp-tree.h (build_enumerator): Take the enumeration type as a
        * cp-tree.h (build_enumerator): Take the enumeration type as a
        parameter.
        parameter.
        * decl.c (finish_enum): Don't set the TREE_TYPE for the
        * decl.c (finish_enum): Don't set the TREE_TYPE for the
        enumeration constant values if we're processing_template_decls.
        enumeration constant values if we're processing_template_decls.
        Don't set the type for the CONST_DECLs either; that's done in
        Don't set the type for the CONST_DECLs either; that's done in
        build_enumerator.
        build_enumerator.
        (build_enumerator): Take the enumeration type as a
        (build_enumerator): Take the enumeration type as a
        parameter.
        parameter.
        * lex.c (do_identifier): Don't resolve enumeration constants while
        * lex.c (do_identifier): Don't resolve enumeration constants while
        processing template declarations, even if they happen to be
        processing template declarations, even if they happen to be
        TEMPLATE_PARM_INDEXs.
        TEMPLATE_PARM_INDEXs.
        * parse.y (current_enum_type): New variable.
        * parse.y (current_enum_type): New variable.
        (primary): Don't allow statement-expression in local classes just
        (primary): Don't allow statement-expression in local classes just
        as we don't in global classes.
        as we don't in global classes.
        (structsp): Use current_enum_type.
        (structsp): Use current_enum_type.
        (enum_list): Likewise.
        (enum_list): Likewise.
        * pt.c (tsubst_enum): Don't check for NOP_EXPRs introduced by
        * pt.c (tsubst_enum): Don't check for NOP_EXPRs introduced by
        finish_enum; they no longer occur.
        finish_enum; they no longer occur.
        * cp-tree.h (finish_base_specifier): New function.
        * cp-tree.h (finish_base_specifier): New function.
        * parse.y (base_class): Use it.
        * parse.y (base_class): Use it.
        * semantics.c (finish_base_specifier): Define it.
        * semantics.c (finish_base_specifier): Define it.
        * parse.y (structsp): Warn on use of typename outside of template
        * parse.y (structsp): Warn on use of typename outside of template
        declarations.
        declarations.
1998-08-27  Jason Merrill  
1998-08-27  Jason Merrill  
        * lex.c (handle_cp_pragma): Remove #pragma vtable.
        * lex.c (handle_cp_pragma): Remove #pragma vtable.
        * lang-options.h: Remove +e options.
        * lang-options.h: Remove +e options.
        * decl2.c (lang_decode_option): Likewise.
        * decl2.c (lang_decode_option): Likewise.
        (import_export_vtable): Don't check write_virtuals.
        (import_export_vtable): Don't check write_virtuals.
        (finish_vtable_vardecl, finish_file): Likewise.
        (finish_vtable_vardecl, finish_file): Likewise.
        * search.c (dfs_debug_mark): Likewise.
        * search.c (dfs_debug_mark): Likewise.
        * semantics.c (begin_class_definition): Likewise.
        * semantics.c (begin_class_definition): Likewise.
        * class.c (build_vtable, finish_vtbls, finish_struct_1): Likewise.
        * class.c (build_vtable, finish_vtbls, finish_struct_1): Likewise.
        * call.c (build_over_call): Check flag_elide_constructors.
        * call.c (build_over_call): Check flag_elide_constructors.
        * decl2.c: flag_elide_constructors defaults to 1.
        * decl2.c: flag_elide_constructors defaults to 1.
        * typeck.c (convert_arguments): Remove return_loc parm.
        * typeck.c (convert_arguments): Remove return_loc parm.
        (build_function_call_real): Adjust.
        (build_function_call_real): Adjust.
        * search.c: Tear out all mi_matrix and memoize code.
        * search.c: Tear out all mi_matrix and memoize code.
        (lookup_field, lookup_fnfields): Use scratch_tree_cons.
        (lookup_field, lookup_fnfields): Use scratch_tree_cons.
        * lang-options.h: Remove documentation for -fhandle-exceptions,
        * lang-options.h: Remove documentation for -fhandle-exceptions,
        -fmemoize-lookups and -fsave-memoized.
        -fmemoize-lookups and -fsave-memoized.
        * cp-tree.h: Lose mi_matrix and memoize support.
        * cp-tree.h: Lose mi_matrix and memoize support.
        * decl2.c: Ignore -fmemoize-lookups and -fsave-memoized.
        * decl2.c: Ignore -fmemoize-lookups and -fsave-memoized.
        * class.c: Lose struct class_level.
        * class.c: Lose struct class_level.
        (pushclass, popclass): Lose memoize support.
        (pushclass, popclass): Lose memoize support.
        * init.c (build_offset_ref): Likewise.
        * init.c (build_offset_ref): Likewise.
        Never change BINFO_INHERITANCE_CHAIN.
        Never change BINFO_INHERITANCE_CHAIN.
        * init.c (emit_base_init): Change modification of
        * init.c (emit_base_init): Change modification of
        BINFO_INHERITANCE_CHAIN to an assert.
        BINFO_INHERITANCE_CHAIN to an assert.
        * search.c (get_base_distance_recursive): Likewise.
        * search.c (get_base_distance_recursive): Likewise.
        (get_base_distance): Likewise.
        (get_base_distance): Likewise.
        (lookup_member): Likewise.
        (lookup_member): Likewise.
        (convert_pointer_to_single_level): Likewise.
        (convert_pointer_to_single_level): Likewise.
        (lookup_field): Likewise.  Lose setting TREE_VIA_* on TREE_LISTs.
        (lookup_field): Likewise.  Lose setting TREE_VIA_* on TREE_LISTs.
        (lookup_fnfields): Likewise.
        (lookup_fnfields): Likewise.
        * tree.c (propagate_binfo_offsets): Don't call unshare_base_binfos.
        * tree.c (propagate_binfo_offsets): Don't call unshare_base_binfos.
        (unshare_base_binfos): Don't call propagate_binfo_offsets.
        (unshare_base_binfos): Don't call propagate_binfo_offsets.
        (layout_basetypes): Call propagate_binfo_offsets instead of
        (layout_basetypes): Call propagate_binfo_offsets instead of
        unshare_base_binfos.
        unshare_base_binfos.
        * decl.c (xref_basetypes): Call unshare_base_binfos.
        * decl.c (xref_basetypes): Call unshare_base_binfos.
        * pt.c (instantiate_class_template): Likewise.
        * pt.c (instantiate_class_template): Likewise.
        * tree.c (reverse_path): Remove 'copy' parm; always make a
        * tree.c (reverse_path): Remove 'copy' parm; always make a
        temporary copy.
        temporary copy.
        * class.c (build_vbase_path): Just call it.
        * class.c (build_vbase_path): Just call it.
        * search.c (compute_access): Likewise.  Don't re-reverse.
        * search.c (compute_access): Likewise.  Don't re-reverse.
1998-08-27  Mark Mitchell  
1998-08-27  Mark Mitchell  
        * class.c (build_vbase_path): Use reverse_path.
        * class.c (build_vbase_path): Use reverse_path.
        (finish_base_struct): Move warnings for inaccessible bases to
        (finish_base_struct): Move warnings for inaccessible bases to
        layout_basetypes.
        layout_basetypes.
        (modify_one_vtable): Remove check of TREE_USED (binfo).
        (modify_one_vtable): Remove check of TREE_USED (binfo).
        (fixup_vtable_deltas1): Likewise.
        (fixup_vtable_deltas1): Likewise.
        * cp-tree.h (BINFO_INHERITANCE_CHAIN): Document here.
        * cp-tree.h (BINFO_INHERITANCE_CHAIN): Document here.
        (xref_tag): Remove binfos parameter.
        (xref_tag): Remove binfos parameter.
        (make_binfo): Remove chain parameter.
        (make_binfo): Remove chain parameter.
        (reverse_path): Add copy parameter.
        (reverse_path): Add copy parameter.
        * decl.c (init_decl_processing): Change calls to xref_tag.
        * decl.c (init_decl_processing): Change calls to xref_tag.
        (xref_tag): Remove binfos parameter.
        (xref_tag): Remove binfos parameter.
        (xref_basetypes): Change calls to make_binfo.
        (xref_basetypes): Change calls to make_binfo.
        * decl2.c (grok_x_components): Change calls to xref_tag.
        * decl2.c (grok_x_components): Change calls to xref_tag.
        (handle_class_head): Likewise.
        (handle_class_head): Likewise.
        * friend.c (do_friend): Likewise.
        * friend.c (do_friend): Likewise.
        * lex.c (make_lang_type): Change calls to make_binfo.
        * lex.c (make_lang_type): Change calls to make_binfo.
        * parse.y (structsp): Change calls to xref_tag.
        * parse.y (structsp): Change calls to xref_tag.
        (named_complex_class_head_sans_basetype): Likewise.
        (named_complex_class_head_sans_basetype): Likewise.
        (named_class_head): Likewise.
        (named_class_head): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        * rtti.c (init_rtti_processing): Likewise.
        * search.c (compute_access): Change calls to reverse_path.
        * search.c (compute_access): Change calls to reverse_path.
        (dfs_get_vbase_types): Change calls to make_binfo.
        (dfs_get_vbase_types): Change calls to make_binfo.
        (get_vbase_types): Remove dead code.
        (get_vbase_types): Remove dead code.
        * tree.c (unshare_base_binfos): Change calls to make_binfo.
        * tree.c (unshare_base_binfos): Change calls to make_binfo.
        (layout_basetypes): Warn here about inaccessible bases.
        (layout_basetypes): Warn here about inaccessible bases.
        (make_binfo): Remove chain parameter.
        (make_binfo): Remove chain parameter.
        (reverse_path): Add copy parameter.
        (reverse_path): Add copy parameter.
1998-08-27  Jason Merrill  
1998-08-27  Jason Merrill  
        * class.c: #if 0 complete_type_p.
        * class.c: #if 0 complete_type_p.
        * init.c (build_java_class_ref, build_new_1): Remove unused locals.
        * init.c (build_java_class_ref, build_new_1): Remove unused locals.
        * method.c (process_overload_item): Likewise.
        * method.c (process_overload_item): Likewise.
        * typeck.c (comp_target_types): Likewise.
        * typeck.c (comp_target_types): Likewise.
        Stop sharing binfos for indirect virtual bases.
        Stop sharing binfos for indirect virtual bases.
        * tree.c (propagate_binfo_offsets): Unshare vbases, too.
        * tree.c (propagate_binfo_offsets): Unshare vbases, too.
        (layout_basetypes): Likewise.
        (layout_basetypes): Likewise.
        (unshare_base_binfos): Copy vbases, too.
        (unshare_base_binfos): Copy vbases, too.
        * cp-tree.h (BINFO_VIA_PUBLIC, BINFO_BASEINIT_MARKED,
        * cp-tree.h (BINFO_VIA_PUBLIC, BINFO_BASEINIT_MARKED,
        BINFO_VBASE_INIT_MARKED): Remove obsolete macros.
        BINFO_VBASE_INIT_MARKED): Remove obsolete macros.
        (BINFO_PUSHDECLS_MARKED, SET_BINFO_PUSHDECLS_MARKED,
        (BINFO_PUSHDECLS_MARKED, SET_BINFO_PUSHDECLS_MARKED,
        CLEAR_BINFO_PUSHDECLS_MARKED): New macros.
        CLEAR_BINFO_PUSHDECLS_MARKED): New macros.
        * search.c (lookup_field, lookup_fnfields, lookup_member): Remove
        * search.c (lookup_field, lookup_fnfields, lookup_member): Remove
        reference to BINFO_VIA_PUBLIC.
        reference to BINFO_VIA_PUBLIC.
        (marked_pushdecls_p, unmarked_pushdecls_p): New fns.
        (marked_pushdecls_p, unmarked_pushdecls_p): New fns.
        (push_class_decls): Use them.
        (push_class_decls): Use them.
        (dfs_pushdecls): Use SET_BINFO_PUSHDECLS_MARKED.
        (dfs_pushdecls): Use SET_BINFO_PUSHDECLS_MARKED.
        (dfs_compress_decls): Use CLEAR_BINFO_PUSHDECLS_MARKED.
        (dfs_compress_decls): Use CLEAR_BINFO_PUSHDECLS_MARKED.
1998-08-27  Mark Mitchell  
1998-08-27  Mark Mitchell  
        * decl.c (build_enumerator): Set DECL_CONTEXT for the
        * decl.c (build_enumerator): Set DECL_CONTEXT for the
        CONST_DECLs.
        CONST_DECLs.
1998-08-26  Mark Mitchell  
1998-08-26  Mark Mitchell  
        * cp-tree.h (finish_enum): Change prototype.
        * cp-tree.h (finish_enum): Change prototype.
        * decl.c (finish_enum): Use TYPE_VALUES, rather than taking a
        * decl.c (finish_enum): Use TYPE_VALUES, rather than taking a
        VALUES parameter.  Don't try to compute mins/maxs if
        VALUES parameter.  Don't try to compute mins/maxs if
        processing_template_decl.
        processing_template_decl.
        * parse.y (structsp): Use new calling sequence for finish_enum.
        * parse.y (structsp): Use new calling sequence for finish_enum.
        * pt.c (tsubst_enum): Likewise.  Take the new type as input.
        * pt.c (tsubst_enum): Likewise.  Take the new type as input.
        (lookup_template_class): Remove unused variables.  Tweak.
        (lookup_template_class): Remove unused variables.  Tweak.
        Register enums on instantiation list before substituting
        Register enums on instantiation list before substituting
        enumeration constants.
        enumeration constants.
        (tsubst_decl): Remove unused variables.
        (tsubst_decl): Remove unused variables.
        (regenerate_decl_from_template): Likewise.
        (regenerate_decl_from_template): Likewise.
        * decl.c (duplicate_decls): Don't obliterate the
        * decl.c (duplicate_decls): Don't obliterate the
        DECL_TEMPLATE_INFO for a template if we're not replacing it with
        DECL_TEMPLATE_INFO for a template if we're not replacing it with
        anything.
        anything.
        * lex.c (do_identifier): Fix typo in comment.
        * lex.c (do_identifier): Fix typo in comment.
Wed Aug 26 10:54:51 1998  Kaveh R. Ghazi  
Wed Aug 26 10:54:51 1998  Kaveh R. Ghazi  
        * errfn.c: Remove stdarg.h/varargs.h.
        * errfn.c: Remove stdarg.h/varargs.h.
        * tree.c: Likewise.
        * tree.c: Likewise.
1998-08-25  Brendan Kehoe  
1998-08-25  Brendan Kehoe  
        * pt.c (tsubst_copy): Only do typename overloading on an
        * pt.c (tsubst_copy): Only do typename overloading on an
        IDENTIFIER_NODE that happens to look like a typename if it actually
        IDENTIFIER_NODE that happens to look like a typename if it actually
        has a type for us to use.
        has a type for us to use.
1998-08-25  Jason Merrill  
1998-08-25  Jason Merrill  
        * typeck.c (comp_cv_target_types): Split out...
        * typeck.c (comp_cv_target_types): Split out...
        (comp_target_types): From here.  Don't allow cv-qual changes under
        (comp_target_types): From here.  Don't allow cv-qual changes under
        a pointer if nptrs == 0.  Fix OFFSET_TYPE handling.
        a pointer if nptrs == 0.  Fix OFFSET_TYPE handling.
        (build_ptrmemfunc): Pass 1 to nptrs.
        (build_ptrmemfunc): Pass 1 to nptrs.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
1998-08-25  Mark Mitchell  
1998-08-25  Mark Mitchell  
        * search.c (dependent_base_p): Don't compare a binfo to
        * search.c (dependent_base_p): Don't compare a binfo to
        current_class_type; use the TREE_TYPE of the binfo instead.
        current_class_type; use the TREE_TYPE of the binfo instead.
        * cp-tree.h (CLASS_TYPE_P): Revise definition.
        * cp-tree.h (CLASS_TYPE_P): Revise definition.
1998-08-25  Jason Merrill  
1998-08-25  Jason Merrill  
        * decl.c (duplicate_decls): Don't complain about different
        * decl.c (duplicate_decls): Don't complain about different
        exceptions from an internal decl even if pedantic.
        exceptions from an internal decl even if pedantic.
        * typeck.c (convert_for_assignment): Converting from pm of vbase
        * typeck.c (convert_for_assignment): Converting from pm of vbase
        to derived is an error, not a sorry.
        to derived is an error, not a sorry.
        * call.c (build_over_call): Use convert_pointer_to_real for 'this'.
        * call.c (build_over_call): Use convert_pointer_to_real for 'this'.
        * class.c (fixed_type_or_null): Rename from
        * class.c (fixed_type_or_null): Rename from
        resolves_to_fixed_type_p.  Return the dynamic type of the
        resolves_to_fixed_type_p.  Return the dynamic type of the
        expression, if fixed, or null.
        expression, if fixed, or null.
        (resolves_to_fixed_type_p): Use it.  Return 0 if the dynamic type
        (resolves_to_fixed_type_p): Use it.  Return 0 if the dynamic type
        does not match the static type.
        does not match the static type.
        (build_vbase_path): Rename 'alias_this' to 'nonnull'.  Use
        (build_vbase_path): Rename 'alias_this' to 'nonnull'.  Use
        resolves_to_fixed_type_p again.
        resolves_to_fixed_type_p again.
1998-08-24  Mark Mitchell  
1998-08-24  Mark Mitchell  
        * pt.c (tsubst_decl): Move special case code for dealing with
        * pt.c (tsubst_decl): Move special case code for dealing with
        tricky friend templates here from ...
        tricky friend templates here from ...
        (regenerate_decl_from_template): Here.
        (regenerate_decl_from_template): Here.
1998-08-24  Jason Merrill  
1998-08-24  Jason Merrill  
        * decl.c (start_decl): Remove redundant linkage check.
        * decl.c (start_decl): Remove redundant linkage check.
1998-08-24  Gavin Romig-Koch  
1998-08-24  Gavin Romig-Koch  
        * typeck.c (c_expand_return): Handle the case that valtype
        * typeck.c (c_expand_return): Handle the case that valtype
        is wider than the functions return type.
        is wider than the functions return type.
1998-08-24  Mark Mitchell  
1998-08-24  Mark Mitchell  
        * cp-tree.h (CLASS_TYPE_P): New macro.
        * cp-tree.h (CLASS_TYPE_P): New macro.
        * decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE.
        * decl.c (grokdeclarator): Use it instead of IS_AGGR_TYPE.
        * pt.c (process_template_parm): Undo previous change.
        * pt.c (process_template_parm): Undo previous change.
1998-08-24  Benjamin Kosnik  
1998-08-24  Benjamin Kosnik  
        * cp-tree.h: Declare.
        * cp-tree.h: Declare.
        * pt.c (decl_template_parm_p): New function.
        * pt.c (decl_template_parm_p): New function.
        * decl.c (pushdecl): Check decls for redeclaring template parms.
        * decl.c (pushdecl): Check decls for redeclaring template parms.
        (xref_tag): Make redeclaration an error, print decl.
        (xref_tag): Make redeclaration an error, print decl.
        * decl2.c (grokfield): Check field_decls for redeclaration as well.
        * decl2.c (grokfield): Check field_decls for redeclaration as well.
1998-08-24  Jason Merrill  
1998-08-24  Jason Merrill  
        * parse.y (primary): Fix up the type of string constants.
        * parse.y (primary): Fix up the type of string constants.
1998-08-24  Mark Mitchell  
1998-08-24  Mark Mitchell  
        * typeck.c (convert_for_initialization): Move check for odd uses
        * typeck.c (convert_for_initialization): Move check for odd uses
        of NULL to avoid duplicate warnings.
        of NULL to avoid duplicate warnings.
1998-08-24  Jason Merrill  
1998-08-24  Jason Merrill  
        * tree.c (lvalue_type): Fix for arrays.
        * tree.c (lvalue_type): Fix for arrays.
        * typeck.c (string_conv_p): New fn.
        * typeck.c (string_conv_p): New fn.
        (convert_for_assignment): Use it.
        (convert_for_assignment): Use it.
        (build_unary_op): Use lvalue_type.
        (build_unary_op): Use lvalue_type.
        * call.c (standard_conversion, convert_like): Use string_conv_p.
        * call.c (standard_conversion, convert_like): Use string_conv_p.
        (add_function_candidate): Use lvalue_type.
        (add_function_candidate): Use lvalue_type.
        * cvt.c (convert_to_reference): Likewise.
        * cvt.c (convert_to_reference): Likewise.
        * decl2.c (lang_decode_option): Ignore -traditional.
        * decl2.c (lang_decode_option): Ignore -traditional.
        * decl.c (init_decl_processing): flag_writable_strings inhibits
        * decl.c (init_decl_processing): flag_writable_strings inhibits
        flag_const_strings.
        flag_const_strings.
1998-08-24  Andrew MacLeod  
1998-08-24  Andrew MacLeod  
        * lang-options.h (lang_options): Add fconst-strings to the list
        * lang-options.h (lang_options): Add fconst-strings to the list
        of valid options.
        of valid options.
        * decl2.c (lang_f_options, lang_decode_option): Likewise.
        * decl2.c (lang_f_options, lang_decode_option): Likewise.
1998-08-24  Nathan Sidwell  
1998-08-24  Nathan Sidwell  
        * lex.c (real_yylex): Don't warn about long long constants if
        * lex.c (real_yylex): Don't warn about long long constants if
        we're allowing long long.
        we're allowing long long.
1998-08-24  Martin von Löwis  
1998-08-24  Martin von Löwis  
        * decl.c (pushdecl): Use IDENTIFIER_NAMESPACE_VALUE instead of
        * decl.c (pushdecl): Use IDENTIFIER_NAMESPACE_VALUE instead of
        accessing bindings directly.
        accessing bindings directly.
        * search.c (my_tree_cons): Reimplement.
        * search.c (my_tree_cons): Reimplement.
        * lang-specs.h: Remove __HONOR_STD.
        * lang-specs.h: Remove __HONOR_STD.
        * inc/exception, inc/new, inc/new.h, inc/typeinfo: Likewise.
        * inc/exception, inc/new, inc/new.h, inc/typeinfo: Likewise.
1998-08-23  Mark Mitchell  
1998-08-23  Mark Mitchell  
        * decl.c (grokdeclarator): Complain about in-class initialization
        * decl.c (grokdeclarator): Complain about in-class initialization
        of aggregates and/or references.
        of aggregates and/or references.
        * pt.c (process_template_parm): Clear IS_AGGR_TYPE for
        * pt.c (process_template_parm): Clear IS_AGGR_TYPE for
        TEMPLATE_TYPE_PARMs.
        TEMPLATE_TYPE_PARMs.
        * decl2.c (grok_array_decl): Add comment.
        * decl2.c (grok_array_decl): Add comment.
        (mark_used): Don't instantiate an explicit instantiation.
        (mark_used): Don't instantiate an explicit instantiation.
        * friend.c (make_friend_class): Remove bogus comment.  Fix check
        * friend.c (make_friend_class): Remove bogus comment.  Fix check
        for partial specializations.
        for partial specializations.
        * pt.c (check_explicit_specialization): Don't
        * pt.c (check_explicit_specialization): Don't
        SET_DECL_EXPLICIT_INSTANTIATION here.
        SET_DECL_EXPLICIT_INSTANTIATION here.
        (mark_decl_instantiated): Or here.
        (mark_decl_instantiated): Or here.
        (do_decl_instantiation): Do it here, instead.  Add checks for
        (do_decl_instantiation): Do it here, instead.  Add checks for
        duplicate explicit instantiations, etc.  Tidy.
        duplicate explicit instantiations, etc.  Tidy.
        (do_type_instantiation): Likewise.
        (do_type_instantiation): Likewise.
        (instantiate_decl): Improve comments.  Complain about explicit
        (instantiate_decl): Improve comments.  Complain about explicit
        instantiations where no definition is available.
        instantiations where no definition is available.
        * cp-tree.h (ansi_null_node): Remove.
        * cp-tree.h (ansi_null_node): Remove.
        * call.c (build_over_call): Warn about converting NULL to an
        * call.c (build_over_call): Warn about converting NULL to an
        arithmetic type.
        arithmetic type.
        * cvt.c (build_expr_type_conversion): Likewise.  Use
        * cvt.c (build_expr_type_conversion): Likewise.  Use
        null_ptr_cst_p instead of expanding it inline.
        null_ptr_cst_p instead of expanding it inline.
        * decl.c (ansi_null_node): Remove.
        * decl.c (ansi_null_node): Remove.
        (init_decl_processing): Make null_node always have integral type.
        (init_decl_processing): Make null_node always have integral type.
        * except.c (build_throw): Warn about converting NULL to an
        * except.c (build_throw): Warn about converting NULL to an
        arithmetic type.
        arithmetic type.
        * lex.c (init_parse): Remove handling of ansi_null_node.
        * lex.c (init_parse): Remove handling of ansi_null_node.
        * pt.c (type_unification_real): Don't convert NULL to void* type.
        * pt.c (type_unification_real): Don't convert NULL to void* type.
        * typeck.c (build_binary_op_nodefault): Fix NULL warnings.
        * typeck.c (build_binary_op_nodefault): Fix NULL warnings.
        (convert_for_assignment): Warn about converting NULL to an
        (convert_for_assignment): Warn about converting NULL to an
        arithmetic type.
        arithmetic type.
        (convert_for_initialization): Likewise.
        (convert_for_initialization): Likewise.
1998-08-20  Jason Merrill  
1998-08-20  Jason Merrill  
        * tree.c (search_tree, no_linkage_helper, no_linkage_check): New fn.
        * tree.c (search_tree, no_linkage_helper, no_linkage_check): New fn.
        * pt.c (coerce_template_parms): Use no_linkage_check.
        * pt.c (coerce_template_parms): Use no_linkage_check.
        * decl.c (grokvardecl): Likewise.
        * decl.c (grokvardecl): Likewise.
        (grokfndecl): Likewise.  Members of anonymous types have no linkage.
        (grokfndecl): Likewise.  Members of anonymous types have no linkage.
        * method.c (process_overload_item): Remove useless code.
        * method.c (process_overload_item): Remove useless code.
1998-08-20  Per Bothner  
1998-08-20  Per Bothner  
        Handle new'ing of Java classes.
        Handle new'ing of Java classes.
        * init.c (build_class_classref):  New function.
        * init.c (build_class_classref):  New function.
        (build_new_1):  If type is TYPE_FOR_JAVA:  Call _Jv_AllocObject;
        (build_new_1):  If type is TYPE_FOR_JAVA:  Call _Jv_AllocObject;
        constructor does not return this;  don't need to exception-protect.
        constructor does not return this;  don't need to exception-protect.
        * pt.c (lookup_template_class):  Copy TYPE_FOR_JAVA flag.
        * pt.c (lookup_template_class):  Copy TYPE_FOR_JAVA flag.
        * decl2.c (acceptable_java_type):  Handle template-derived types.
        * decl2.c (acceptable_java_type):  Handle template-derived types.
1998-08-20  Per Bothner  
1998-08-20  Per Bothner  
        * decl2.c (import_export_vtable):  Suppress vtables for Java classes.
        * decl2.c (import_export_vtable):  Suppress vtables for Java classes.
1998-08-20  Mark Mitchell  
1998-08-20  Mark Mitchell  
        * decl.c (duplicate_decls): Always merge the old and new patterns
        * decl.c (duplicate_decls): Always merge the old and new patterns
        for templates, regardless of whether or not the new one has
        for templates, regardless of whether or not the new one has
        DECL_INITIAL.  Don't throw away specializations.  Merge
        DECL_INITIAL.  Don't throw away specializations.  Merge
        DECL_SAVED_TREE.
        DECL_SAVED_TREE.
        * pt.c (tsubst_decl): Use the right pattern when calculating the
        * pt.c (tsubst_decl): Use the right pattern when calculating the
        complete args for a new template instance.
        complete args for a new template instance.
        (do_decl_instantiation): Fix typo in comment.
        (do_decl_instantiation): Fix typo in comment.
        (regenerate_decl_from_template): Deal with tricky friend template
        (regenerate_decl_from_template): Deal with tricky friend template
        case.
        case.
        (instantiate_decl): Likewise.
        (instantiate_decl): Likewise.
Thu Aug 20 09:09:45 1998  Jeffrey A Law  (law@cygnus.com)
Thu Aug 20 09:09:45 1998  Jeffrey A Law  (law@cygnus.com)
        * init.c (build_builtin_delete_call): Add missing assemble_external
        * init.c (build_builtin_delete_call): Add missing assemble_external
        call.
        call.
1998-08-20  Jason Merrill  
1998-08-20  Jason Merrill  
        * parse.y (notype_unqualified_id): Also accept ~A.
        * parse.y (notype_unqualified_id): Also accept ~A.
1998-08-19  Mark Mitchell  
1998-08-19  Mark Mitchell  
        * typeck.c (build_binary_op_nodefault): Warn on use of NULL in
        * typeck.c (build_binary_op_nodefault): Warn on use of NULL in
        arithmetic.
        arithmetic.
        * except.c (build_throw): Warn when NULL is thrown, even with
        * except.c (build_throw): Warn when NULL is thrown, even with
        -ansi.  Use ansi_null_node, rather than integer_zero_node, in the
        -ansi.  Use ansi_null_node, rather than integer_zero_node, in the
        thrown expression.
        thrown expression.
        * cp-tree.h (ansi_null_node): New variable.
        * cp-tree.h (ansi_null_node): New variable.
        * decl.c (ansi_null_node): New variable.
        * decl.c (ansi_null_node): New variable.
        (init_decl_processing): Initialize its type.
        (init_decl_processing): Initialize its type.
        * lex.c (init_parse): Initialize its value.  Use ansi_null_node
        * lex.c (init_parse): Initialize its value.  Use ansi_null_node
        for null_node in non-ANSI mode.
        for null_node in non-ANSI mode.
        * typeck.c (build_binary_op_nodefault): Use ansi_null_node in
        * typeck.c (build_binary_op_nodefault): Use ansi_null_node in
        place of null_node to avoid spurious errors.
        place of null_node to avoid spurious errors.
1998-08-17  Mark Mitchell  
1998-08-17  Mark Mitchell  
        * cp-tree.h (enter_scope_of): New function.
        * cp-tree.h (enter_scope_of): New function.
        * parse.y (complex_direct_notype_declarator): Use it.
        * parse.y (complex_direct_notype_declarator): Use it.
        * semantics.c (enter_scope_of): New function.
        * semantics.c (enter_scope_of): New function.
1998-08-17  Jason Merrill  
1998-08-17  Jason Merrill  
        * decl.c (grokparms): No, here.
        * decl.c (grokparms): No, here.
        * decl.c (grokdeclarator): Catch parm with pointer to array of
        * decl.c (grokdeclarator): Catch parm with pointer to array of
        unknown bound here...
        unknown bound here...
        * method.c (process_overload_item): ...not here.
        * method.c (process_overload_item): ...not here.
        * gxxint.texi: Remove obsolete documentation of overloading code.
        * gxxint.texi: Remove obsolete documentation of overloading code.
        * decl.c (finish_enum): Also set TYPE_SIZE_UNIT.
        * decl.c (finish_enum): Also set TYPE_SIZE_UNIT.
        * class.c (finish_struct_bits): Likewise.
        * class.c (finish_struct_bits): Likewise.
        * tree.c (lvalue_type): Fix for arrays.
        * tree.c (lvalue_type): Fix for arrays.
        * typeck.c (build_unary_op): Use lvalue_type.
        * typeck.c (build_unary_op): Use lvalue_type.
        * call.c (add_function_candidate): Likewise.
        * call.c (add_function_candidate): Likewise.
        * cvt.c (convert_to_reference): Likewise.
        * cvt.c (convert_to_reference): Likewise.
        * decl2.c (lang_decode_option): Ignore -traditional.
        * decl2.c (lang_decode_option): Ignore -traditional.
        * init.c (build_offset_ref): Don't mess with error_mark_node.
        * init.c (build_offset_ref): Don't mess with error_mark_node.
        * lex.c (do_scoped_id): Use cp_error.
        * lex.c (do_scoped_id): Use cp_error.
        * rtti.c (get_tinfo_fn): Don't mess with the context for now.
        * rtti.c (get_tinfo_fn): Don't mess with the context for now.
1998-08-17  Benjamin Kosnik  
1998-08-17  Benjamin Kosnik  
        * decl.c (grokdeclarator): Allow anonymous types to be cv-qualified.
        * decl.c (grokdeclarator): Allow anonymous types to be cv-qualified.
Mon Aug 17 10:40:18 1998  Jeffrey A Law  (law@cygnus.com)
Mon Aug 17 10:40:18 1998  Jeffrey A Law  (law@cygnus.com)
        * cp-tree.h (set_identifier_local_value): Provide prototype.
        * cp-tree.h (set_identifier_local_value): Provide prototype.
        * decl2.c (do_namespace_alias): Remove unused variables `binding'
        * decl2.c (do_namespace_alias): Remove unused variables `binding'
        and `old'.
        and `old'.
Fri Aug 14 16:42:27 1998  Nick Clifton  
Fri Aug 14 16:42:27 1998  Nick Clifton  
        * Makefile.in: Rename BBISON to BISON so that it can be properly
        * Makefile.in: Rename BBISON to BISON so that it can be properly
        inherited from the parent makefile.
        inherited from the parent makefile.
1998-08-13  Jason Merrill  
1998-08-13  Jason Merrill  
        * lang-options.h: Add -finit-priority.
        * lang-options.h: Add -finit-priority.
        * decl2.c: Likewise.  Check flag_init_priority instead of
        * decl2.c: Likewise.  Check flag_init_priority instead of
        USE_INIT_PRIORITY.
        USE_INIT_PRIORITY.
        * decl2.c (setup_initp): New fn.
        * decl2.c (setup_initp): New fn.
        (start_objects, finish_objects, do_ctors): Handle init_priority.
        (start_objects, finish_objects, do_ctors): Handle init_priority.
        (do_dtors, finish_file): Likewise.
        (do_dtors, finish_file): Likewise.
1998-08-13  Jason Merrill  
1998-08-13  Jason Merrill  
        * pt.c (tsubst_copy): Hush warning.
        * pt.c (tsubst_copy): Hush warning.
        * rtti.c (get_tinfo_fn): Also set DECL_IGNORED_P.
        * rtti.c (get_tinfo_fn): Also set DECL_IGNORED_P.
1998-08-12  Mark Mitchell  
1998-08-12  Mark Mitchell  
        * pt.c (print_template_context): Don't abort when instantiating a
        * pt.c (print_template_context): Don't abort when instantiating a
        synthesized method.
        synthesized method.
        * decl.c (grokdeclarator): Issue errors on namespace qualified
        * decl.c (grokdeclarator): Issue errors on namespace qualified
        declarators in parameter lists or in class scope.
        declarators in parameter lists or in class scope.
1998-08-09  Mark Mitchell  
1998-08-09  Mark Mitchell  
        * pt.c (check_explicit_specialization): Don't abort on bogus
        * pt.c (check_explicit_specialization): Don't abort on bogus
        explicit instantiations.
        explicit instantiations.
1998-08-07  Mark Mitchell  
1998-08-07  Mark Mitchell  
        * typeck.c (require_complete_type): Use complete_type_or_else.
        * typeck.c (require_complete_type): Use complete_type_or_else.
        (complete_type_or_else): Always return NULL_TREE on failure, as
        (complete_type_or_else): Always return NULL_TREE on failure, as
        documented.
        documented.
        * pt.c (tsubst_aggr_type): Prototype.
        * pt.c (tsubst_aggr_type): Prototype.
        (tsubst_decl): New function, split out from tsubst.  Set
        (tsubst_decl): New function, split out from tsubst.  Set
        input_filename and lineno as appropriate.
        input_filename and lineno as appropriate.
        (pop_tinst_level): Restore the file and line number saved in
        (pop_tinst_level): Restore the file and line number saved in
        push_tinst_level.
        push_tinst_level.
        (instantiate_class_template): Set input_filename and lineno as
        (instantiate_class_template): Set input_filename and lineno as
        appropriate.
        appropriate.
        (tsubst): Move _DECL processing to tsubst_decl.  Make sure the
        (tsubst): Move _DECL processing to tsubst_decl.  Make sure the
        context for a TYPENAME_TYPE is complete.
        context for a TYPENAME_TYPE is complete.
        * decl2.c (grokbitfield): Issue errors on bitfields declared with
        * decl2.c (grokbitfield): Issue errors on bitfields declared with
        function type.
        function type.
        (do_dtors): As in do_ctors, pretend to be a member of the same
        (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
        class as a static data member while generating a call to its
        destructor.
        destructor.
        * cvt.c (cp_convert_to_pointer): Handle NULL pointer
        * cvt.c (cp_convert_to_pointer): Handle NULL pointer
        conversions, even in complex virtual base class hierarchies.
        conversions, even in complex virtual base class hierarchies.
1998-08-06  Mark Mitchell  
1998-08-06  Mark Mitchell  
        * cp-tree.h (ENUM_TEMPLATE_INFO): New macro.
        * cp-tree.h (ENUM_TEMPLATE_INFO): New macro.
        (TYPE_TEMPLATE_INFO): Likewise.
        (TYPE_TEMPLATE_INFO): Likewise.
        (SET_TYPE_TEMPLATE_INFO): Likewise.
        (SET_TYPE_TEMPLATE_INFO): Likewise.
        (ENUM_TI_TEMPLATE): Likewise.
        (ENUM_TI_TEMPLATE): Likewise.
        (ENUM_TI_ARGS): Likewise.
        (ENUM_TI_ARGS): Likewise.
        (lookup_nested_type_by_name): Remove.
        (lookup_nested_type_by_name): Remove.
        * decl.c (maybe_process_template_type_declaration): Handle enums.
        * decl.c (maybe_process_template_type_declaration): Handle enums.
        (start_enum): Don't check for primary-template enum declarations
        (start_enum): Don't check for primary-template enum declarations
        here.
        here.
        (finish_enum): Clean up, document.  Make sure template enum
        (finish_enum): Clean up, document.  Make sure template enum
        constants get the correct type.
        constants get the correct type.
        (build_enumerator): Copy initializers for template enumerations,
        (build_enumerator): Copy initializers for template enumerations,
        too.
        too.
        (grok_enum_decls): Document.
        (grok_enum_decls): Document.
        * lex.c (do_identifier): Document use of LOOKUP_EXPR a bit
        * lex.c (do_identifier): Document use of LOOKUP_EXPR a bit
        better.  Build LOOKUP_EXPRs for local variables, even if they are
        better.  Build LOOKUP_EXPRs for local variables, even if they are
        TREE_PERMANENT.
        TREE_PERMANENT.
        * pt.c (tsubst_enum): Remove field_chain parameter.
        * pt.c (tsubst_enum): Remove field_chain parameter.
        (template_class_depth): Include the depth of surrounding function
        (template_class_depth): Include the depth of surrounding function
        contexts.
        contexts.
        (push_template_decl): Check for primary-template enum declarations
        (push_template_decl): Check for primary-template enum declarations
        here.  Deal with enumeration templates.
        here.  Deal with enumeration templates.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        (for_each_template_parm): Likewise.
        (for_each_template_parm): Likewise.
        (instantiate_class_template): Don't call tsubst_enum directly,
        (instantiate_class_template): Don't call tsubst_enum directly,
        call tsubst instead, to instantiate enums.  Deal with all
        call tsubst instead, to instantiate enums.  Deal with all
        field_chain issues here, not in tsubst_enum.
        field_chain issues here, not in tsubst_enum.
        (lookup_nested_type_by_name): Remove.
        (lookup_nested_type_by_name): Remove.
        (tsubst_aggr_type): Revise handling of enumeration types.
        (tsubst_aggr_type): Revise handling of enumeration types.
        (tsubst): Likewise.
        (tsubst): Likewise.
        (tsubst_copy): Likewise.
        (tsubst_copy): Likewise.
        (tsubst_expr): Call tsubst, not tsubst_enum for TAG_DEFNs.
        (tsubst_expr): Call tsubst, not tsubst_enum for TAG_DEFNs.
1998-08-04  Mark Mitchell  
1998-08-04  Mark Mitchell  
        * decl.c (pushtag): Don't mangle the name of a TYPE_DECL if it
        * decl.c (pushtag): Don't mangle the name of a TYPE_DECL if it
        uses template parameters.
        uses template parameters.
        * method.c (build_template_parm_names): Use the full set of
        * method.c (build_template_parm_names): Use the full set of
        template arguments for tsubst'ing.
        template arguments for tsubst'ing.
        (build_overload_identifier): Pass the full set of template
        (build_overload_identifier): Pass the full set of template
        arguments to build_template_parm_names, not just the
        arguments to build_template_parm_names, not just the
        innermost_args.
        innermost_args.
        * pt.c (TMPL_ARGS_DEPTH): Define using
        * pt.c (TMPL_ARGS_DEPTH): Define using
        TMPL_ARGS_HAVE_MULTIPLE_LEVELS, for clarity.
        TMPL_ARGS_HAVE_MULTIPLE_LEVELS, for clarity.
        (NUM_TMPL_ARGS): New macro.
        (NUM_TMPL_ARGS): New macro.
        (add_outermost_template_args): Deal with the case where the outer
        (add_outermost_template_args): Deal with the case where the outer
        args will be completely discarded.
        args will be completely discarded.
        (coerce_template_parms): Use the full set of template arguments
        (coerce_template_parms): Use the full set of template arguments
        for tsubst'ing.  Simplify.  Add some asserts.  Improve
        for tsubst'ing.  Simplify.  Add some asserts.  Improve
        error messages.
        error messages.
        (lookup_template_class): Pass the full set of template arguments
        (lookup_template_class): Pass the full set of template arguments
        to coerce_template_parms.
        to coerce_template_parms.
        (tsubst): Add assertion.
        (tsubst): Add assertion.
        (do_type_instantiation): Don't instantiate member template
        (do_type_instantiation): Don't instantiate member template
        classes.
        classes.
        * init.c (build_offset_ref): Deal with a TEMPLATE_ID_EXPR whose
        * init.c (build_offset_ref): Deal with a TEMPLATE_ID_EXPR whose
        name is a LOOKUP_EXPR, rather than an IDENTIFIER_NODE.
        name is a LOOKUP_EXPR, rather than an IDENTIFIER_NODE.
1998-08-03  Jason Merrill  
1998-08-03  Jason Merrill  
        * method.c (set_mangled_name_for_decl): Change return type to void.
        * method.c (set_mangled_name_for_decl): Change return type to void.
        * decl.c (lookup_name_real): A namespace-level decl takes priority
        * decl.c (lookup_name_real): A namespace-level decl takes priority
        over implicit typename.  Avoid doing the same lookup twice.
        over implicit typename.  Avoid doing the same lookup twice.
        * search.c (dependent_base_p): New fn.
        * search.c (dependent_base_p): New fn.
        (dfs_pushdecls, dfs_compress_decls): Use it.
        (dfs_pushdecls, dfs_compress_decls): Use it.
        * typeck.c (get_member_function_from_ptrfunc): Don't try to handle
        * typeck.c (get_member_function_from_ptrfunc): Don't try to handle
        virtual functions if the type doesn't have any.
        virtual functions if the type doesn't have any.
1998-08-03  Mark Mitchell  
1998-08-03  Mark Mitchell  
        * decl2.c (grokfield): Don't mangle the name of a TYPE_DECL if it
        * decl2.c (grokfield): Don't mangle the name of a TYPE_DECL if it
        uses template parameters.
        uses template parameters.
1998-08-02  Mark Mitchell  
1998-08-02  Mark Mitchell  
        * cp-tree.def (LOOKUP_EXPR): Document.  Remove second argument.
        * cp-tree.def (LOOKUP_EXPR): Document.  Remove second argument.
        * cp-tree.h (DECL_TI_TEMPLATE): Improve documentation.
        * cp-tree.h (DECL_TI_TEMPLATE): Improve documentation.
        * lex.c (do_identifier): Don't use a second argument, or a type,
        * lex.c (do_identifier): Don't use a second argument, or a type,
        when building LOOKUP_EXPRs.
        when building LOOKUP_EXPRs.
        (do_identifier): Likewise.
        (do_identifier): Likewise.
        (do_scoped_id): Likewise.
        (do_scoped_id): Likewise.
        * method.c (hack_identifier): Improve error message.
        * method.c (hack_identifier): Improve error message.
        * pt.c (lookup_template_function): Don't needlessly call
        * pt.c (lookup_template_function): Don't needlessly call
        copy_to_permanent or build_min.
        copy_to_permanent or build_min.
        (tsubst_copy): Remove #if 0'd code.  tsubst into LOOKUP_EXPRs if
        (tsubst_copy): Remove #if 0'd code.  tsubst into LOOKUP_EXPRs if
        necessary.
        necessary.
        (do_decl_instantiation): Improve error message.
        (do_decl_instantiation): Improve error message.
        * tree.c (mapcar, case LOOKUP_EXPR): Don't be sorry; make a copy.
        * tree.c (mapcar, case LOOKUP_EXPR): Don't be sorry; make a copy.
        (build_min): Copy the type to the permanent obstack, too.
        (build_min): Copy the type to the permanent obstack, too.
1998-08-01  Jason Merrill  
1998-08-01  Jason Merrill  
        * init.c (init_init_processing): Remove BI* handling.
        * init.c (init_init_processing): Remove BI* handling.
        (build_builtin_call): Remove.
        (build_builtin_call): Remove.
        (build_builtin_delete_call): New fn.
        (build_builtin_delete_call): New fn.
        (build_delete): Use it.
        (build_delete): Use it.
1998-07-31  Mark Mitchell  
1998-07-31  Mark Mitchell  
        * cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
        * cp-tree.h (PROCESSING_REAL_TEMPLATE_DECL_P): New macro.
        (maybe_check_template_type): New function.
        (maybe_check_template_type): New function.
        * decl.c (maybe_process_template_type_declaration): New function,
        * decl.c (maybe_process_template_type_declaration): New function,
        split out from pushtag  Call maybe_check_template_type.
        split out from pushtag  Call maybe_check_template_type.
        (pushtag): Use it.  Use PROCESSING_REAL_TEMPLATE_DECL_P.
        (pushtag): Use it.  Use PROCESSING_REAL_TEMPLATE_DECL_P.
        (xref_tag): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        (xref_tag): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        * friend.c (do_friend): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        * friend.c (do_friend): Use PROCESSING_REAL_TEMPLATE_DECL_P.
        * pt.c (template_class_depth_real): Generalization of ...
        * pt.c (template_class_depth_real): Generalization of ...
        (template_class_depth): Use it.
        (template_class_depth): Use it.
        (register_specialization): Use duplicate_decls for duplicate
        (register_specialization): Use duplicate_decls for duplicate
        declarations of specializations.
        declarations of specializations.
        (maybe_check_template_type): New function.
        (maybe_check_template_type): New function.
        (push_template_decl_real): Fix comment.
        (push_template_decl_real): Fix comment.
        (convert_nontype_argument): Likewise.
        (convert_nontype_argument): Likewise.
        (lookup_template_class): Likewise.  Avoid an infinite loop on
        (lookup_template_class): Likewise.  Avoid an infinite loop on
        erroneous code.
        erroneous code.
        (tsubst_friend_function): Fix comment.
        (tsubst_friend_function): Fix comment.
        (tsubst, case FUNCTION_DECL): Deal with a DECL_TI_TEMPLATE that is
        (tsubst, case FUNCTION_DECL): Deal with a DECL_TI_TEMPLATE that is
        an IDENTIFIER_NODE.
        an IDENTIFIER_NODE.
        * semantics.c (begin_function_definition): Use
        * semantics.c (begin_function_definition): Use
        reset_specialization to note that template headers don't apply
        reset_specialization to note that template headers don't apply
        directly to declarations after the opening curly for a function.
        directly to declarations after the opening curly for a function.
1998-07-29  Jason Merrill  
1998-07-29  Jason Merrill  
        * decl.c (push_overloaded_decl): Use current_namespace instead of
        * decl.c (push_overloaded_decl): Use current_namespace instead of
        DECL_CONTEXT (decl) to determine where we go.
        DECL_CONTEXT (decl) to determine where we go.
        * decl.c (lookup_name_real): Fix typo.
        * decl.c (lookup_name_real): Fix typo.
1998-07-28  Mark Mitchell  
1998-07-28  Mark Mitchell  
        * friend.c (is_friend): Be lenient with member functions to deal
        * friend.c (is_friend): Be lenient with member functions to deal
        with nested friends.
        with nested friends.
1998-07-28  Jason Merrill  
1998-07-28  Jason Merrill  
        * class.c (finish_struct_1): Convert integer_zero_node to
        * class.c (finish_struct_1): Convert integer_zero_node to
        ssizetype before passing it to set_rtti_entry.
        ssizetype before passing it to set_rtti_entry.
        * typeck2.c (initializer_constant_valid_p): Allow conversion of 0
        * typeck2.c (initializer_constant_valid_p): Allow conversion of 0
        of any size to a pointer.
        of any size to a pointer.
1998-07-27  Mark Mitchell  
1998-07-27  Mark Mitchell  
        * cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
        * cp-tree.h (TI_USES_TEMPLATE_PARMS): Remove.
        (build_template_decl_overload): Remove.
        (build_template_decl_overload): Remove.
        (set_mangled_name_for_decl): New function.
        (set_mangled_name_for_decl): New function.
        (innermost_args): Remove is_spec parameter.
        (innermost_args): Remove is_spec parameter.
        (most_specialized, most_specialized_class): Remove declarations.
        (most_specialized, most_specialized_class): Remove declarations.
        (lookup_template_class): Add entering_scope parameter.
        (lookup_template_class): Add entering_scope parameter.
        (maybe_process_partial_specialization): New function.
        (maybe_process_partial_specialization): New function.
        (finish_template_decl): Likewise.
        (finish_template_decl): Likewise.
        (finish_template_type): Likewise.
        (finish_template_type): Likewise.
        * class.c (finish_struct): Clean up processing of member template
        * class.c (finish_struct): Clean up processing of member template
        specializations.
        specializations.
        * decl.c (pushtag): Fix formatting.
        * decl.c (pushtag): Fix formatting.
        (lookup_tag): Improve handling of pseudo-global levels.
        (lookup_tag): Improve handling of pseudo-global levels.
        (make_typename_type): Adjust call to lookup_template_class.
        (make_typename_type): Adjust call to lookup_template_class.
        (shadow_tag): Use maybe_process_partial_specialization.
        (shadow_tag): Use maybe_process_partial_specialization.
        (xref_tag): Improve handling of member friends.
        (xref_tag): Improve handling of member friends.
        (start_function): Call push_nested_class before
        (start_function): Call push_nested_class before
        push_template_decl.  Don't call push_template_decl for
        push_template_decl.  Don't call push_template_decl for
        specializations.
        specializations.
        * decl2.c (grok_x_components): Don't call xref_tag for
        * decl2.c (grok_x_components): Don't call xref_tag for
        template instantiations.  Handle UNION_TYPEs like RECORD_TYPEs.
        template instantiations.  Handle UNION_TYPEs like RECORD_TYPEs.
        (grokclassfn): Use set_mangled_name_for_decl.
        (grokclassfn): Use set_mangled_name_for_decl.
        (arg_assoc_class): Adjust call to innermost_args.
        (arg_assoc_class): Adjust call to innermost_args.
        (mark_used): Don't call instantiate_decl for a TEMPLATE_DECL.
        (mark_used): Don't call instantiate_decl for a TEMPLATE_DECL.
        * error.c (dump_function_name): Improve printing of template
        * error.c (dump_function_name): Improve printing of template
        function names.
        function names.
        * friend.c (is_friend): Don't compare types of decls to determine
        * friend.c (is_friend): Don't compare types of decls to determine
        friendship, unless flag_guiding_decls.
        friendship, unless flag_guiding_decls.
        (make_friend_class): Partial specializations cannot be friends.
        (make_friend_class): Partial specializations cannot be friends.
        (do_friend): Use set_mangled_name_for_decl.  Call
        (do_friend): Use set_mangled_name_for_decl.  Call
        push_template_decl_real instead of push_template_decl.
        push_template_decl_real instead of push_template_decl.
        * method.c (build_decl_overload_real): Remove prototype.  Give it
        * method.c (build_decl_overload_real): Remove prototype.  Give it
        external linkage.
        external linkage.
        (build_overload_identifier): Adjust call to innermost_args.
        (build_overload_identifier): Adjust call to innermost_args.
        (build_template_decl_overload): Remove.
        (build_template_decl_overload): Remove.
        (set_mangled_name_for_decl): New function.
        (set_mangled_name_for_decl): New function.
        * parse.y (.finish_template_type): New non-terminal.
        * parse.y (.finish_template_type): New non-terminal.
        (template_def): Use finish_template_decl.  Use template_extdef
        (template_def): Use finish_template_decl.  Use template_extdef
        instead of extdef.
        instead of extdef.
        (template_extdef, template_datadef): New non-terminals, containing
        (template_extdef, template_datadef): New non-terminals, containing
        only those rules for things which can be templates.
        only those rules for things which can be templates.
        (datadef): Tidy.
        (datadef): Tidy.
        (template_type, self_template_type): Use .finish_template_type.
        (template_type, self_template_type): Use .finish_template_type.
        (named_class_head): Use maybe_process_partial_specialization.
        (named_class_head): Use maybe_process_partial_specialization.
        * pt.c (mangle_class_name_for_template): Remove context parameter.
        * pt.c (mangle_class_name_for_template): Remove context parameter.
        (get_class_bindings): Remove outer_args parameter.
        (get_class_bindings): Remove outer_args parameter.
        (complete_template_args): Remove.
        (complete_template_args): Remove.
        (add_outermost_template_args): New function.
        (add_outermost_template_args): New function.
        (register_specialization): Return the specialization.
        (register_specialization): Return the specialization.
        (unregister_specialization): New function.
        (unregister_specialization): New function.
        (tsubst_template_parms): Likewise.
        (tsubst_template_parms): Likewise.
        (most_specialized, most_specialized_class): Prototype here as
        (most_specialized, most_specialized_class): Prototype here as
        static.
        static.
        (original_template): Rename to most_general_template.
        (original_template): Rename to most_general_template.
        (tsubst_template_parms): New function.
        (tsubst_template_parms): New function.
        (set_mangled_name_for_template_decl): Likewise.
        (set_mangled_name_for_template_decl): Likewise.
        (TMPL_ARGS_DEPTH): New macro.
        (TMPL_ARGS_DEPTH): New macro.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Adjust.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): Adjust.
        (TMPL_ARGS_LEVEL): New macro.
        (TMPL_ARGS_LEVEL): New macro.
        (SET_TMPL_ARGS_LEVEL): Likewise.
        (SET_TMPL_ARGS_LEVEL): Likewise.
        (TMPL_ARG): Likewise.
        (TMPL_ARG): Likewise.
        (SET_TMPL_ARG): Likewise.
        (SET_TMPL_ARG): Likewise.
        (TMPL_ARGS_DEPTH): Likewise.
        (TMPL_ARGS_DEPTH): Likewise.
        (finish_member_template_decl): Use finish_template_decl.
        (finish_member_template_decl): Use finish_template_decl.
        (maybe_process_partial_specialization): New function, split out
        (maybe_process_partial_specialization): New function, split out
        from tsubst.
        from tsubst.
        (inline_needs_template_parms): Use TMPL_PARMS_DEPTH.
        (inline_needs_template_parms): Use TMPL_PARMS_DEPTH.
        (maybe_begin_member_template_processing): Use new macros.
        (maybe_begin_member_template_processing): Use new macros.
        (is_member_template): Likewise.
        (is_member_template): Likewise.
        (is_member_template_class): Likewise.
        (is_member_template_class): Likewise.
        (add_to_template_args): Likewise.  Deal with multiple levels of
        (add_to_template_args): Likewise.  Deal with multiple levels of
        args.
        args.
        (maybe_process_partial_specialization): New function.
        (maybe_process_partial_specialization): New function.
        (retrieve_specialization): Add consistency check.
        (retrieve_specialization): Add consistency check.
        (determine_specialization): Return full argument list.
        (determine_specialization): Return full argument list.
        (check_explicit_specialization): Tweak friend handling.  Use full
        (check_explicit_specialization): Tweak friend handling.  Use full
        argument lists.  Simplify.
        argument lists.  Simplify.
        (current_template_args): Use new macros.
        (current_template_args): Use new macros.
        (push_template_decl_real): Change ill-named mainargs to specargs.
        (push_template_decl_real): Change ill-named mainargs to specargs.
        Check that a partial specialization actually specializes at least
        Check that a partial specialization actually specializes at least
        one parameter.   Improve friend handling.  Modify for full
        one parameter.   Improve friend handling.  Modify for full
        template arguments.
        template arguments.
        (classtype_mangled_name): Don't mangle the names of
        (classtype_mangled_name): Don't mangle the names of
        specializations.
        specializations.
        (lookup_template_class): Add entering_scope parameter.  Use it to
        (lookup_template_class): Add entering_scope parameter.  Use it to
        avoid finding a template type when an instantiation is required.
        avoid finding a template type when an instantiation is required.
        Simplify.  Use full template arguments.
        Simplify.  Use full template arguments.
        (tsubst_friend_function): Use unregister_specialization.  Use new
        (tsubst_friend_function): Use unregister_specialization.  Use new
        macros.  Use full template arguments.
        macros.  Use full template arguments.
        (tsubst_friend_class): Substitute, using tsubst_template_parms,
        (tsubst_friend_class): Substitute, using tsubst_template_parms,
        into the template parameters before passing them to
        into the template parameters before passing them to
        redeclare_class_template.
        redeclare_class_template.
        (instantiate_class_template): Simplify.  Use full template
        (instantiate_class_template): Simplify.  Use full template
        arguments.  Adjust calls to get_class_bindings.  Use
        arguments.  Adjust calls to get_class_bindings.  Use
        SET_IDENTIFIER_TYPE_VALUE where needed.  Improve friend handling.
        SET_IDENTIFIER_TYPE_VALUE where needed.  Improve friend handling.
        (innermost_args): Use new macros.
        (innermost_args): Use new macros.
        (tsubst_aggr_type): New function, split out from tsubst.
        (tsubst_aggr_type): New function, split out from tsubst.
        (tsubst): Use tsubst_aggr_type, tsubst_template_parms, new calling
        (tsubst): Use tsubst_aggr_type, tsubst_template_parms, new calling
        conventions for lookup_template_class.  Refine handling of partial
        conventions for lookup_template_class.  Refine handling of partial
        instantiations.   Remove calls to complete_template_args.
        instantiations.   Remove calls to complete_template_args.
        Simplify.  Add consistency checks.  Use set_mangled_name_for_decl
        Simplify.  Add consistency checks.  Use set_mangled_name_for_decl
        and set_mangled_name_for_template_decl.
        and set_mangled_name_for_template_decl.
        (tsubst_copy): Use tsubst_aggr_type.
        (tsubst_copy): Use tsubst_aggr_type.
        (instantiate_template): Use full template arguments.
        (instantiate_template): Use full template arguments.
        (more_specialized): Improve formatting.
        (more_specialized): Improve formatting.
        (more_specialized_class): Adjust calls to get_class_bindings.
        (more_specialized_class): Adjust calls to get_class_bindings.
        (get_bindings_real): Don't call complete_template_args.
        (get_bindings_real): Don't call complete_template_args.
        (most_specialized): Don't overwrite input; create a new list.
        (most_specialized): Don't overwrite input; create a new list.
        (most_specialized_class): Use most_general_template.
        (most_specialized_class): Use most_general_template.
        (regenerate_decl_from_template): Use unregister_specialization.
        (regenerate_decl_from_template): Use unregister_specialization.
        Use full template arguments.
        Use full template arguments.
        (instantiate_decl): Use full template arguments.
        (instantiate_decl): Use full template arguments.
        (set_mangled_name_for_template_decl): New function.
        (set_mangled_name_for_template_decl): New function.
        * semantics.c (begin_class_definition): Use
        * semantics.c (begin_class_definition): Use
        maybe_process_partial_specialization.
        maybe_process_partial_specialization.
        (finish_member_class_template): New function.
        (finish_member_class_template): New function.
        (finish_template_decl): Likewise.
        (finish_template_decl): Likewise.
        (finish_template_type): Likewise.
        (finish_template_type): Likewise.
        (typeck.c): Don't crash after issuing a compiler_error.
        (typeck.c): Don't crash after issuing a compiler_error.
        * Makefile.in (CONFLICTS): Adjust; we removed a s/r conflict.
        * Makefile.in (CONFLICTS): Adjust; we removed a s/r conflict.
1998-07-27  Jason Merrill  
1998-07-27  Jason Merrill  
        * typeck2.c (build_functional_cast): Handle default-initialization.
        * typeck2.c (build_functional_cast): Handle default-initialization.
        * call.c (build_over_call): Pass 1 to popclass.
        * call.c (build_over_call): Pass 1 to popclass.
        * parse.y (direct_notype_declarator): Add precedence declaration
        * parse.y (direct_notype_declarator): Add precedence declaration
        to notype_unqualified_id case.
        to notype_unqualified_id case.
        * Makefile.in (EXPECT): Adjust.
        * Makefile.in (EXPECT): Adjust.
        * tree.c (ovl_member): Fix for single function in OVL.
        * tree.c (ovl_member): Fix for single function in OVL.
1998-07-27  Dave Brolley  
1998-07-27  Dave Brolley  
        * c-lex.c (yylex): Fix boundary conditions in character literal and
        * c-lex.c (yylex): Fix boundary conditions in character literal and
        string literal loops.
        string literal loops.
1998-07-24  Jason Merrill  
1998-07-24  Jason Merrill  
        * decl.c (lookup_name_real): OK, do return the from_obj value
        * decl.c (lookup_name_real): OK, do return the from_obj value
        unless got_object depends on template parms.
        unless got_object depends on template parms.
        * parse.y (nested_name_specifier_1): Pull out the TYPE_MAIN_VARIANT.
        * parse.y (nested_name_specifier_1): Pull out the TYPE_MAIN_VARIANT.
        * pt.c (coerce_template_parms): Also complain about local enums.
        * pt.c (coerce_template_parms): Also complain about local enums.
        * cp-tree.h: Add prototype for set_identifier_local_value.
        * cp-tree.h: Add prototype for set_identifier_local_value.
        * decl.c (set_identifier_local_value_with_scope): Make static,
        * decl.c (set_identifier_local_value_with_scope): Make static,
        prototype.
        prototype.
        * search.c (covariant_return_p): Likewise.
        * search.c (covariant_return_p): Likewise.
        * except.c (build_terminate_handler, alloc_eh_object): Likewise.
        * except.c (build_terminate_handler, alloc_eh_object): Likewise.
        * call.c (build_method_call): Only pull out the type of a destructor
        * call.c (build_method_call): Only pull out the type of a destructor
        if it's a template type parm.
        if it's a template type parm.
        * decl.c (lookup_name_real): Never return the from_obj value.
        * decl.c (lookup_name_real): Never return the from_obj value.
1998-07-23  Jason Merrill  
1998-07-23  Jason Merrill  
        * except.c (process_start_catch_block_old): Call start_decl_1 for
        * except.c (process_start_catch_block_old): Call start_decl_1 for
        catch parm.
        catch parm.
        * decl.c (start_decl_1): Avoid duplicate error.
        * decl.c (start_decl_1): Avoid duplicate error.
        * init.c (expand_default_init): Only perform the initialization if
        * init.c (expand_default_init): Only perform the initialization if
        it will do something.
        it will do something.
1998-07-23  H.J. Lu  (hjl@gnu.org)
1998-07-23  H.J. Lu  (hjl@gnu.org)
        * parse.y (base_class): Check for invalid base class.
        * parse.y (base_class): Check for invalid base class.
1998-07-23  Jason Merrill  
1998-07-23  Jason Merrill  
        * decl2.c (import_export_template): Fold in...
        * decl2.c (import_export_template): Fold in...
        (import_export_class): ...to here.  Handle dllimport/export.
        (import_export_class): ...to here.  Handle dllimport/export.
        * class.c (build_vtable): Pass at_eof to import_export_vtable.
        * class.c (build_vtable): Pass at_eof to import_export_vtable.
        (prepare_fresh_vtable): Likewise.
        (prepare_fresh_vtable): Likewise.
        * decl2.c (import_export_class): Split out...
        * decl2.c (import_export_class): Split out...
        (finish_prevtable_vardecl): From here.
        (finish_prevtable_vardecl): From here.
        * class.c (finish_struct_1): Call import_export_class if at_eof.
        * class.c (finish_struct_1): Call import_export_class if at_eof.
        * decl.c (start_function): #if 0 mysterious code I wrote and have
        * decl.c (start_function): #if 0 mysterious code I wrote and have
        forgotten why.
        forgotten why.
        * rtti.c (get_tinfo_fn): If this is for a class type, set
        * rtti.c (get_tinfo_fn): If this is for a class type, set
        DECL_CONTEXT.
        DECL_CONTEXT.
1998-07-22  Jason Merrill  
1998-07-22  Jason Merrill  
        * inc/exception: Change terminate and unexpected to ().
        * inc/exception: Change terminate and unexpected to ().
        * parse.y (named_class_head_sans_basetype_defn): A
        * parse.y (named_class_head_sans_basetype_defn): A
        named_class_head_sans_basetype followed by '{' or ':' is a defn.
        named_class_head_sans_basetype followed by '{' or ':' is a defn.
1998-07-21  Jason Merrill  
1998-07-21  Jason Merrill  
        * tree.c (canonical_type_variant): New fn to handle arrays.
        * tree.c (canonical_type_variant): New fn to handle arrays.
        * cp-tree.h (CANONICAL_TYPE_VARIANT): Remove.
        * cp-tree.h (CANONICAL_TYPE_VARIANT): Remove.
        * pt.c (unify, default case): Also fold arg.  Fix array bounds case.
        * pt.c (unify, default case): Also fold arg.  Fix array bounds case.
        * method.c (process_overload_item): Use build_overload_value for
        * method.c (process_overload_item): Use build_overload_value for
        arrays.
        arrays.
1998-07-20  Dave Brolley  
1998-07-20  Dave Brolley  
        * lex.c (mbchar.h): #include it.
        * lex.c (mbchar.h): #include it.
        (GET_ENVIRONMENT): New macro.
        (GET_ENVIRONMENT): New macro.
        (init_parse): Set character set based on LANG environment variable.
        (init_parse): Set character set based on LANG environment variable.
        (real_yylex): Handle multibyte characters in character literals.
        (real_yylex): Handle multibyte characters in character literals.
        (real_yylex): Handle multibyte characters in string literals.
        (real_yylex): Handle multibyte characters in string literals.
1998-07-19  Jason Merrill  
1998-07-19  Jason Merrill  
        * lex.c (do_identifier): Look for class value even if we don't
        * lex.c (do_identifier): Look for class value even if we don't
        have a global value.  Do implicit declaration if parsing is 2.
        have a global value.  Do implicit declaration if parsing is 2.
        * semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
        * semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
        lookup.
        lookup.
1998-07-19  Mark Mitchell  
1998-07-19  Mark Mitchell  
        * decl.c (pushtag): Revert previous change.
        * decl.c (pushtag): Revert previous change.
        * pt.c (lookup_template_class): Don't put out debugging
        * pt.c (lookup_template_class): Don't put out debugging
        information for types that use template parameters.
        information for types that use template parameters.
        * decl.c (pushtag): Don't put out debugging information for
        * decl.c (pushtag): Don't put out debugging information for
        compiler-generated typedefs.
        compiler-generated typedefs.
        * error.c (dump_type_real): Don't crash when presented with
        * error.c (dump_type_real): Don't crash when presented with
        intQI_type_node or the like.
        intQI_type_node or the like.
        * semantics.c (finish_translation_unit): Fix spelling error in
        * semantics.c (finish_translation_unit): Fix spelling error in
        comment.
        comment.
1998-07-17  Jason Merrill  
1998-07-17  Jason Merrill  
        * decl.c (lookup_name_real): Pull out single function here.
        * decl.c (lookup_name_real): Pull out single function here.
        (select_decl): Not here.
        (select_decl): Not here.
        (unqualified_namespace_lookup): Use CP_DECL_CONTEXT.
        (unqualified_namespace_lookup): Use CP_DECL_CONTEXT.
        * decl.c (qualify_lookup): Tweak again.
        * decl.c (qualify_lookup): Tweak again.
        * pt.c (lookup_template_class): Don't mess with the context of the
        * pt.c (lookup_template_class): Don't mess with the context of the
        instantiation.
        instantiation.
        * decl2.c (current_decl_namespace): Remove special handling for
        * decl2.c (current_decl_namespace): Remove special handling for
        templates.
        templates.
        * pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
        * pt.c (tsubst, case FUNCTION_DECL): Fix getting complete args for
        a member template specialization.
        a member template specialization.
        * tree.c (ovl_member): Use decls_match to compare functions.
        * tree.c (ovl_member): Use decls_match to compare functions.
        * decl.c (decls_match): Check the context of a function.
        * decl.c (decls_match): Check the context of a function.
        * parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER
        * parse.y (primary): Use notype_unqualified_id instead of IDENTIFIER
        in Koenig lookup support rules.
        in Koenig lookup support rules.
        * semantics.c (finish_call_expr): Handle the new cases.
        * semantics.c (finish_call_expr): Handle the new cases.
        * typeck.c (build_x_function_call): Handle overloaded methods.
        * typeck.c (build_x_function_call): Handle overloaded methods.
        * decl.c (grokvardecl): Don't call build_static_name for extern "C".
        * decl.c (grokvardecl): Don't call build_static_name for extern "C".
1998-07-16  Mark Mitchell  
1998-07-16  Mark Mitchell  
        * semantics.c (finish_object_call_expr): Revert previous change.
        * semantics.c (finish_object_call_expr): Revert previous change.
        * call.c (build_new_method_call): Likewise.  Instead, convert
        * call.c (build_new_method_call): Likewise.  Instead, convert
        TYPE_DECLs to IDENTIFIERs here, in the presence of templates.
        TYPE_DECLs to IDENTIFIERs here, in the presence of templates.
1998-07-16  Jason Merrill  
1998-07-16  Jason Merrill  
        * decl.c (qualify_lookup): Handle templates.
        * decl.c (qualify_lookup): Handle templates.
        * decl2.c (do_using_directive): Don't pass ancestor.
        * decl2.c (do_using_directive): Don't pass ancestor.
        * decl.c (push_using_directive): Calculate ancestor.
        * decl.c (push_using_directive): Calculate ancestor.
        * decl2.c (do_nonmember_using_decl): Allow for type shadowing.
        * decl2.c (do_nonmember_using_decl): Allow for type shadowing.
        * decl.c (pushdecl): Move type shadowing handling from here...
        * decl.c (pushdecl): Move type shadowing handling from here...
        (duplicate_decls): ...to here.
        (duplicate_decls): ...to here.
        * decl.c (set_identifier_local_value_with_scope): New fn.
        * decl.c (set_identifier_local_value_with_scope): New fn.
        (pushdecl): Use it.
        (pushdecl): Use it.
        (set_identifier_local_value, lookup_type_current_level): New fns.
        (set_identifier_local_value, lookup_type_current_level): New fns.
        * decl2.c (do_local_using_decl): Handle types and binding level
        * decl2.c (do_local_using_decl): Handle types and binding level
        stuff properly.
        stuff properly.
        * init.c (build_offset_ref): Don't call mark_used on an OVERLOAD.
        * init.c (build_offset_ref): Don't call mark_used on an OVERLOAD.
        * decl.c (select_decl): Extract a lone function from an OVERLOAD.
        * decl.c (select_decl): Extract a lone function from an OVERLOAD.
        (lookup_namespace_name): Likewise.
        (lookup_namespace_name): Likewise.
        * typeck.c (build_unary_op): Not here anymore.
        * typeck.c (build_unary_op): Not here anymore.
        * decl2.c (do_class_using_decl): Make sure we get an identifier.
        * decl2.c (do_class_using_decl): Make sure we get an identifier.
        * class.c (handle_using_decl): Ignore TYPE_DECLs.
        * class.c (handle_using_decl): Ignore TYPE_DECLs.
        * decl.c (qualify_lookup): New fn.
        * decl.c (qualify_lookup): New fn.
        (lookup_name_real): Use it.
        (lookup_name_real): Use it.
1998-07-16  Martin v. Löwis  
1998-07-16  Martin v. Löwis  
        * decl2.c (add_using_namespace): When directly using a namespace
        * decl2.c (add_using_namespace): When directly using a namespace
        that was indirect before, promote it.
        that was indirect before, promote it.
        * cp-tree.h (LOOKUP_PREFER_TYPES, LOOKUP_PREFER_NAMESPACES,
        * cp-tree.h (LOOKUP_PREFER_TYPES, LOOKUP_PREFER_NAMESPACES,
        LOOKUP_PREFER_BOTH, LOOKUP_NAMESPACES_ONLY, LOOKUP_TYPES_ONLY,
        LOOKUP_PREFER_BOTH, LOOKUP_NAMESPACES_ONLY, LOOKUP_TYPES_ONLY,
        LOOKUP_QUALIFIERS_ONLY, LOOKUP_TEMPLATES_EXPECTED): New macros.
        LOOKUP_QUALIFIERS_ONLY, LOOKUP_TEMPLATES_EXPECTED): New macros.
        * decl.c (select_decl): Replace two flag parameters by one.
        * decl.c (select_decl): Replace two flag parameters by one.
        (unqualified_namespace_lookup): Likewise, pass flag.
        (unqualified_namespace_lookup): Likewise, pass flag.
        (lookup_flags): New function.
        (lookup_flags): New function.
        (lookup_name_real): Compute flags, pass them.
        (lookup_name_real): Compute flags, pass them.
        (lookup_namespace_name): Call with zero-flag.
        (lookup_namespace_name): Call with zero-flag.
        * decl2.c (ambiguous_decl): Add flag parameter, complain only
        * decl2.c (ambiguous_decl): Add flag parameter, complain only
        according to flags.
        according to flags.
        (lookup_using_namespace, qualified_lookup_using_namespace):
        (lookup_using_namespace, qualified_lookup_using_namespace):
        Add flag parameter, pass them through.
        Add flag parameter, pass them through.
        * lex.c (do_scoped_id): Call with zero-flag.
        * lex.c (do_scoped_id): Call with zero-flag.
1998-07-16  Jason Merrill  
1998-07-16  Jason Merrill  
        * typeck.c (convert_for_assignment): Use comptypes.
        * typeck.c (convert_for_assignment): Use comptypes.
1998-07-16  Mark Mitchell  
1998-07-16  Mark Mitchell  
        * semantics.c (finish_object_call_expr): Move test for the
        * semantics.c (finish_object_call_expr): Move test for the
        function called being a TYPE_DECL to ...
        function called being a TYPE_DECL to ...
        * call.c (build_new_method_call): Here.
        * call.c (build_new_method_call): Here.
1998-07-15  Jason Merrill  
1998-07-15  Jason Merrill  
        * decl2.c (arg_assoc_class): Also look at template arguments, if any.
        * decl2.c (arg_assoc_class): Also look at template arguments, if any.
        (arg_assoc): Handle error_mark_node and multiple levels of TREE_LIST.
        (arg_assoc): Handle error_mark_node and multiple levels of TREE_LIST.
        * lex.c (looking_for_typename): Don't initialize.
        * lex.c (looking_for_typename): Don't initialize.
        * decl2.c (ambiguous_decl): Clarify error message.
        * decl2.c (ambiguous_decl): Clarify error message.
        * decl.c (push_using_directive): Iterate over namespaces used
        * decl.c (push_using_directive): Iterate over namespaces used
        indirectly.
        indirectly.
1998-07-15  Martin v. Löwis  
1998-07-15  Martin v. Löwis  
        * decl2.c (add_using_namespace): Iterate over namespaces used
        * decl2.c (add_using_namespace): Iterate over namespaces used
        indirectly.
        indirectly.
        * decl.c (lookup_name_real): Accept namespace aliases as locals.
        * decl.c (lookup_name_real): Accept namespace aliases as locals.
        (cat_namespace_levels): Ignore aliases.
        (cat_namespace_levels): Ignore aliases.
        (duplicate_decls): Ignore duplicate aliases.
        (duplicate_decls): Ignore duplicate aliases.
        * decl2.c (do_namespace_alias): Process block level namespace
        * decl2.c (do_namespace_alias): Process block level namespace
        aliases.  Store alias with pushdecl.  Remove odr errors.
        aliases.  Store alias with pushdecl.  Remove odr errors.
        * parse.y (namespace_alias): New non-terminal.
        * parse.y (namespace_alias): New non-terminal.
        (extdef): Use it.
        (extdef): Use it.
1998-07-15  Jason Merrill  
1998-07-15  Jason Merrill  
        * decl2.c (arg_assoc_type): Handle METHOD_TYPE like FUNCTION_TYPE.
        * decl2.c (arg_assoc_type): Handle METHOD_TYPE like FUNCTION_TYPE.
        Handle TEMPLATE_TYPE_PARM.
        Handle TEMPLATE_TYPE_PARM.
        (arg_assoc): Rewrite.
        (arg_assoc): Rewrite.
        * pt.c (complete_template_args): Don't look at the context unless
        * pt.c (complete_template_args): Don't look at the context unless
        we have to.
        we have to.
        * method.c (build_decl_overload_real): Fix namespace handling.
        * method.c (build_decl_overload_real): Fix namespace handling.
        * typeck.c (build_unary_op): Extract a lone function from an
        * typeck.c (build_unary_op): Extract a lone function from an
        OVERLOAD.
        OVERLOAD.
        * call.c (build_scoped_method_call): Handle getting a namespace
        * call.c (build_scoped_method_call): Handle getting a namespace
        for basetype in a destructor call.
        for basetype in a destructor call.
        (check_dtor_name): Handle enums.
        (check_dtor_name): Handle enums.
        * parse.y (using_directive): New nonterminal.
        * parse.y (using_directive): New nonterminal.
        (extdef, simple_stmt): Use it.
        (extdef, simple_stmt): Use it.
1998-07-14  Martin von Löwis  
1998-07-14  Martin von Löwis  
        * decl2.c (add_function): Move error message ...
        * decl2.c (add_function): Move error message ...
        (arg_assoc_namespace): ... from here.
        (arg_assoc_namespace): ... from here.
1998-07-14  Jason Merrill  
1998-07-14  Jason Merrill  
        * parse.y (namespace_qualifier): Fix multiple level handling.
        * parse.y (namespace_qualifier): Fix multiple level handling.
        * decl2.c (namespace_ancestor): Use CP_DECL_CONTEXT.
        * decl2.c (namespace_ancestor): Use CP_DECL_CONTEXT.
        (arg_assoc): Don't skip the first argument of a function.
        (arg_assoc): Don't skip the first argument of a function.
Tue Jul 14 20:09:22 1998  Jeffrey A Law  (law@cygnus.com)
Tue Jul 14 20:09:22 1998  Jeffrey A Law  (law@cygnus.com)
        * search.c (my_tree_cons): Clean up.
        * search.c (my_tree_cons): Clean up.
1998-07-14  Jason Merrill  
1998-07-14  Jason Merrill  
        * call.c (joust): Don't warn about "confusing" conversions to the
        * call.c (joust): Don't warn about "confusing" conversions to the
        same type.
        same type.
1998-07-14  Martin von Löwis  
1998-07-14  Martin von Löwis  
        * class.c (push_nested_class): Complain about namespaces.
        * class.c (push_nested_class): Complain about namespaces.
        * decl.c (start_decl): Enter the object's namespace.
        * decl.c (start_decl): Enter the object's namespace.
        (cp_finish_decl): Leave it.
        (cp_finish_decl): Leave it.
        (grokdeclarator): Likewise.
        (grokdeclarator): Likewise.
        * decl2.c (check_decl_namespace): New function.
        * decl2.c (check_decl_namespace): New function.
        (finish_file): Call it.
        (finish_file): Call it.
        * parse.y (complex_direct_notype_declarator): Set complexity
        * parse.y (complex_direct_notype_declarator): Set complexity
        of namespace-qualified ids to -1, enter the namespace.
        of namespace-qualified ids to -1, enter the namespace.
        * method.c (build_template_decl_overload): Expect _DECL as first
        * method.c (build_template_decl_overload): Expect _DECL as first
        parameter.  Put context temporarily into current_namespace.
        parameter.  Put context temporarily into current_namespace.
        * pt.c (check_explicit_specialization): Change caller.
        * pt.c (check_explicit_specialization): Change caller.
        (tsubst): Likewise.
        (tsubst): Likewise.
        * init.c (build_offset_ref): Call mark_used and
        * init.c (build_offset_ref): Call mark_used and
        convert_from_reference for namespace members.
        convert_from_reference for namespace members.
Mon Jul 13 23:25:28 1998  Martin von Löwis  
Mon Jul 13 23:25:28 1998  Martin von Löwis  
        * search.c (my_tree_cons): The bitfield is at index 2.
        * search.c (my_tree_cons): The bitfield is at index 2.
Mon Jul 13 17:21:01 1998  Nick Clifton  
Mon Jul 13 17:21:01 1998  Nick Clifton  
        * lang-options.h: Format changed to work with new --help support
        * lang-options.h: Format changed to work with new --help support
        in gcc/toplev.c
        in gcc/toplev.c
1998-07-12  Martin von Löwis  
1998-07-12  Martin von Löwis  
        * decl2.c (build_expr_from_tree): Change calls of do_identifier.
        * decl2.c (build_expr_from_tree): Change calls of do_identifier.
        Do Koenig lookup in CALL_EXPR.
        Do Koenig lookup in CALL_EXPR.
        (arg_assoc): Handle error_mark.
        (arg_assoc): Handle error_mark.
        * lex.c (is_global): New function.
        * lex.c (is_global): New function.
        (do_identifier): Expect arguments for Koenig lookup.
        (do_identifier): Expect arguments for Koenig lookup.
        * parse.y (primary): Add rules for calls of unqualified function calls.
        * parse.y (primary): Add rules for calls of unqualified function calls.
        (do_id): Change call of do_identifier.
        (do_id): Change call of do_identifier.
        * pt.c (finish_stmt_expr): Likewise.
        * pt.c (finish_stmt_expr): Likewise.
        * semantics.c (finish_id_expr): Likewise.
        * semantics.c (finish_id_expr): Likewise.
        (finish_call_expr): Add integer parameter to indicate
        (finish_call_expr): Add integer parameter to indicate
        argument-dependent lookup.
        argument-dependent lookup.
        * decl.c (struct binding_level): New field using_directives.
        * decl.c (struct binding_level): New field using_directives.
        (push_using_decl): Not sorry anymore.
        (push_using_decl): Not sorry anymore.
        (push_using_directive): New function.
        (push_using_directive): New function.
        (lookup_tag): Use CP_DECL_CONTEXT to iterate.
        (lookup_tag): Use CP_DECL_CONTEXT to iterate.
        (unqualified_namespace_lookup): New function, code from ...
        (unqualified_namespace_lookup): New function, code from ...
        (lookup_name_real): ... here.
        (lookup_name_real): ... here.
        * decl2.c (lookup_using_namespace): Pass using list instead of
        * decl2.c (lookup_using_namespace): Pass using list instead of
        initial scope.
        initial scope.
        (validate_nonmember_using_decl): New function.
        (validate_nonmember_using_decl): New function.
        (do_nonmember_using_decl): New function.
        (do_nonmember_using_decl): New function.
        (do_toplevel_using_decl): Use them.
        (do_toplevel_using_decl): Use them.
        (do_local_using_decl): New function.
        (do_local_using_decl): New function.
        (do_using_directive): Support block-level directives.
        (do_using_directive): Support block-level directives.
        * parse.y (simple_stmt): Support using declarations and
        * parse.y (simple_stmt): Support using declarations and
        directives.
        directives.
        (namespace_qualifier, namespace_using_decl): New non-terminals.
        (namespace_qualifier, namespace_using_decl): New non-terminals.
        * xref.c (classname): New function.
        * xref.c (classname): New function.
        (GNU_xref_hier): Change class and base parameters to tree.
        (GNU_xref_hier): Change class and base parameters to tree.
        * decl.c (xref_baseypes): Change caller.
        * decl.c (xref_baseypes): Change caller.
        * friend.c (make_friend_class): Likewise.
        * friend.c (make_friend_class): Likewise.
1998-07-12  Kriang Lerdsuwanakij  
1998-07-12  Kriang Lerdsuwanakij  
        * typeck.c (comptypes, case TEMPLATE_TEMPLATE_PARM): Add parameter
        * typeck.c (comptypes, case TEMPLATE_TEMPLATE_PARM): Add parameter
        comparison.
        comparison.
        * pt.c (for_each_template_parm, case TEMPLATE_DECL): If it is a
        * pt.c (for_each_template_parm, case TEMPLATE_DECL): If it is a
        template template parameter, record its use.
        template template parameter, record its use.
        (for_each_template_parm, case TEMPLATE_TEMPLATE_PARM): Traverse
        (for_each_template_parm, case TEMPLATE_TEMPLATE_PARM): Traverse
        its template arguments if exists.
        its template arguments if exists.
        * pt.c (coerce_template_template_parms): New function equivalent
        * pt.c (coerce_template_template_parms): New function equivalent
        to coerce_template_parms when IS_TMPL_PARM is true.
        to coerce_template_parms when IS_TMPL_PARM is true.
        (coerce_template_parms): Use it.  Remove the IS_TMPL_PARM parameter,
        (coerce_template_parms): Use it.  Remove the IS_TMPL_PARM parameter,
        all callers changed.
        all callers changed.
        (coerce_template_parms): Access ARGLIST properly when creating a
        (coerce_template_parms): Access ARGLIST properly when creating a
        new vector.  Only accept implicit TYPE_DECL as valid argument for
        new vector.  Only accept implicit TYPE_DECL as valid argument for
        a template template parameter when it is a base class of
        a template template parameter when it is a base class of
        current_class_type.  Don't display error message when COMPLAIN is
        current_class_type.  Don't display error message when COMPLAIN is
        false.
        false.
1998-07-12  Klaus Kaempf  (kkaempf@progis.de)
1998-07-12  Klaus Kaempf  (kkaempf@progis.de)
        * repo.c (get_base_filename): Use file_name_nondirectory.
        * repo.c (get_base_filename): Use file_name_nondirectory.
        (open_repo_file): Likewise.
        (open_repo_file): Likewise.
        * cp-tree.h (file_name_nondirectory): Add prototype.
        * cp-tree.h (file_name_nondirectory): Add prototype.
1998-07-12  Jason Merrill  
1998-07-12  Jason Merrill  
        * friend.c (do_friend): Pull the identifier out of declarator.
        * friend.c (do_friend): Pull the identifier out of declarator.
        Use cp_error and friends.
        Use cp_error and friends.
        * decl2.c (qualified_lookup_using_namespace): Fix call to
        * decl2.c (qualified_lookup_using_namespace): Fix call to
        purpose_member.
        purpose_member.
        * decl.c (lookup_name_real): Don't call complete_type on a namespace.
        * decl.c (lookup_name_real): Don't call complete_type on a namespace.
        (grokvardecl): Use DECL_CLASS_SCOPE_P.
        (grokvardecl): Use DECL_CLASS_SCOPE_P.
        * cvt.c (convert_pointer_to_real): Check for error_mark_node sooner.
        * cvt.c (convert_pointer_to_real): Check for error_mark_node sooner.
        * class.c (warn_hidden): Fix for OVERLOAD.
        * class.c (warn_hidden): Fix for OVERLOAD.
        From grahams@rcp.co.uk:
        From grahams@rcp.co.uk:
        * cp-tree.h (DEFARG_NODE_CHECK): New macro.
        * cp-tree.h (DEFARG_NODE_CHECK): New macro.
        (DEFARG_LENGTH, DEFARG_POINTER): Use it.
        (DEFARG_LENGTH, DEFARG_POINTER): Use it.
Sun Jul 12 01:20:57 1998  Jeffrey A Law  (law@cygnus.com)
Sun Jul 12 01:20:57 1998  Jeffrey A Law  (law@cygnus.com)
        * g++.1 (-traditional): Remove duplicated documentation.
        * g++.1 (-traditional): Remove duplicated documentation.
1998-07-11  Mark Mitchell  
1998-07-11  Mark Mitchell  
        * method.c (flush_repeats): Add nrepeats parameter.
        * method.c (flush_repeats): Add nrepeats parameter.
        (issue_nrepeats): Likewise.
        (issue_nrepeats): Likewise.
        (is_back_referenceable_type): New function.  Don't back-reference
        (is_back_referenceable_type): New function.  Don't back-reference
        TEMPLATE_TYPE_PARMs as well as simple types like integers.
        TEMPLATE_TYPE_PARMs as well as simple types like integers.
        (build_mangled_name_for_type): Likewise.
        (build_mangled_name_for_type): Likewise.
        (build_mangled_name_for_type_with_Gcode): Likewise.
        (build_mangled_name_for_type_with_Gcode): Likewise.
        (lasttype): Remove.
        (lasttype): Remove.
        (nrepeats): Likewise.
        (nrepeats): Likewise.
        (Nrepeats): Likewise.
        (Nrepeats): Likewise.
        (start_squangling): Don't clear the variables removed above.
        (start_squangling): Don't clear the variables removed above.
        (end_squangling): Likewise.
        (end_squangling): Likewise.
        (flush_repeats): Tidy.  Use nrepeats parameter rather than
        (flush_repeats): Tidy.  Use nrepeats parameter rather than
        Nrepeats global.
        Nrepeats global.
        (issue_nrepeats): Likewise, but with nrepeats global.  Use
        (issue_nrepeats): Likewise, but with nrepeats global.  Use
        is_backreferenceable_type.
        is_backreferenceable_type.
        (build_overload_nested_name): Tidy.  Add comment.  Use
        (build_overload_nested_name): Tidy.  Add comment.  Use
        build_mangled_name_for_type.
        build_mangled_name_for_type.
        (build_underscore_int): Comment.
        (build_underscore_int): Comment.
        (build_overload_scope_ref): Use build_mangled_name_for_type.
        (build_overload_scope_ref): Use build_mangled_name_for_type.
        (build_overload_int): Likewise.
        (build_overload_int): Likewise.
        (build_template_template_parm_names): Tidy.
        (build_template_template_parm_names): Tidy.
        (build_template_parm_names): Use build_mangled_name_for_type.
        (build_template_parm_names): Use build_mangled_name_for_type.
        (build_overload_identifier): Add comments.
        (build_overload_identifier): Add comments.
        (build_mangled_name_for_type_with_Gcode): Split out from
        (build_mangled_name_for_type_with_Gcode): Split out from
        build_mangled_name.
        build_mangled_name.
        (build_mangled_name_for_type): Use it.
        (build_mangled_name_for_type): Use it.
        (build_mangled_name): Rework to use build_mangled_name_for_type
        (build_mangled_name): Rework to use build_mangled_name_for_type
        and to not use global nrepeats/Nrepeats.  Tidy.
        and to not use global nrepeats/Nrepeats.  Tidy.
        (process_modifiers): Tidy.
        (process_modifiers): Tidy.
        (check_btype): Use is_backreferenceable_type.  Add comment.
        (check_btype): Use is_backreferenceable_type.  Add comment.
        Rename `node' to `type'.
        Rename `node' to `type'.
        (process_overload_item): Set numeric_output_need_bar here.
        (process_overload_item): Set numeric_output_need_bar here.
        Use build_mangled_name_for_type.  Tidy.
        Use build_mangled_name_for_type.  Tidy.
        (build_decl_overload_real): Tidy.  Don't use Nrepeats.  Use
        (build_decl_overload_real): Tidy.  Don't use Nrepeats.  Use
        build_mangled_name_for_type.
        build_mangled_name_for_type.
        * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
        * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO
        for TYPE_DECLs.
        for TYPE_DECLs.
1998-07-08  Vladimir N. Makarov  
1998-07-08  Vladimir N. Makarov  
        * cp-tree.h (warn_long_long): Define.
        * cp-tree.h (warn_long_long): Define.
        * decl.c (grokdeclarator): Add flag `warn_long_long' as guard for
        * decl.c (grokdeclarator): Add flag `warn_long_long' as guard for
        warning "ANSI C++ does not support `long long'".
        warning "ANSI C++ does not support `long long'".
        * decl2.c (warn_long_long): Define.
        * decl2.c (warn_long_long): Define.
        (lang_decode_option): Parse -Wlong-long, -Wno-long-long options.
        (lang_decode_option): Parse -Wlong-long, -Wno-long-long options.
1998-07-07  Jason Merrill  
1998-07-07  Jason Merrill  
        * decl.c (xref_tag): Handle attributes between 'class' and name.
        * decl.c (xref_tag): Handle attributes between 'class' and name.
        * parse.y (aggr): Likewise.
        * parse.y (aggr): Likewise.
        * semantics.c (finish_class_definition): Likewise.
        * semantics.c (finish_class_definition): Likewise.
        * Makefile.in (EXPECTED): Adjust.
        * Makefile.in (EXPECTED): Adjust.
        * cp-tree.h: Declare flag_optional_diags and warn_multichar.
        * cp-tree.h: Declare flag_optional_diags and warn_multichar.
        * decl2.c: Define them.
        * decl2.c: Define them.
        (lang_decode_option): Handle them.
        (lang_decode_option): Handle them.
        * lang-options.h: Add -foptional-diags.
        * lang-options.h: Add -foptional-diags.
        * class.c (finish_struct): Don't complain about multiple meanings of
        * class.c (finish_struct): Don't complain about multiple meanings of
        name if -fno-optional-diags.
        name if -fno-optional-diags.
        * decl.c (pushdecl_class_level): Likewise.
        * decl.c (pushdecl_class_level): Likewise.
        * lex.c (real_yylex): Check warn_multichar.
        * lex.c (real_yylex): Check warn_multichar.
1998-07-06  Jason Merrill  
1998-07-06  Jason Merrill  
        * decl.c (lookup_tag): Use CP_DECL_CONTEXT.
        * decl.c (lookup_tag): Use CP_DECL_CONTEXT.
        * tree.c (make_binfo): Fix length.
        * tree.c (make_binfo): Fix length.
1998-06-30  Benjamin Kosnik  
1998-06-30  Benjamin Kosnik  
        * decl2.c (lang_decode_option): Remove warn_template_debugging.
        * decl2.c (lang_decode_option): Remove warn_template_debugging.
        * lang-options.h: Likewise.
        * lang-options.h: Likewise.
Mon Jun 29 20:17:40 1998  Kaveh R. Ghazi  
Mon Jun 29 20:17:40 1998  Kaveh R. Ghazi  
        * except.c (build_eh_type_type_ref): Remove unused variable `susp'.
        * except.c (build_eh_type_type_ref): Remove unused variable `susp'.
        (process_start_catch_block): Likewise for variables
        (process_start_catch_block): Likewise for variables
        `false_label_rtx', `call_rtx' and `return_value_rtx'.
        `false_label_rtx', `call_rtx' and `return_value_rtx'.
1998-06-29  Brendan Kehoe  
1998-06-29  Brendan Kehoe  
        * tree.c (build_srcloc): Make sure we allocate this node on the
        * tree.c (build_srcloc): Make sure we allocate this node on the
        permanent obstack.
        permanent obstack.
Sat Jun 27 23:34:18 1998  Fred Fish  
Sat Jun 27 23:34:18 1998  Fred Fish  
        * g++spec.c (NEED_MATH_LIBRARY): Define to 1 if not already defined.
        * 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): Initialize need_math with NEED_MATH_LIBRARY.
        (lang_specific_driver): Only add -lm automatically if need_math is
        (lang_specific_driver): Only add -lm automatically if need_math is
        nonzero.
        nonzero.
Sat Jun 27 12:22:56 1998  Jeffrey A Law  (law@cygnus.com)
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
        * Make-lang.in (g++): Depend on mkstemp.o.  Link in mkstemp.o
Sat Jun 27 07:36:09 1998  Kaveh R. Ghazi  
Sat Jun 27 07:36:09 1998  Kaveh R. Ghazi  
        * Makefile.in (EXPR_H): New dependency variable.
        * Makefile.in (EXPR_H): New dependency variable.
        (decl2.o): Depend on $(EXPR_H).
        (decl2.o): Depend on $(EXPR_H).
        (typeck.o): Likewise.
        (typeck.o): Likewise.
        (init.o): Likewise.
        (init.o): Likewise.
        (expr.o): Likewise.
        (expr.o): Likewise.
1998-06-25  Benjamin Kosnik  
1998-06-25  Benjamin Kosnik  
        * decl.c (start_enum): Put local enums on permanent_obstack.
        * decl.c (start_enum): Put local enums on permanent_obstack.
1998-06-25  Mark Mitchell  
1998-06-25  Mark Mitchell  
        * cp-tree.h (c_get_alias_set): Declare.
        * cp-tree.h (c_get_alias_set): Declare.
        * decl.c (init_decl_processing): Set lang_get_alias_set.
        * decl.c (init_decl_processing): Set lang_get_alias_set.
1998-06-25  Andrew MacLeod  
1998-06-25  Andrew MacLeod  
        * cp-tree.h (mark_all_runtime_matches): Add function prototype.
        * cp-tree.h (mark_all_runtime_matches): Add function prototype.
        * except.c (mark_all_runtime_matches): Set TREE_SYMBOL_REFERENCED
        * except.c (mark_all_runtime_matches): Set TREE_SYMBOL_REFERENCED
        flag for all function decls which are in the exception table.
        flag for all function decls which are in the exception table.
        * exception.cc (__cplus_type_matcher): Check for CATCH_ALL_TYPE match.
        * exception.cc (__cplus_type_matcher): Check for CATCH_ALL_TYPE match.
        * decl2.c (finish_file): Call mark_all_runtime_matches to make sure
        * decl2.c (finish_file): Call mark_all_runtime_matches to make sure
        code is emitted for any referenced rtti function.
        code is emitted for any referenced rtti function.
1998-06-25  Dave Brolley  
1998-06-25  Dave Brolley  
        * lang-specs.h: Use new | syntax to eliminate
        * lang-specs.h: Use new | syntax to eliminate
        string concatenation.
        string concatenation.
1998-06-25  Jason Merrill  
1998-06-25  Jason Merrill  
        * cp-tree.h (CP_DECL_CONTEXT): New macro.
        * cp-tree.h (CP_DECL_CONTEXT): New macro.
        * decl2.c (is_namespace_ancestor, lookup_using_namespace): Use it.
        * decl2.c (is_namespace_ancestor, lookup_using_namespace): Use it.
        * method.c (build_overload_nested_name): Likewise.
        * method.c (build_overload_nested_name): Likewise.
        * sig.c (build_signature_pointer_or_reference_type): Don't set
        * sig.c (build_signature_pointer_or_reference_type): Don't set
        DECL_CONTEXT.
        DECL_CONTEXT.
1998-06-24  Martin v. Löwis  
1998-06-24  Martin v. Löwis  
        Set DECL_CONTEXT for globals to NULL_TREE instead of global_namespace.
        Set DECL_CONTEXT for globals to NULL_TREE instead of global_namespace.
        * cp-tree.h (FROB_CONTEXT): New macro.
        * cp-tree.h (FROB_CONTEXT): New macro.
        (DECL_MAIN_P): ::main should have a DECL_CONTEXT of NULL_TREE.
        (DECL_MAIN_P): ::main should have a DECL_CONTEXT of NULL_TREE.
        * decl.c (namespace_binding): Replace NULL_TREE with
        * decl.c (namespace_binding): Replace NULL_TREE with
        global_namespace.
        global_namespace.
        (set_namespace_binding, pop_namespace, lookup_name_real): Likewise.
        (set_namespace_binding, pop_namespace, lookup_name_real): Likewise.
        * decl2.c (is_namespace_ancestor, lookup_using_namespace):
        * decl2.c (is_namespace_ancestor, lookup_using_namespace):
        Likewise.
        Likewise.
        * decl.c (pushtag): Use FROB_CONTEXT.
        * decl.c (pushtag): Use FROB_CONTEXT.
        (pushdecl, make_typename_type, define_function, grokdeclarator):
        (pushdecl, make_typename_type, define_function, grokdeclarator):
        Likewise.
        Likewise.
        * decl2.c (set_decl_namespace, do_namespace_alias): Likewise.
        * decl2.c (set_decl_namespace, do_namespace_alias): Likewise.
        * pt.c (push_template_decl_real, lookup_template_class, tsubst):
        * pt.c (push_template_decl_real, lookup_template_class, tsubst):
        Likewise.
        Likewise.
        * decl2.c (decl_namespace): Return global_namespace if no context.
        * decl2.c (decl_namespace): Return global_namespace if no context.
        * method.c (build_overload_nested_name): Expect null as context.
        * method.c (build_overload_nested_name): Expect null as context.
        * pt.c (mangle_class_name_for_template): Do nothing for null
        * pt.c (mangle_class_name_for_template): Do nothing for null
        contexts.
        contexts.
        (lookup_template_class): Allow for null id_context.
        (lookup_template_class): Allow for null id_context.
1998-06-25  Richard Henderson  
1998-06-25  Richard Henderson  
        * method.c (emit_thunk): Set current_function_is_thunk for the
        * method.c (emit_thunk): Set current_function_is_thunk for the
        ASM_OUTPUT_MI_THUNK case as well.
        ASM_OUTPUT_MI_THUNK case as well.
1998-06-23  Andrew MacLeod  
1998-06-23  Andrew MacLeod  
        * exception.cc (__cplus_type_matcher): Get a match_info pointer
        * exception.cc (__cplus_type_matcher): Get a match_info pointer
        instead of an exception table entry as a parameter.
        instead of an exception table entry as a parameter.
1998-06-23  Andrew MacLeod  
1998-06-23  Andrew MacLeod  
        * parse.y (function_try_block): Don't call start_catch_handler.
        * parse.y (function_try_block): Don't call start_catch_handler.
        * except.c (call_eh_info): Remove coerced field from declaration.
        * except.c (call_eh_info): Remove coerced field from declaration.
        (build_eh_type_type_ref): New function to create an address of a
        (build_eh_type_type_ref): New function to create an address of a
        rtti function for the new style exception tables.
        rtti function for the new style exception tables.
        (expand_start_catch_block): Split function, this contains the
        (expand_start_catch_block): Split function, this contains the
        common part.
        common part.
        (process_start_catch_block_old): New function to perform the rest
        (process_start_catch_block_old): New function to perform the rest
        of expand_start_catch_block under old style exceptions.
        of expand_start_catch_block under old style exceptions.
        (process_start_catch_block_old): New function to perform the rest
        (process_start_catch_block_old): New function to perform the rest
        of expand_start_catch_block under new style exceptions.
        of expand_start_catch_block under new style exceptions.
        (expand_end_catch_block): Only pop the false label off the stack under
        (expand_end_catch_block): Only pop the false label off the stack under
        the old style of exceptions.
        the old style of exceptions.
        * semantics.c (finish_try_block): Don't call start_catch_handler.
        * semantics.c (finish_try_block): Don't call start_catch_handler.
        * exception.cc (struct cp_eh_info): Add original_value field.
        * exception.cc (struct cp_eh_info): Add original_value field.
        (__cplus_type_matcher): Perform type matching on the original exception
        (__cplus_type_matcher): Perform type matching on the original exception
        value, and if we have a match, set the current value.
        value, and if we have a match, set the current value.
        (__cp_push_exception): Set the original exception value.
        (__cp_push_exception): Set the original exception value.
1998-06-23  Jason Merrill  
1998-06-23  Jason Merrill  
        * call.c (joust): Fix confusing conversion warning.
        * call.c (joust): Fix confusing conversion warning.
        * call.c (build_op_delete_call): Add placement parm.  Check
        * call.c (build_op_delete_call): Add placement parm.  Check
        LOOKUP_SPECULATIVELY.
        LOOKUP_SPECULATIVELY.
        * cp-tree.h, decl2.c, init.c: Adjust.
        * cp-tree.h, decl2.c, init.c: Adjust.
        * decl.c (finish_function): Use it.
        * decl.c (finish_function): Use it.
        * pt.c (tsubst): Diagnose creating void fields or variables.
        * pt.c (tsubst): Diagnose creating void fields or variables.
Mon Jun 22 08:50:26 1998  Kaveh R. Ghazi  
Mon Jun 22 08:50:26 1998  Kaveh R. Ghazi  
        * call.c (build_scoped_method_call): Remove unused variable `tmp'.
        * call.c (build_scoped_method_call): Remove unused variable `tmp'.
        * cp-tree.h (check_dtor_name): Add prototype.
        * cp-tree.h (check_dtor_name): Add prototype.
        * init.c (expand_member_init): Remove unused variables
        * init.c (expand_member_init): Remove unused variables
        `ptr_type_node', `parm' and `rval'.
        `ptr_type_node', `parm' and `rval'.
        * ptree.c (print_lang_type): Use HOST_WIDE_INT_PRINT_DEC specifier
        * ptree.c (print_lang_type): Use HOST_WIDE_INT_PRINT_DEC specifier
        in call to fprintf.
        in call to fprintf.
        (lang_print_xnode): Likewise.
        (lang_print_xnode): Likewise.
        * typeck2.c (enum_name_string): Cast argument to sprintf to long
        * typeck2.c (enum_name_string): Cast argument to sprintf to long
        and use %ld specifier.
        and use %ld specifier.
        * xref.c (GNU_xref_end_scope): Use HOST_WIDE_INT_PRINT_DEC
        * xref.c (GNU_xref_end_scope): Use HOST_WIDE_INT_PRINT_DEC
        specifier in call to fprintf.
        specifier in call to fprintf.
        (GNU_xref_member): Cast argument to sprintf to int.
        (GNU_xref_member): Cast argument to sprintf to int.
Fri Jun 19 23:22:42 1998  Bruno Haible  
Fri Jun 19 23:22:42 1998  Bruno Haible  
        * typeck2.c (pop_init_level): Warn about implicit zero initialization
        * typeck2.c (pop_init_level): Warn about implicit zero initialization
        of struct members.
        of struct members.
Thu Jun 18 09:32:32 1998  Kaveh R. Ghazi  
Thu Jun 18 09:32:32 1998  Kaveh R. Ghazi  
        * cp-tree.h: Prototype function `check_java_method'.
        * cp-tree.h: Prototype function `check_java_method'.
1998-06-17  Jason Merrill  
1998-06-17  Jason Merrill  
        * class.c (finish_struct): Make conflicting use of id a pedwarn.
        * class.c (finish_struct): Make conflicting use of id a pedwarn.
        * decl.c (pushdecl_class_level): Likewise.
        * decl.c (pushdecl_class_level): Likewise.
1998-06-17  Mark Mitchell  
1998-06-17  Mark Mitchell  
        * pt.c (convert_nontype_argument): Issue an error when presented
        * pt.c (convert_nontype_argument): Issue an error when presented
        with an integer (real) constant that cannot be simplified to an
        with an integer (real) constant that cannot be simplified to an
        INT_CST (REAL_CST).
        INT_CST (REAL_CST).
        * cp-tree.h (c_get_alias_set): Remove declaration added in
        * cp-tree.h (c_get_alias_set): Remove declaration added in
        1998-06-13 change that should never have been checked in.
        1998-06-13 change that should never have been checked in.
1998-06-17  Jason Merrill  
1998-06-17  Jason Merrill  
        * typeck.c (build_binary_op_nodefault): Change % in format strings
        * typeck.c (build_binary_op_nodefault): Change % in format strings
        to %%.
        to %%.
        * decl.c (grokvardecl): Don't build_static_name for decls that
        * decl.c (grokvardecl): Don't build_static_name for decls that
        aren't at namespace scope.
        aren't at namespace scope.
        * init.c (perform_member_init): Catch default-initialization of
        * init.c (perform_member_init): Catch default-initialization of
        references.
        references.
1998-06-17  Mark Mitchell  
1998-06-17  Mark Mitchell  
        * errfn.c (cp_thing): Handle the `%%' formatting sequence.
        * errfn.c (cp_thing): Handle the `%%' formatting sequence.
1998-06-17  Jason Merrill  
1998-06-17  Jason Merrill  
        * method.c (hack_identifier): Complain about getting a namespace
        * method.c (hack_identifier): Complain about getting a namespace
        or class template.
        or class template.
        * typeck.c (decay_conversion): Remove check for namespaces.
        * typeck.c (decay_conversion): Remove check for namespaces.
        * typeck2.c (incomplete_type_error): Likewise.
        * typeck2.c (incomplete_type_error): Likewise.
        * parse.y (template_arg): Add PTYPENAME expansion.
        * parse.y (template_arg): Add PTYPENAME expansion.
1998-06-16  Andrew MacLeod  
1998-06-16  Andrew MacLeod  
        * decl.c (grokvardecl): Don't build external assembler names for
        * decl.c (grokvardecl): Don't build external assembler names for
        TYPENAMEs in other namespaces as there is no declarator.
        TYPENAMEs in other namespaces as there is no declarator.
        * error.c (cp_file_of, cp_line_of): Don't extract file or line number
        * error.c (cp_file_of, cp_line_of): Don't extract file or line number
        info from DECL_CONTEXT if it is NULL.
        info from DECL_CONTEXT if it is NULL.
1998-06-16  Jason Merrill  
1998-06-16  Jason Merrill  
        * call.c (check_dtor_name): Split out.
        * call.c (check_dtor_name): Split out.
        (build_scoped_method_call): Use it.
        (build_scoped_method_call): Use it.
        (build_method_call): Use it.
        (build_method_call): Use it.
        * init.c (build_offset_ref): Use it.
        * init.c (build_offset_ref): Use it.
        * typeck.c (build_static_cast): Fix handling of pointers to members.
        * typeck.c (build_static_cast): Fix handling of pointers to members.
        * decl.c (finish_function): Just return nothing from a constructor.
        * decl.c (finish_function): Just return nothing from a constructor.
        * typeck.c (c_expand_return): Complain about returning a void
        * typeck.c (c_expand_return): Complain about returning a void
        expression from a destructor.
        expression from a destructor.
1998-06-13  Mark Mitchell  
1998-06-13  Mark Mitchell  
        * class.c (alter_access): Accept a BINFO explaining how to get
        * class.c (alter_access): Accept a BINFO explaining how to get
        from the entity whose accessed is being altered to the type doing
        from the entity whose accessed is being altered to the type doing
        the altering.
        the altering.
        (handle_using_decl): New function containing code split out from ...
        (handle_using_decl): New function containing code split out from ...
        (finish_struct_1): Here.
        (finish_struct_1): Here.
        * cp-tree.h (complete_type_or_else): Declare.
        * cp-tree.h (complete_type_or_else): Declare.
        * init.c (build_new_1, build_delete): Use it.
        * init.c (build_new_1, build_delete): Use it.
        * typeck.c (require_complete_type): Use complete_type, rather than
        * typeck.c (require_complete_type): Use complete_type, rather than
        expanding it inline.
        expanding it inline.
        (complete_type_or_else): New function.
        (complete_type_or_else): New function.
        (build_component_ref): Use it.
        (build_component_ref): Use it.
        (pointer_int_sum): Make sure the type pointed to is complete.
        (pointer_int_sum): Make sure the type pointed to is complete.
        (pointer_diff): Likewise.
        (pointer_diff): Likewise.
        * pt.c (for_each_template_parm): Traverse the TYPE_CONTEXT for
        * pt.c (for_each_template_parm): Traverse the TYPE_CONTEXT for
        types.
        types.
        * search.c (get_matching_virtual): Note that member templates
        * search.c (get_matching_virtual): Note that member templates
        cannot override virtual functions.
        cannot override virtual functions.
1998-06-12  Brendan Kehoe  
1998-06-12  Brendan Kehoe  
        * pt.c (check_explicit_specialization): If DECLARATOR turned into
        * pt.c (check_explicit_specialization): If DECLARATOR turned into
        an error_mark_node from lookup_template_function, return the same.
        an error_mark_node from lookup_template_function, return the same.
        (determine_specialization): Also make sure TEMPLATE_ID isn't an
        (determine_specialization): Also make sure TEMPLATE_ID isn't an
        error_mark_node, before we try to read its operands.
        error_mark_node, before we try to read its operands.
        * decl.c (grokdeclarator): If we got an error_mark_node from
        * decl.c (grokdeclarator): If we got an error_mark_node from
        check_explicit_specialization, just return it right back.
        check_explicit_specialization, just return it right back.
1998-06-12  Mark Mitchell  
1998-06-12  Mark Mitchell  
        * class.c (instantiate_type): Don't treat template-ids that don't
        * class.c (instantiate_type): Don't treat template-ids that don't
        specify any template arguments as equivalent to ordinary
        specify any template arguments as equivalent to ordinary
        identifiers.  Use OFFSET_REF instead of SCOPE_REF to refer to
        identifiers.  Use OFFSET_REF instead of SCOPE_REF to refer to
        pointer-to-members for member templates.  Tidy slightly.
        pointer-to-members for member templates.  Tidy slightly.
        * cp-tree.def (TEMPLATE_ID_EXPR): Revise documentation.
        * cp-tree.def (TEMPLATE_ID_EXPR): Revise documentation.
        * init.c (build_offset_ref): Handle template-ids like ordinary
        * init.c (build_offset_ref): Handle template-ids like ordinary
        identifiers, for the most part, but store a TEMPLATE_ID_EXPR in the
        identifiers, for the most part, but store a TEMPLATE_ID_EXPR in the
        offset part of the OFFSET_REF.
        offset part of the OFFSET_REF.
        * typeck.c (build_unary_op): Change check for unknown types to
        * typeck.c (build_unary_op): Change check for unknown types to
        look for OFFSET_REFs, not SCOPE_REFs.
        look for OFFSET_REFs, not SCOPE_REFs.
1998-06-11  Mark Mitchell  
1998-06-11  Mark Mitchell  
        * pt.c (is_member_template_class): New function.
        * pt.c (is_member_template_class): New function.
        (push_template_decl_real): Use it.
        (push_template_decl_real): Use it.
1998-06-11  Benjamin Kosnik  
1998-06-11  Benjamin Kosnik  
        * friend.c (do_friend): Add support for nested classes using
        * friend.c (do_friend): Add support for nested classes using
        member functions of the enclosing class as friends.
        member functions of the enclosing class as friends.
1998-06-10  Mark Mitchell  
1998-06-10  Mark Mitchell  
        * call.c (convert_default_arg): Make global, not static.
        * call.c (convert_default_arg): Make global, not static.
        (convert_arg_for_ellipsis): Split out from ...
        (convert_arg_for_ellipsis): Split out from ...
        (build_over_call): Here.
        (build_over_call): Here.
        * cp-tree.h (convert_default_arg); Declare.
        * cp-tree.h (convert_default_arg); Declare.
        (convert_arg_to_ellipsis): Likewise.
        (convert_arg_to_ellipsis): Likewise.
        (do_member_init): Remove.
        (do_member_init): Remove.
        * init.c (do_member_init): Remove; this code is dead.
        * init.c (do_member_init): Remove; this code is dead.
        (expand_member_init): Remove much of this code; it is dead.
        (expand_member_init): Remove much of this code; it is dead.
        * typeck.c (convert_arguments): Use convert_default_arg and
        * typeck.c (convert_arguments): Use convert_default_arg and
        convert_arg_for_ellipsis, rather than duplicating here.
        convert_arg_for_ellipsis, rather than duplicating here.
        * call.c (convert_like): Don't fail silently if
        * call.c (convert_like): Don't fail silently if
        build_user_type_conversion fails.  Always return error_mark_node
        build_user_type_conversion fails.  Always return error_mark_node
        for failure.
        for failure.
1998-06-10  Jason Merrill  
1998-06-10  Jason Merrill  
        * search.c (covariant_return_p): Complain about ambiguous base.
        * search.c (covariant_return_p): Complain about ambiguous base.
        * typeck.c (build_component_ref): Diagnose ref to nested type.
        * typeck.c (build_component_ref): Diagnose ref to nested type.
1998-06-10  Brendan Kehoe  
1998-06-10  Brendan Kehoe  
        * decl.c (grokparms): Check that INIT isn't an error_mark_node
        * decl.c (grokparms): Check that INIT isn't an error_mark_node
        before giving error about invalid type for default arg.
        before giving error about invalid type for default arg.
1998-06-10  Jason Merrill  
1998-06-10  Jason Merrill  
        * call.c (build_method_call): Fix thinko.
        * call.c (build_method_call): Fix thinko.
1998-06-10  Dave Brolley  
1998-06-10  Dave Brolley  
        * decl2.c (lang_decode_option): New argc/argv interface.
        * decl2.c (lang_decode_option): New argc/argv interface.
        * cp-tree.h (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
        * lang-specs.h (default_compilers): Only call cpp if -E, -M or -MM is
        specified for cpplib-enabled compilers.
        specified for cpplib-enabled compilers.
        * lex.c (lang_init): Don't check_newline for cpplib.
        * lex.c (lang_init): Don't check_newline for cpplib.
        (init_parse): Don't initialize cpplib here.
        (init_parse): Don't initialize cpplib here.
1998-06-10  Brendan Kehoe  
1998-06-10  Brendan Kehoe  
        * typeck.c (build_component_ref): Make sure FIELD has a lang_specific
        * typeck.c (build_component_ref): Make sure FIELD has a lang_specific
        piece before checking DECL_MUTABLE_P.
        piece before checking DECL_MUTABLE_P.
1998-06-10  John Carr  
1998-06-10  John Carr  
        * tree.c (debug_binfo): Make printf format match arguments.
        * tree.c (debug_binfo): Make printf format match arguments.
        * error.c (OB_PUTI): Make printf format match arguments.
        * error.c (OB_PUTI): Make printf format match arguments.
1998-06-10  Jason Merrill  
1998-06-10  Jason Merrill  
        * init.c (perform_member_init): Handle default-initialization.
        * init.c (perform_member_init): Handle default-initialization.
        * except.c (build_throw): Handle throwing NULL.
        * except.c (build_throw): Handle throwing NULL.
        * typeck.c (build_x_function_call): Use resolve_offset_ref.
        * typeck.c (build_x_function_call): Use resolve_offset_ref.
        * search.c (compute_access): Only strip an anonymous union
        * search.c (compute_access): Only strip an anonymous union
        for a FIELD_DECL.
        for a FIELD_DECL.
        * call.c (add_builtin_candidates): Tweak.
        * call.c (add_builtin_candidates): Tweak.
        * cvt.c (build_expr_type_conversion): Restore code for conversion
        * cvt.c (build_expr_type_conversion): Restore code for conversion
        from class types.
        from class types.
        * decl2.c (delete_sanity): Use it.  Clean up.
        * decl2.c (delete_sanity): Use it.  Clean up.
        * typeck.c (comp_ptr_ttypes_real): Fix cv-qual comparisons.
        * typeck.c (comp_ptr_ttypes_real): Fix cv-qual comparisons.
1998-06-10  Branko Cibej  
1998-06-10  Branko Cibej  
        * typeck.c (c_expand_return): Don't warn about void expressions on
        * typeck.c (c_expand_return): Don't warn about void expressions on
        return statements in functions returning void.
        return statements in functions returning void.
1998-06-09  Mark Mitchell  
1998-06-09  Mark Mitchell  
        * pt.c (fn_type_unification): Revise documentation.  Tidy.
        * pt.c (fn_type_unification): Revise documentation.  Tidy.
        (type_unification): Likewise.
        (type_unification): Likewise.
1998-06-09  Andrew MacLeod  
1998-06-09  Andrew MacLeod  
        * semantics.c (finish_try_block): Rename expand_start_catch, and delete
        * semantics.c (finish_try_block): Rename expand_start_catch, and delete
        expand_end_catch.
        expand_end_catch.
        * parse.y (function_try_block): Rename expand_start_catch, and delete
        * parse.y (function_try_block): Rename expand_start_catch, and delete
        expand_end_catch.
        expand_end_catch.
        * except.c (expand_end_eh_spec): Rename expand_start_catch, and delete
        * except.c (expand_end_eh_spec): Rename expand_start_catch, and delete
        expand_end_catch.
        expand_end_catch.
1998-06-09  Jason Merrill  
1998-06-09  Jason Merrill  
        * search.c (lookup_member): New fn.
        * search.c (lookup_member): New fn.
        * class.c (finish_struct_1): Use it.
        * class.c (finish_struct_1): Use it.
        * decl.c (lookup_name_real): Use it.
        * decl.c (lookup_name_real): Use it.
Mon Jun  8 20:45:52 1998  Kaveh R. Ghazi  
Mon Jun  8 20:45:52 1998  Kaveh R. Ghazi  
        * Makefile.in (decl2.o): Depend on dwarf2out.h and dwarfout.h.
        * Makefile.in (decl2.o): Depend on dwarf2out.h and dwarfout.h.
        * cp-tree.h: Add prototype for `maybe_print_template_context' and
        * cp-tree.h: Add prototype for `maybe_print_template_context' and
        `maybe_make_one_only'.
        `maybe_make_one_only'.
        * decl.c (auto_function): Remove unused variable `decl'.
        * decl.c (auto_function): Remove unused variable `decl'.
        * decl2.c: Include dwarf2out.h and dwarfout.h.
        * decl2.c: Include dwarf2out.h and dwarfout.h.
        * lex.c: Remove redundant declarations of `set_float_handler' and
        * lex.c: Remove redundant declarations of `set_float_handler' and
        `asm_out_file'.
        `asm_out_file'.
1998-06-08  Andrew MacLeod  
1998-06-08  Andrew MacLeod  
        * except.c (init_exception_processing): Remove NEW_EH_MODEL compile
        * except.c (init_exception_processing): Remove NEW_EH_MODEL compile
        time flag.  Call __cp_eh_info instead of __cp_exception_info.
        time flag.  Call __cp_eh_info instead of __cp_exception_info.
        * exception.cc (struct cp_eh_info): Remove NEW_EH_MODEL flag.
        * exception.cc (struct cp_eh_info): Remove NEW_EH_MODEL flag.
        (__cp_exception_info): Return offset into cp_eh_info structure to
        (__cp_exception_info): Return offset into cp_eh_info structure to
        match what use to be the start of this structure.
        match what use to be the start of this structure.
        (__cp_eh_info): New function to return a pointer to cp_eh_info struct.
        (__cp_eh_info): New function to return a pointer to cp_eh_info struct.
        (__cplus_type_matcher, __cp_push_exception): Remove NEW_EH_MODEL
        (__cplus_type_matcher, __cp_push_exception): Remove NEW_EH_MODEL
        compile time flag.
        compile time flag.
        (__uncatch_exception, __check_eh_spec, std::uncaught_exception): Call
        (__uncatch_exception, __check_eh_spec, std::uncaught_exception): Call
        __cp_eh_info instead of __cp_exception_info.
        __cp_eh_info instead of __cp_exception_info.
1998-06-08  Jason Merrill  
1998-06-08  Jason Merrill  
        * decl.c (cp_finish_decl): Disable inlining of extern inlines
        * decl.c (cp_finish_decl): Disable inlining of extern inlines
        with static variables.
        with static variables.
1998-06-08  Mark Mitchell  
1998-06-08  Mark Mitchell  
        * init.c (build_offset_ref): Correct previous change to use build,
        * init.c (build_offset_ref): Correct previous change to use build,
        not build_min.
        not build_min.
1998-06-07  Mark Mitchell  
1998-06-07  Mark Mitchell  
        * class.c (instantiate_type): Handle pointer-to-members where the
        * class.c (instantiate_type): Handle pointer-to-members where the
        member is a template.
        member is a template.
        * init.c (build_offset_ref): Likewise.
        * init.c (build_offset_ref): Likewise.
        * typeck.c (build_unary_op): Likewise.
        * typeck.c (build_unary_op): Likewise.
1998-06-07  Richard Henderson  
1998-06-07  Richard Henderson  
        * lex.c (lang_init_options): New function.
        * lex.c (lang_init_options): New function.
        (lang_init): Remove flag_exceptions == 2 hack.
        (lang_init): Remove flag_exceptions == 2 hack.
1998-06-05  Jason Merrill  
1998-06-05  Jason Merrill  
        * search.c (envelope_add_decl): Tweak for implicit typename.
        * search.c (envelope_add_decl): Tweak for implicit typename.
        * call.c (joust): Also warn about confusing conversion op/constructor
        * call.c (joust): Also warn about confusing conversion op/constructor
        overload resolution.
        overload resolution.
        * spew.c (yylex): Also return the TYPE_DECL if got_object.
        * spew.c (yylex): Also return the TYPE_DECL if got_object.
        Don't clear got_object after '~'.
        Don't clear got_object after '~'.
        * call.c (build_scoped_method_call): Tweak destructor handling.
        * call.c (build_scoped_method_call): Tweak destructor handling.
        (build_method_call): Likewise.
        (build_method_call): Likewise.
        * pt.c (tsubst_copy, case METHOD_CALL_EXPR): Don't mess with
        * pt.c (tsubst_copy, case METHOD_CALL_EXPR): Don't mess with
        TYPE_MAIN_VARIANT for destructors.
        TYPE_MAIN_VARIANT for destructors.
        * semantics.c (finish_object_call_expr): Complain about calling a
        * semantics.c (finish_object_call_expr): Complain about calling a
        TYPE_DECL.
        TYPE_DECL.
1998-06-05  Per Bothner  
1998-06-05  Per Bothner  
        * g++spec.c (lang_specific_pre_link, lang_specific_extra_ofiles):
        * g++spec.c (lang_specific_pre_link, lang_specific_extra_ofiles):
        Define - update needed by gcc.c change.
        Define - update needed by gcc.c change.
1998-06-05  Jason Merrill  
1998-06-05  Jason Merrill  
        * error.c (cp_printers): Use 'o' instead of '_' for the null entry.
        * error.c (cp_printers): Use 'o' instead of '_' for the null entry.
1998-06-05  Martin v. Löwis  
1998-06-05  Martin v. Löwis  
        * cp-tree.h (DECL_NAMESPACE_ALIAS, ORIGINAL_NAMESPACE): Declare.
        * cp-tree.h (DECL_NAMESPACE_ALIAS, ORIGINAL_NAMESPACE): Declare.
        * decl.c (lookup_name_real): Add namespaces_only parameter.
        * decl.c (lookup_name_real): Add namespaces_only parameter.
        If set, return only NAMESPACE_DECLs.
        If set, return only NAMESPACE_DECLs.
        (select_decl): Likewise.
        (select_decl): Likewise.
        (identifier_type_value): Give additional parameter.
        (identifier_type_value): Give additional parameter.
        (lookup_name_nonclass): Likewise.
        (lookup_name_nonclass): Likewise.
        (lookup_name): Likewise.
        (lookup_name): Likewise.
        (find_binding): Skip namespace aliases.
        (find_binding): Skip namespace aliases.
        (binding_for_name): Likewise.
        (binding_for_name): Likewise.
        (push_namespace): Check for namespace aliases.
        (push_namespace): Check for namespace aliases.
        (lookup_name_namespace_only): New function.
        (lookup_name_namespace_only): New function.
        (begin_only_namespace_names, end_only_namespace_names): New functions.
        (begin_only_namespace_names, end_only_namespace_names): New functions.
        * decl2.c (set_decl_namespace): Skip namespace aliases.
        * decl2.c (set_decl_namespace): Skip namespace aliases.
        (do_using_directive): Likewise.
        (do_using_directive): Likewise.
        (do_namespace_alias): Produce namespace aliases, fix alias
        (do_namespace_alias): Produce namespace aliases, fix alias
        redeclaration.
        redeclaration.
        * error.c (dump_decl): Support SCOPE_REF.
        * error.c (dump_decl): Support SCOPE_REF.
        * parse.y (extdef): Wrap lookup with namespace_only for namespace
        * parse.y (extdef): Wrap lookup with namespace_only for namespace
        aliases and using declarations.
        aliases and using declarations.
1998-06-04  Jason Merrill  
1998-06-04  Jason Merrill  
        * tree.c (really_overloaded_fn): Only see through one TREE_LIST.
        * tree.c (really_overloaded_fn): Only see through one TREE_LIST.
        * error.c (dump_expr): Clean up NEW_EXPR case.
        * error.c (dump_expr): Clean up NEW_EXPR case.
1998-06-04  Martin von Löwis  
1998-06-04  Martin von Löwis  
        Suggested by Brendan Kehoe
        Suggested by Brendan Kehoe
        * decl2.c (do_toplevel_using_decl): When decl is a TYPE_DECL,
        * decl2.c (do_toplevel_using_decl): When decl is a TYPE_DECL,
        treat it as using ::decl.
        treat it as using ::decl.
        * decl2.c (arg_assoc_type): Process unknown_type_node and OFFSET_TYPE.
        * decl2.c (arg_assoc_type): Process unknown_type_node and OFFSET_TYPE.
        * tree.c (mapcar): Support NEW_EXPR.
        * tree.c (mapcar): Support NEW_EXPR.
        * error.c (dump_expr): Support NEW_EXPR.
        * error.c (dump_expr): Support NEW_EXPR.
1998-06-03  Jason Merrill  
1998-06-03  Jason Merrill  
        * method.c (make_thunk): Use overload machinery to make name.
        * method.c (make_thunk): Use overload machinery to make name.
        * search.c (covariant_return_p): New fn.
        * search.c (covariant_return_p): New fn.
        (get_matching_virtual): Use it.
        (get_matching_virtual): Use it.
        * init.c (build_new_1): Fix check for void.
        * init.c (build_new_1): Fix check for void.
1998-06-01  Per Bothner  
1998-06-01  Per Bothner  
        * cp-tree.h (TYPE_FOR_JAVA):  New macro.
        * cp-tree.h (TYPE_FOR_JAVA):  New macro.
        * decl.c, cp-tree.h (java_byte_type_node, java_short_type_node,
        * 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_int_type_node, java_long_type_node, java_float_type_node,
        java_double_type_node, java_char_type_node, java_boolean_type_node):
        java_double_type_node, java_char_type_node, java_boolean_type_node):
        New "primitive" types, with predefined names __java_byte etc.
        New "primitive" types, with predefined names __java_byte etc.
        (record_builtin_java_type):  New function.
        (record_builtin_java_type):  New function.
        (init_decl_processing):  Make Java types with record_builtin_java_type.
        (init_decl_processing):  Make Java types with record_builtin_java_type.
        (pushtag, grokdeclarator):  Set TYPE_FOR_JAVA if in extern "JAVA".
        (pushtag, grokdeclarator):  Set TYPE_FOR_JAVA if in extern "JAVA".
        (xref_baseypes):  If base class was TYPE_FOR_JAVA, so is this class.
        (xref_baseypes):  If base class was TYPE_FOR_JAVA, so is this class.
        (grokfndecl):  Call check_java_method for Java classes.
        (grokfndecl):  Call check_java_method for Java classes.
        * method.c (is_java_type):  Removed.  Replaced with TYPE_FOR_JAVA.
        * method.c (is_java_type):  Removed.  Replaced with TYPE_FOR_JAVA.
        (process_overload_item):  Match types against specific
        (process_overload_item):  Match types against specific
        java_XX_type_node types, rather than using is_java_type.
        java_XX_type_node types, rather than using is_java_type.
        * class.c (finish_struct_1):  Don't add default copy constructor
        * class.c (finish_struct_1):  Don't add default copy constructor
        or operator= if TYPE_FOR_JAVA.
        or operator= if TYPE_FOR_JAVA.
        (pop_lang_conext):  Restore strict_prototyp proper if Java.
        (pop_lang_conext):  Restore strict_prototyp proper if Java.
        * decl2.c (acceptable_java_type, check_java_method):  New functions.
        * decl2.c (acceptable_java_type, check_java_method):  New functions.
        * pt.c (instantiate_class_template):  Copy TYPE_FOR_JAVA from pattern.
        * pt.c (instantiate_class_template):  Copy TYPE_FOR_JAVA from pattern.
        (tsubst):  Move common statement after if statement.
        (tsubst):  Move common statement after if statement.
        * typeck.c (comptypes):  If strict, TYPE_FOR_JAVA must match.
        * typeck.c (comptypes):  If strict, TYPE_FOR_JAVA must match.
1998-06-01  Jason Merrill  
1998-06-01  Jason Merrill  
        * pt.c (for_each_template_parm): Use first_rtl_op.
        * pt.c (for_each_template_parm): Use first_rtl_op.
        * tree.c (build_cplus_array_type_1): Also check index_type for
        * tree.c (build_cplus_array_type_1): Also check index_type for
        template parms.
        template parms.
1998-05-31  Jason Merrill  
1998-05-31  Jason Merrill  
        * pt.c (tsubst): Always copy BINFO_BASETYPES.
        * pt.c (tsubst): Always copy BINFO_BASETYPES.
1998-05-29  scott snyder  
1998-05-29  scott snyder  
        * tree.c (layout_basetypes): If we change TYPE_SIZE, change
        * tree.c (layout_basetypes): If we change TYPE_SIZE, change
        TYPE_SIZE_UNIT too.
        TYPE_SIZE_UNIT too.
1998-05-29  Mark Mitchell  
1998-05-29  Mark Mitchell  
        * decl.c (grokdeclarator): Don't complain about in-class
        * decl.c (grokdeclarator): Don't complain about in-class
        initialization of static consts if we don't really know the type
        initialization of static consts if we don't really know the type
        of the variable.
        of the variable.
1998-05-29  Jason Merrill  
1998-05-29  Jason Merrill  
        * cp-tree.h (DECL_DESTRUCTOR_P): New macro.
        * cp-tree.h (DECL_DESTRUCTOR_P): New macro.
        * method.c (build_destructor_name): New fn.
        * method.c (build_destructor_name): New fn.
        * decl2.c (maybe_retrofit_in_chrg): Split out...
        * decl2.c (maybe_retrofit_in_chrg): Split out...
        (grokclassfn): From here.  Reorganize.
        (grokclassfn): From here.  Reorganize.
        * decl.c (grok_ctor_properties): Make sure ctors for types with
        * decl.c (grok_ctor_properties): Make sure ctors for types with
        vbases have the in_chrg parm.
        vbases have the in_chrg parm.
        * pt.c (instantiate_class_template): Update
        * pt.c (instantiate_class_template): Update
        TYPE_USES_VIRTUAL_BASECLASSES from tsubsted bases.  Don't call
        TYPE_USES_VIRTUAL_BASECLASSES from tsubsted bases.  Don't call
        grok_*_properties.
        grok_*_properties.
        (tsubst): Call grok_ctor_properties and maybe_retrofit_in_chrg.
        (tsubst): Call grok_ctor_properties and maybe_retrofit_in_chrg.
1998-05-28  Mark Mitchell  
1998-05-28  Mark Mitchell  
        * pt.c (instantiate_decl): Make test for whether or not static
        * pt.c (instantiate_decl): Make test for whether or not static
        variables should be instantiated early match its comment.
        variables should be instantiated early match its comment.
1998-05-28  Jason Merrill  
1998-05-28  Jason Merrill  
        * decl.c (start_decl): Always pedwarn about vacuously redeclaring
        * decl.c (start_decl): Always pedwarn about vacuously redeclaring
        a member.
        a member.
        (start_function): Call check_default_args.
        (start_function): Call check_default_args.
        * decl2.c (grokfield): Don't call check_default_args.
        * decl2.c (grokfield): Don't call check_default_args.
        (check_default_args): Use cp_error_at.
        (check_default_args): Use cp_error_at.
        * lex.c (do_pending_defargs): Call check_default_args.
        * lex.c (do_pending_defargs): Call check_default_args.
1998-05-27  Brendan Kehoe  
1998-05-27  Brendan Kehoe  
        * call.c (build_method_call): Make sure get_type_value returns
        * call.c (build_method_call): Make sure get_type_value returns
        something before we try to use its TYPE_MAIN_VARIANT.
        something before we try to use its TYPE_MAIN_VARIANT.
        (build_scoped_method_call): Likewise.
        (build_scoped_method_call): Likewise.
1998-05-27  Jason Merrill  
1998-05-27  Jason Merrill  
        * typeck2.c (digest_init): Complain about getting a TREE_LIST to
        * typeck2.c (digest_init): Complain about getting a TREE_LIST to
        initialize an array.
        initialize an array.
        * search.c (expand_upcast_fixups): Don't set DECL_CONTEXT and
        * search.c (expand_upcast_fixups): Don't set DECL_CONTEXT and
        DECL_VIRTUAL_P.
        DECL_VIRTUAL_P.
        * friend.c (do_friend): Clarify template warning.
        * friend.c (do_friend): Clarify template warning.
1998-05-27  Mark Mitchell  
1998-05-27  Mark Mitchell  
        * decl.c (shadow_label): Don't treat decls as identifiers.
        * decl.c (shadow_label): Don't treat decls as identifiers.
        (maybe_push_to_top_level): Clear shadowed_labels.
        (maybe_push_to_top_level): Clear shadowed_labels.
        * pt.c (instantiate_decl): Reset lineno and filename after calling
        * pt.c (instantiate_decl): Reset lineno and filename after calling
        regenerate_decl_from_template.
        regenerate_decl_from_template.
        * decl.c (grokdeclarator): Don't try to use TYPE_OBSTACK on an
        * decl.c (grokdeclarator): Don't try to use TYPE_OBSTACK on an
        error_mark_node.
        error_mark_node.
1998-05-27  Kevin Buhr  
1998-05-27  Kevin Buhr  
        * parse.y (base_class): Use is_aggr_type, not IS_AGGR_TYPE.
        * parse.y (base_class): Use is_aggr_type, not IS_AGGR_TYPE.
1998-05-26  Kriang Lerdsuwanakij  
1998-05-26  Kriang Lerdsuwanakij  
        * pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
        * pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
        (convert_nontype_argument): Handle cases when nontype template
        (convert_nontype_argument): Handle cases when nontype template
        parameters become classes after substitution.
        parameters become classes after substitution.
1998-05-26  Mark Mitchell  
1998-05-26  Mark Mitchell  
        * friend.c (is_friend): Use comptypes, rather than == to compare
        * friend.c (is_friend): Use comptypes, rather than == to compare
        types.  Modify for new representation of template friends.
        types.  Modify for new representation of template friends.
        (make_friend_class): Likewise.
        (make_friend_class): Likewise.
        * pt.c (tsubst_friend_class): Undo 1998-05-21 change.  Tweak.
        * pt.c (tsubst_friend_class): Undo 1998-05-21 change.  Tweak.
        (instantiate_class_template): Deal with template friends.
        (instantiate_class_template): Deal with template friends.
        * decl.c (store_parm_decls): Remove redundant call to
        * decl.c (store_parm_decls): Remove redundant call to
        expand_main_function.
        expand_main_function.
1998-05-26  Benjamin Kosnik  
1998-05-26  Benjamin Kosnik  
        * decl.c (start_decl): Check for DECL_LANG_SPECIFIC before
        * decl.c (start_decl): Check for DECL_LANG_SPECIFIC before
        DECL_USE_TEMPLATE.
        DECL_USE_TEMPLATE.
1998-05-26  Per Bothner  
1998-05-26  Per Bothner  
        * language_as_string:  Handle lang_java.
        * language_as_string:  Handle lang_java.
1998-05-26  Jason Merrill  
1998-05-26  Jason Merrill  
        * decl.c (pushdecl): Don't copy the type_decl.
        * decl.c (pushdecl): Don't copy the type_decl.
1998-05-26  Martin v. Löwis  
1998-05-26  Martin v. Löwis  
        * class.c (pushclass): Always store TYPE_MAIN_VARIANT in
        * class.c (pushclass): Always store TYPE_MAIN_VARIANT in
        current_class_type.
        current_class_type.
        * decl.c (grokdeclarator): Put typedefs on the type's obstack.
        * decl.c (grokdeclarator): Put typedefs on the type's obstack.
        * parse.y (complex_direct_notype_declarator): Use $1 to access
        * parse.y (complex_direct_notype_declarator): Use $1 to access
        scope of notype_qualified_id.
        scope of notype_qualified_id.
1998-05-26  Dave Brolley  
1998-05-26  Dave Brolley  
        * lex.c (parse_options,yy_cur,yy_lim): Add for cpplib.
        * lex.c (parse_options,yy_cur,yy_lim): Add for cpplib.
        (init_parse): Initialize cpplib interface.
        (init_parse): Initialize cpplib interface.
        * Makefile.in (CXX_OBJS): Make sure dependencies never end with an
        * Makefile.in (CXX_OBJS): Make sure dependencies never end with an
        empty continuation.
        empty continuation.
1998-05-26  Mark Mitchell  
1998-05-26  Mark Mitchell  
        * decl.c (pushtag): Avoid crashing on erroneous input.
        * decl.c (pushtag): Avoid crashing on erroneous input.
1998-05-25  Martin v. Löwis  
1998-05-25  Martin v. Löwis  
        * decl.c (push_namespace): Only produce one unique name for
        * decl.c (push_namespace): Only produce one unique name for
        anonymous namespaces.
        anonymous namespaces.
        (get_unique_name): Remove.
        (get_unique_name): Remove.
1998-05-25  Mark Mitchell  
1998-05-25  Mark Mitchell  
        * call.c (tourney): Don't do any extra comparisons.
        * call.c (tourney): Don't do any extra comparisons.
        * decl2.c (build_anon_union_vars): Don't crash on empty sub-unions.
        * decl2.c (build_anon_union_vars): Don't crash on empty sub-unions.
        * cp-tree.h (processing_template_parmlist): Declare.
        * cp-tree.h (processing_template_parmlist): Declare.
        * decl.c (pushtag): Don't call push_template_decl when we
        * decl.c (pushtag): Don't call push_template_decl when we
        shouldn't.
        shouldn't.
        * pt.c (processing_template_parmlist): New variable.
        * pt.c (processing_template_parmlist): New variable.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): New macro.
        (TMPL_ARGS_HAVE_MULTIPLE_LEVELS): New macro.
        (complete_template_args): Use it.
        (complete_template_args): Use it.
        (add_to_template_args): Likewise.
        (add_to_template_args): Likewise.
        (innermost_args): Likewise.
        (innermost_args): Likewise.
        (tsubst): Likewise.
        (tsubst): Likewise.
        (begin_template_parm_list): Use processing_template_parmlist.
        (begin_template_parm_list): Use processing_template_parmlist.
        (end_template_parm_list): Likewise.
        (end_template_parm_list): Likewise.
        * cp-tree.h (ANON_UNION_TYPE_P): New macro.
        * cp-tree.h (ANON_UNION_TYPE_P): New macro.
        * decl.c (grokdeclarator): Use it.
        * decl.c (grokdeclarator): Use it.
        * decl2.c (grok_x_components): Likewise.
        * decl2.c (grok_x_components): Likewise.
        * init.c (initializing_context): Likewise.
        * init.c (initializing_context): Likewise.
        * method.c (do_build_copy_constructor): Likewise.
        * method.c (do_build_copy_constructor): Likewise.
        (do_build_assign_ref): Likewise.
        (do_build_assign_ref): Likewise.
        * search.c (compute_access): Likewise.
        * search.c (compute_access): Likewise.
        * typeck.c (build_component_ref): Likewise.
        * typeck.c (build_component_ref): Likewise.
        * decl.c (grokdeclarator): Don't give a cv-qualified version of an
        * decl.c (grokdeclarator): Don't give a cv-qualified version of an
        unnamed type a typedef name "for linkage purposes".
        unnamed type a typedef name "for linkage purposes".
        * pt.c (lookup_template_class): Don't look at
        * pt.c (lookup_template_class): Don't look at
        IDENTIFIER_CLASS_VALUE when there's no current_class_type.
        IDENTIFIER_CLASS_VALUE when there's no current_class_type.
        * method.c (build_overload_int): Handle error cases gracefully.
        * method.c (build_overload_int): Handle error cases gracefully.
        * pt.c (instantiate_decl): Handle static member variables
        * pt.c (instantiate_decl): Handle static member variables
        correctly.
        correctly.
        * pt.c (tsubst): Use the tsubst'd type when producing new
        * pt.c (tsubst): Use the tsubst'd type when producing new
        TEMPLATE_PARM_INDEX nodes.
        TEMPLATE_PARM_INDEX nodes.
1998-05-24  Mark Mitchell  
1998-05-24  Mark Mitchell  
        * tree.c (cp_tree_equal): Handle pointers to member functions.
        * tree.c (cp_tree_equal): Handle pointers to member functions.
        * call.c (maybe_handle_implicit_object): Handle QUAL_CONVs.  Make
        * call.c (maybe_handle_implicit_object): Handle QUAL_CONVs.  Make
        sure the type of the REF_BIND is a reference type.
        sure the type of the REF_BIND is a reference type.
        (maybe_handle_ref_bind, compare_ics): Rename reference_type to
        (maybe_handle_ref_bind, compare_ics): Rename reference_type to
        target_type for clarity.
        target_type for clarity.
        * parse.y (xcond): Move call to condition_conversion ...
        * parse.y (xcond): Move call to condition_conversion ...
        * semantics.c (finish_for_cond): Here.
        * semantics.c (finish_for_cond): Here.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
1998-05-24  Jason Merrill  
1998-05-24  Jason Merrill  
        * decl.c (push_namespace): Namespaces have type void.
        * decl.c (push_namespace): Namespaces have type void.
        * typeck2.c (incomplete_type_error): Complain about namespace
        * typeck2.c (incomplete_type_error): Complain about namespace
        used as expression.
        used as expression.
        * typeck.c (decay_conversion): Likewise.
        * typeck.c (decay_conversion): Likewise.
1998-05-24  Martin von Löwis  
1998-05-24  Martin von Löwis  
        * error.c (dump_expr): Support namespaces.
        * error.c (dump_expr): Support namespaces.
1998-05-23  Jason Merrill  
1998-05-23  Jason Merrill  
        * cp-tree.def: Add SRCLOC.
        * cp-tree.def: Add SRCLOC.
        * cp-tree.h: Add struct tree_srcloc and accessor macros.
        * cp-tree.h: Add struct tree_srcloc and accessor macros.
        * tree.c (build_srcloc, build_srcloc_here): New fns.
        * tree.c (build_srcloc, build_srcloc_here): New fns.
        * pt.c (add_pending_template): Use build_srcloc_here.
        * pt.c (add_pending_template): Use build_srcloc_here.
        (push_tinst_level): Update last_template_error_tick before erroring.
        (push_tinst_level): Update last_template_error_tick before erroring.
        (instantiate_decl): Restore lineno and input_filename before
        (instantiate_decl): Restore lineno and input_filename before
        calling add_pending_template.
        calling add_pending_template.
        * decl2.c (finish_file): Set up lineno and input_filename for
        * decl2.c (finish_file): Set up lineno and input_filename for
        pending templates.
        pending templates.
1998-05-22  Jason Merrill  
1998-05-22  Jason Merrill  
        * decl.c (lang_print_error_function): New fn.
        * decl.c (lang_print_error_function): New fn.
        (init_decl_processing): Set print_error_function to use it.
        (init_decl_processing): Set print_error_function to use it.
        * errfn.c (cp_thing): Don't call maybe_print_template_context here.
        * errfn.c (cp_thing): Don't call maybe_print_template_context here.
        * call.c (maybe_handle_ref_bind): Propagate ICS_USER_FLAG and
        * call.c (maybe_handle_ref_bind): Propagate ICS_USER_FLAG and
        ICS_BAD_FLAG.
        ICS_BAD_FLAG.
        * cvt.c (ocp_convert): Don't set LOOKUP_NO_CONVERSION for
        * cvt.c (ocp_convert): Don't set LOOKUP_NO_CONVERSION for
        copy-initialization.
        copy-initialization.
        * class.c (build_vtable_entry): Use int_fits_type_p.
        * class.c (build_vtable_entry): Use int_fits_type_p.
        (build_vtable): Pass a signed offset to build_vtable_entry.
        (build_vtable): Pass a signed offset to build_vtable_entry.
        (prepare_fresh_vtable, modify_one_vtable, fixup_vtable_deltas1,
        (prepare_fresh_vtable, modify_one_vtable, fixup_vtable_deltas1,
        set_rtti_entry): Likewise.
        set_rtti_entry): Likewise.
1998-05-22  Per Bothner  
1998-05-22  Per Bothner  
        * cp-tree.h:  Add comments documenting which LANG_FLAGS are used.
        * cp-tree.h:  Add comments documenting which LANG_FLAGS are used.
        (C_TYPE_VARIABLE_SIZE, C_DECL_VARIABLE_SIZE):  Removed, not used.
        (C_TYPE_VARIABLE_SIZE, C_DECL_VARIABLE_SIZE):  Removed, not used.
1998-05-22  Jason Merrill  
1998-05-22  Jason Merrill  
        * pt.c (print_template_context): Use fprintf instead of cp_error.
        * pt.c (print_template_context): Use fprintf instead of cp_error.
        * pt.c (determine_specialization): Just return an error_mark_node.
        * pt.c (determine_specialization): Just return an error_mark_node.
        Also print the decl we want in error messages.  If we complain,
        Also print the decl we want in error messages.  If we complain,
        return error_mark_node.
        return error_mark_node.
        (tsubst_friend_function): Set lineno and input_filename so
        (tsubst_friend_function): Set lineno and input_filename so
        error messages will be useful.
        error messages will be useful.
        (instantiate_template): Just return an error_mark_node.
        (instantiate_template): Just return an error_mark_node.
        (check_explicit_specialization): Don't mess with a returned
        (check_explicit_specialization): Don't mess with a returned
        error_mark_node.
        error_mark_node.
        * pt.c (print_template_context): Add new argument.
        * pt.c (print_template_context): Add new argument.
        (maybe_print_template_context): New fn.
        (maybe_print_template_context): New fn.
        (push_tinst_level): Increment tinst_level_tick.
        (push_tinst_level): Increment tinst_level_tick.
        (pop_tinst_level): Likewise.
        (pop_tinst_level): Likewise.
        * errfn.c (cp_thing): Call maybe_print_template_context.  Use
        * errfn.c (cp_thing): Call maybe_print_template_context.  Use
        xrealloc instead of xmalloc.
        xrealloc instead of xmalloc.
        * typeck.c (build_unary_op, CONVERT_EXPR): Propagate TREE_CONSTANT.
        * typeck.c (build_unary_op, CONVERT_EXPR): Propagate TREE_CONSTANT.
1998-05-21  Jason Merrill  
1998-05-21  Jason Merrill  
        * pt.c (tsubst_friend_class): Don't call redeclare_class_template
        * 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
        if the template we looked up is the same as the one we already
        have.
        have.
Thu May 21 11:54:44 1998  Dave Brolley  
Thu May 21 11:54:44 1998  Dave Brolley  
        * lex.c: (handle_sysv_pragma): FILE* parameter not used.
        * lex.c: (handle_sysv_pragma): FILE* parameter not used.
        (cpp_reader,parse_in): Add for cpplib.
        (cpp_reader,parse_in): Add for cpplib.
        (check_newline): Call handle_sysv_pragma with new interface.
        (check_newline): Call handle_sysv_pragma with new interface.
        (check_newline): Call GET_DIRECTIVE_LINE, not get_directive_line.
        (check_newline): Call GET_DIRECTIVE_LINE, not get_directive_line.
        * input.c: (yy_cur,yy_lim,yy_get_token,GETC): Add for cpplib.
        * input.c: (yy_cur,yy_lim,yy_get_token,GETC): Add for cpplib.
        (sub_getch): Call GETC for cpplib.
        (sub_getch): Call GETC for cpplib.
        * cp-tree.h: (get_directive_line): Different prototype for cpplib.
        * cp-tree.h: (get_directive_line): Different prototype for cpplib.
        (GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.
        (GET_DIRECTIVE_LINE): Macro wrapper for get_directive_line.
        * Makefile.in (CXX_OBJS): Add @extra_cxx_objs@ for cpplib.
        * Makefile.in (CXX_OBJS): Add @extra_cxx_objs@ for cpplib.
1998-05-21  Jason Merrill  
1998-05-21  Jason Merrill  
        * decl2.c (maybe_make_one_only): New fn.
        * decl2.c (maybe_make_one_only): New fn.
        (import_export_vtable): Use it.
        (import_export_vtable): Use it.
        (import_export_decl): Likewise.
        (import_export_decl): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.
        * pt.c (mark_decl_instantiated): Likewise.
1998-05-21  Mark Mitchell  
1998-05-21  Mark Mitchell  
        * decl2.c (find_representative_member): Rename to ...
        * decl2.c (find_representative_member): Rename to ...
        (build_anon_union_vars): New function.
        (build_anon_union_vars): New function.
        (finish_anon_union): Fix stupidity of previous change.
        (finish_anon_union): Fix stupidity of previous change.
1998-05-20  Jason Merrill  
1998-05-20  Jason Merrill  
        * decl.c (grokfndecl): Handle definition of specialization in
        * decl.c (grokfndecl): Handle definition of specialization in
        friend declaration.
        friend declaration.
        * error.c (dump_decl): Fix LOOKUP_EXPR handling.
        * error.c (dump_decl): Fix LOOKUP_EXPR handling.
1998-05-20  Mark Mitchell  
1998-05-20  Mark Mitchell  
        * class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P
        * class.c (delete_duplicate_fields_1): Use DECL_DECLARES_TYPE_P
        to look for type declarations.
        to look for type declarations.
        (finish_struct): Deal with templates on the CLASSTYPE_TAGS list.
        (finish_struct): Deal with templates on the CLASSTYPE_TAGS list.
        * cp-tree.h (DECL_DECLARES_TYPE_P): New macro.
        * cp-tree.h (DECL_DECLARES_TYPE_P): New macro.
        (finish_member_class_template): Declare.
        (finish_member_class_template): Declare.
        * decl.c (pushtag): Put member class templates on the
        * decl.c (pushtag): Put member class templates on the
        CLASSTYPE_TAGS list, just as for ordinary member classes.
        CLASSTYPE_TAGS list, just as for ordinary member classes.
        (pushdecl_class_level): Use DECL_DECLARES_TYPE_P.
        (pushdecl_class_level): Use DECL_DECLARES_TYPE_P.
        (lookup_tag): Look for IDENTIFIER_CLASS_VALUEs, just as with
        (lookup_tag): Look for IDENTIFIER_CLASS_VALUEs, just as with
        IDENTIFIER_NAMESPACE_VALUEs.
        IDENTIFIER_NAMESPACE_VALUEs.
        * parse.y (component_decl): Move code to ...
        * parse.y (component_decl): Move code to ...
        * semantics.c (finish_member_class_template): New function.
        * semantics.c (finish_member_class_template): New function.
        Don't put member class templates on the list of components for a
        Don't put member class templates on the list of components for a
        class.
        class.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
        * pt.c (classtype_mangled_name): Don't try DECL_CONTEXT on types.
        * pt.c (classtype_mangled_name): Don't try DECL_CONTEXT on types.
        In fact, don't use DECL_CONTEXT at all here.
        In fact, don't use DECL_CONTEXT at all here.
1998-05-20  Martin von Löwis  
1998-05-20  Martin von Löwis  
        * decl.c (record_unknown_type): New function.
        * decl.c (record_unknown_type): New function.
        (init_decl_processing): Call it for the unknown and global type
        (init_decl_processing): Call it for the unknown and global type
        nodes.
        nodes.
1998-05-20  Mark Mitchell  
1998-05-20  Mark Mitchell  
        * decl2.c (find_representative_member): New function.
        * decl2.c (find_representative_member): New function.
        (finish_anon_union): Use it.
        (finish_anon_union): Use it.
        * cp-tree.h (MAIN_NAME_P): New macro.
        * cp-tree.h (MAIN_NAME_P): New macro.
        (DECL_MAIN_P): Likwise.
        (DECL_MAIN_P): Likwise.
        * decl.c (pushdecl): Avoid crashing on redefinitions of `main'.
        * decl.c (pushdecl): Avoid crashing on redefinitions of `main'.
        (grokfndecl): Use the new macros.
        (grokfndecl): Use the new macros.
        (grokdeclarator): Likewise.
        (grokdeclarator): Likewise.
        (start_function): Likewise.
        (start_function): Likewise.
        (store_parm_decls): Likewise.
        (store_parm_decls): Likewise.
        (finsh_function): Likewise.
        (finsh_function): Likewise.
        * friend.c (do_friend): Likewise.
        * friend.c (do_friend): Likewise.
        * typeck.c (build_function_call_real): Likewise.
        * typeck.c (build_function_call_real): Likewise.
        (build_unary_op): Likewise.
        (build_unary_op): Likewise.
Wed May 20 02:16:01 1998  Jason Merrill  
Wed May 20 02:16:01 1998  Jason Merrill  
        * decl2.c (start_objects, finish_objects, do_dtors,
        * decl2.c (start_objects, finish_objects, do_dtors,
        do_ctors): Split out from...
        do_ctors): Split out from...
        (finish_file): ...here.
        (finish_file): ...here.
Tue May 19 20:36:23 1998  Jason Merrill  
Tue May 19 20:36:23 1998  Jason Merrill  
        * tree.c (is_overloaded_fn): Don't abort on placeholders from
        * tree.c (is_overloaded_fn): Don't abort on placeholders from
        push_class_decls.
        push_class_decls.
Tue May 19 15:16:22 1998  Brendan Kehoe  
Tue May 19 15:16:22 1998  Brendan Kehoe  
        * class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.
        * class.c (is_empty_class): Return 0 if TYPE is an error_mark_node.
        * error.c (dump_expr): Handle an ARROW_EXPR.
        * error.c (dump_expr): Handle an ARROW_EXPR.
Tue May 19 15:13:39 1998  Mark Mitchell  
Tue May 19 15:13:39 1998  Mark Mitchell  
        * decl.c (saveable_obstack): Declare.
        * decl.c (saveable_obstack): Declare.
        (pushdecl): Copy TYPE_DECLs to the same obstack as the type they
        (pushdecl): Copy TYPE_DECLs to the same obstack as the type they
        declare, if necessary.
        declare, if necessary.
Tue May 19 14:50:27 1998  Mark Mitchell  
Tue May 19 14:50:27 1998  Mark Mitchell  
        * call.c (compare_qual): Remove.
        * call.c (compare_qual): Remove.
        (is_subseq): Tweak.
        (is_subseq): Tweak.
        (is_properly_derived_from): New function.
        (is_properly_derived_from): New function.
        (maybe_handle_ref_bind): Likewise.
        (maybe_handle_ref_bind): Likewise.
        (maybe_handle_implicit_object): Likewise.
        (maybe_handle_implicit_object): Likewise.
        (compare_ics): Modify substantially to bring into conformance with
        (compare_ics): Modify substantially to bring into conformance with
        the standard.
        the standard.
        * cp-tree.h (TYPE_PTRMEMFUNC_OBJECT_TYPE): New macro.
        * cp-tree.h (TYPE_PTRMEMFUNC_OBJECT_TYPE): New macro.
        (comp_cv_qualification): Declare.
        (comp_cv_qualification): Declare.
        (comp_cv_qual_signature): Likewise.
        (comp_cv_qual_signature): Likewise.
        * typeck.c (comp_cv_qualification): Likewise.
        * typeck.c (comp_cv_qualification): Likewise.
        (comp_cv_qual_signature): Likewise.
        (comp_cv_qual_signature): Likewise.
Tue May 19 10:05:02 1998  Kaveh R. Ghazi  
Tue May 19 10:05:02 1998  Kaveh R. Ghazi  
        * Makefile.in (parse.o): Depend on toplev.h.
        * Makefile.in (parse.o): Depend on toplev.h.
        * class.c (typecode_p): Remove prototype and definition.
        * class.c (typecode_p): Remove prototype and definition.
        * cp-tree.h (currently_open_class, is_empty_class, member_p):
        * cp-tree.h (currently_open_class, is_empty_class, member_p):
        Add prototype.
        Add prototype.
        * decl.c (push_overloaded_decl_top_level): Remove prototype and
        * decl.c (push_overloaded_decl_top_level): Remove prototype and
        definition.
        definition.
        * errfn.c (cp_error): Cast function pointer `error' to (errorfn *)
        * errfn.c (cp_error): Cast function pointer `error' to (errorfn *)
        in call to `cp_thing'.
        in call to `cp_thing'.
        (cp_warning): Likewise for function pointer `warning'.
        (cp_warning): Likewise for function pointer `warning'.
        * except.c (do_function_call): Remove prototype and definition.
        * except.c (do_function_call): Remove prototype and definition.
        (call_eh_info): Wrap variable `t1' in macro NEW_EH_MODEL.
        (call_eh_info): Wrap variable `t1' in macro NEW_EH_MODEL.
        * method.c (is_java_type): Add prototype and make it static.
        * method.c (is_java_type): Add prototype and make it static.
        * parse.y: Include toplev.h.
        * parse.y: Include toplev.h.
        * pt.c (type_unification): Remove unused variable `arg'.
        * pt.c (type_unification): Remove unused variable `arg'.
        (instantiate_decl): Likewise for `save_ti'.
        (instantiate_decl): Likewise for `save_ti'.
        * tree.c (propagate_binfo_offsets): Likewise for `base_binfos'.
        * tree.c (propagate_binfo_offsets): Likewise for `base_binfos'.
Tue May 19 02:43:25 1998  Jason Merrill  
Tue May 19 02:43:25 1998  Jason Merrill  
        * init.c (build_member_call): Handle template_ids.
        * init.c (build_member_call): Handle template_ids.
        * parse.y (primary): Add global_scope template_id.
        * parse.y (primary): Add global_scope template_id.
Mon May 18 23:22:52 1998  Jason Merrill  
Mon May 18 23:22:52 1998  Jason Merrill  
        * decl2.c (get_sentry): Use end_temporary_allocation.
        * decl2.c (get_sentry): Use end_temporary_allocation.
        Don't declare permanent_obstack.
        Don't declare permanent_obstack.
Mon May 18 12:28:44 1998  Mark Mitchell  
Mon May 18 12:28:44 1998  Mark Mitchell  
        * parse.y (.finish_new_placement): New non-terminal.
        * parse.y (.finish_new_placement): New non-terminal.
        (unary_expr, new_type_id): Use it.
        (unary_expr, new_type_id): Use it.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
Mon May 18 12:20:27 1998  Brendan Kehoe  
Mon May 18 12:20:27 1998  Brendan Kehoe  
        * pt.c (redeclare_class_template): Say where the original definition
        * pt.c (redeclare_class_template): Say where the original definition
        of the template-parameter's default argument appeared.
        of the template-parameter's default argument appeared.
Mon May 18 03:00:57 1998  Jason Merrill  
Mon May 18 03:00:57 1998  Jason Merrill  
        * call.c (build_over_call): Tweak empty class handling.
        * call.c (build_over_call): Tweak empty class handling.
        * decl.c (make_typename_type): Use currently_open_class.
        * decl.c (make_typename_type): Use currently_open_class.
        * class.c (instantiate_type): Don't abort on TREE_NONLOCAL_FLAG.
        * class.c (instantiate_type): Don't abort on TREE_NONLOCAL_FLAG.
Mon May 18 01:43:01 1998  Martin v. Löwis  
Mon May 18 01:43:01 1998  Martin v. Löwis  
        * decl.c (lookup_name_real): Don't look at IDENTIFIER_LOCAL_VALUE
        * decl.c (lookup_name_real): Don't look at IDENTIFIER_LOCAL_VALUE
        for a type unless it is one.
        for a type unless it is one.
        * class.c (finish_struct_1): Use OVL_CURRENT in error message.
        * class.c (finish_struct_1): Use OVL_CURRENT in error message.
Mon May 18 01:24:08 1998  Jeffrey A Law  (law@cygnus.com)
Mon May 18 01:24:08 1998  Jeffrey A Law  (law@cygnus.com)
        * Makefile.in (program_transform_name, objdir): Define.
        * Makefile.in (program_transform_name, objdir): Define.
        * Makefile.in (BISON): Use bison from the build tree if it exists.
        * Makefile.in (BISON): Use bison from the build tree if it exists.
        (FLEX): Likewise.
        (FLEX): Likewise.
Sun May 17 14:52:08 1998  Martin v. Löwis  
Sun May 17 14:52:08 1998  Martin v. Löwis  
        * typeck.c (type_unknown_p): Return true for TREE_LIST also.
        * typeck.c (type_unknown_p): Return true for TREE_LIST also.
        * call.c (build_method_call): Use TYPE_MAIN_VARIANT on typedefs.
        * call.c (build_method_call): Use TYPE_MAIN_VARIANT on typedefs.
Sun May 17 14:51:41 1998  Jason Merrill  
Sun May 17 14:51:41 1998  Jason Merrill  
        * call.c (build_scoped_method_call): Likewise.
        * call.c (build_scoped_method_call): Likewise.
Sun May 17 13:53:48 1998  Mark Mitchell  
Sun May 17 13:53:48 1998  Mark Mitchell  
        * init.c (build_new_1): Call suspend_momentary around the creation
        * init.c (build_new_1): Call suspend_momentary around the creation
        of values that must be saved for exception handling.
        of values that must be saved for exception handling.
        * parse.y (.build_new_placement): New non-terminal.
        * parse.y (.build_new_placement): New non-terminal.
        (unary_expr, new_placement): Use it.
        (unary_expr, new_placement): Use it.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
Sun May 17 12:32:08 1998  Jason Merrill  
Sun May 17 12:32:08 1998  Jason Merrill  
        * decl.c (duplicate_decls): Use CANONICAL_TYPE_VARIANT to compare
        * decl.c (duplicate_decls): Use CANONICAL_TYPE_VARIANT to compare
        old and new types.
        old and new types.
        * pt.c (tsubst): Make sure that BINFO_TYPE of new binfos is the
        * pt.c (tsubst): Make sure that BINFO_TYPE of new binfos is the
        canonical type.
        canonical type.
        * call.c (build_over_call): Don't use IS_SIGNATURE on a namespace.
        * call.c (build_over_call): Don't use IS_SIGNATURE on a namespace.
Fri May 15 20:28:00 1998  Jason Merrill  
Fri May 15 20:28:00 1998  Jason Merrill  
        * decl.c (start_decl): Revert problem change.
        * decl.c (start_decl): Revert problem change.
        * Makefile.in (CONFLICTS): Fix.
        * Makefile.in (CONFLICTS): Fix.
Fri May 15 15:34:02 1998  Benjamin Kosnik  
Fri May 15 15:34:02 1998  Benjamin Kosnik  
        * decl.c (duplicate_decls): Clean up, add DECL_DATA_AREA bits.
        * decl.c (duplicate_decls): Clean up, add DECL_DATA_AREA bits.
Fri May 15 00:46:05 1998  Jason Merrill  
Fri May 15 00:46:05 1998  Jason Merrill  
        * class.c (finish_struct_1): Use BINFO_SIZE.
        * class.c (finish_struct_1): Use BINFO_SIZE.
        * decl.c (start_decl): Use 'tem'.
        * decl.c (start_decl): Use 'tem'.
Thu May 14 16:30:47 1998  Andrew MacLeod  
Thu May 14 16:30:47 1998  Andrew MacLeod  
        * exception.cc: Include eh-common.h.
        * exception.cc: Include eh-common.h.
        (struct cp_eh_info): Add eh_info struct with NEW_EH_MODEL.
        (struct cp_eh_info): Add eh_info struct with NEW_EH_MODEL.
        (__cplus_type_matcher): First stab at new C++ runtime type matcher.
        (__cplus_type_matcher): First stab at new C++ runtime type matcher.
        (__cp_push_exception): Initialize eh_info struct as well.
        (__cp_push_exception): Initialize eh_info struct as well.
        * except.c: Remove local structs and include eh-common.h.
        * except.c: Remove local structs and include eh-common.h.
        (init_exception_processing): Set language and version codes.
        (init_exception_processing): Set language and version codes.
        (call_eh_info): Add presence of eh_info to runtime description of
        (call_eh_info): Add presence of eh_info to runtime description of
        struct cp_eh_info.
        struct cp_eh_info.
        (expand_end_eh_spec): Call start_catch_block() and end_catch_block().
        (expand_end_eh_spec): Call start_catch_block() and end_catch_block().
        * semantics.c (finish_try_block): Call start_catch_block() and
        * semantics.c (finish_try_block): Call start_catch_block() and
        end_catch_block().
        end_catch_block().
        * parse.y (function_try_block): Call start_catch_block() and
        * parse.y (function_try_block): Call start_catch_block() and
        end_catch_block().
        end_catch_block().
Thu May 14 12:27:34 1998  Brendan Kehoe  
Thu May 14 12:27:34 1998  Brendan Kehoe  
        * typeck.c (original_type): New function.
        * typeck.c (original_type): New function.
        (common_type): Use it to get the DECL_ORIGINAL_TYPE for T1 and T2,
        (common_type): Use it to get the DECL_ORIGINAL_TYPE for T1 and T2,
        to see if they're actually the same.
        to see if they're actually the same.
        * cp-tree.h (original_type): Declare.
        * cp-tree.h (original_type): Declare.
Wed May 13 12:54:30 1998  Kaveh R. Ghazi  
Wed May 13 12:54:30 1998  Kaveh R. Ghazi  
        * Makefile.in (lex.o): Depend on output.h.
        * Makefile.in (lex.o): Depend on output.h.
        * call.c (add_function_candidate): Remove unused variable `cand'.
        * call.c (add_function_candidate): Remove unused variable `cand'.
        (add_conv_candidate): Likewise.
        (add_conv_candidate): Likewise.
        (build_builtin_candidate): Likewise.
        (build_builtin_candidate): Likewise.
        * cp-tree.h: Add prototype for `types_overlap_p'.
        * cp-tree.h: Add prototype for `types_overlap_p'.
        * decl.c (signal_catch): Mark parameter `sig' with ATTRIBUTE_UNUSED.
        * decl.c (signal_catch): Mark parameter `sig' with ATTRIBUTE_UNUSED.
        * decl2.c (merge_functions): Remove unused variables `tmp' and
        * decl2.c (merge_functions): Remove unused variables `tmp' and
        `tempn'.
        `tempn'.
        * error.c (expr_as_string): Mark parameter `v' with ATTRIBUTE_UNUSED.
        * error.c (expr_as_string): Mark parameter `v' with ATTRIBUTE_UNUSED.
        (code_as_string): Likewise.
        (code_as_string): Likewise.
        (language_as_string): Likewise.
        (language_as_string): Likewise.
        (parm_as_string): Likewise.
        (parm_as_string): Likewise.
        (op_as_string): Likewise.
        (op_as_string): Likewise.
        (assop_as_string): Likewise.
        (assop_as_string): Likewise.
        (cv_as_string): Likewise.
        (cv_as_string): Likewise.
        * lex.c: Include output.h.
        * lex.c: Include output.h.
        * pt.c (type_unification): Cast first argument of `bzero' to a char*.
        * pt.c (type_unification): Cast first argument of `bzero' to a char*.
        * search.c (dfs_no_overlap_yet): Mark parameter `t' with
        * search.c (dfs_no_overlap_yet): Mark parameter `t' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
        * tinfo.cc (__class_type_info::dcast): Change the type of variable
        * tinfo.cc (__class_type_info::dcast): Change the type of variable
        `i' from int to size_t.
        `i' from int to size_t.
        * typeck.c (language_lvalue_valid): Mark parameter `exp' with
        * typeck.c (language_lvalue_valid): Mark parameter `exp' with
        ATTRIBUTE_UNUSED.
        ATTRIBUTE_UNUSED.
Tue May 12 21:37:49 1998  Jason Merrill  
Tue May 12 21:37:49 1998  Jason Merrill  
        * error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or
        * error.c (dump_simple_decl): Use DECL_CLASS_SCOPE_P and/or
        DECL_NAMESPACE_SCOPE_P.
        DECL_NAMESPACE_SCOPE_P.
        (lang_decl_name): Likewise.
        (lang_decl_name): Likewise.
        * pt.c (tsubst_friend_function, tsubst): Likewise.
        * pt.c (tsubst_friend_function, tsubst): Likewise.
        * decl.c (pushdecl, redeclaration_error_message, start_decl,
        * decl.c (pushdecl, redeclaration_error_message, start_decl,
        cp_finish_decl, start_function): Likewise.
        cp_finish_decl, start_function): Likewise.
        * class.c (finish_struct_1): Likewise.
        * class.c (finish_struct_1): Likewise.
        * call.c (build_over_call): Likewise.
        * call.c (build_over_call): Likewise.
        (compare_ics): Use DERIVED_FROM_P.
        (compare_ics): Use DERIVED_FROM_P.
Tue May 12 07:24:18 1998  Mark Mitchell  
Tue May 12 07:24:18 1998  Mark Mitchell  
        * cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
        * cp-tree.h (CANONICAL_TYPE_VARIANT): New macro.
        * method.c (build_mangled_name): Use it.
        * method.c (build_mangled_name): Use it.
        (build_decl_overload_real): Likewise.
        (build_decl_overload_real): Likewise.
        * error.c (dump_simple_decl): New function, broken out from ...
        * error.c (dump_simple_decl): New function, broken out from ...
        (dump_decl): Use it.
        (dump_decl): Use it.
Mon May 11 11:38:07 1998  Mark Mitchell  
Mon May 11 11:38:07 1998  Mark Mitchell  
        * ptree.c (lang_print_xnode): Add missing `break'.
        * ptree.c (lang_print_xnode): Add missing `break'.
        * pt.c (tsubst): Remove duplicate check for IDENTIFIER_NODE.
        * pt.c (tsubst): Remove duplicate check for IDENTIFIER_NODE.
        * call.c (add_template_candidate): Adjust for changes to
        * call.c (add_template_candidate): Adjust for changes to
        fn_type_unification.
        fn_type_unification.
        (add_template_candidate_real): Likewise.
        (add_template_candidate_real): Likewise.
        (add_template_conv_candidate): Likewise.
        (add_template_conv_candidate): Likewise.
        (build_user_type_conversion_1): Likewise.
        (build_user_type_conversion_1): Likewise.
        (build_new_function_call): Likewise.
        (build_new_function_call): Likewise.
        (build_object_call): Likewise.
        (build_object_call): Likewise.
        (build_new_op): Likewise.
        (build_new_op): Likewise.
        (build_new_method_call): Likewise.
        (build_new_method_call): Likewise.
        * class.c (instantiate_type): Likewise.
        * class.c (instantiate_type): Likewise.
        * cp-tree.h (unification_kind_t): New type.
        * cp-tree.h (unification_kind_t): New type.
        (fn_type_unification): Adjust prototype.
        (fn_type_unification): Adjust prototype.
        (type_unificaiton): Likewise.
        (type_unificaiton): Likewise.
        * pt.c (UNIFY_ALLOW_NONE): New macro.
        * pt.c (UNIFY_ALLOW_NONE): New macro.
        (UNIFY_ALLOW_MORE_CV_QUAL): Likewise.
        (UNIFY_ALLOW_MORE_CV_QUAL): Likewise.
        (UNIFY_ALLOW_LESS_CV_QUAL): Likewise.
        (UNIFY_ALLOW_LESS_CV_QUAL): Likewise.
        (UNIFY_ALLOW_DERIVED): Likewise.
        (UNIFY_ALLOW_DERIVED): Likewise.
        (unify): Change prototype.
        (unify): Change prototype.
        (maybe_adjust_types_for_deduction): New function.
        (maybe_adjust_types_for_deduction): New function.
        (check_cv_quals_for_unify): Likewise.
        (check_cv_quals_for_unify): Likewise.
        (determine_specialization): Adjust.
        (determine_specialization): Adjust.
        (fn_type_unification): Likewise.
        (fn_type_unification): Likewise.
        (type_unification): Likewise.
        (type_unification): Likewise.
        (type_unification_real): Likewise.  Use
        (type_unification_real): Likewise.  Use
        maybe_adjust_types_for_deduction.  Fix mishandling of
        maybe_adjust_types_for_deduction.  Fix mishandling of
        back-unification of template functions passed as arguments.  Pass
        back-unification of template functions passed as arguments.  Pass
        appropriate combination of UNIFY_ALLOW_* to unify.
        appropriate combination of UNIFY_ALLOW_* to unify.
        (unify): Remove unused NTPARMS parameter.  Use
        (unify): Remove unused NTPARMS parameter.  Use
        check_cv_quals_for_unify.  Remove bogus code that allowed
        check_cv_quals_for_unify.  Remove bogus code that allowed
        too-generous unification in order to adhere more closely to standard.
        too-generous unification in order to adhere more closely to standard.
        (get_bindings_real): Adjust.
        (get_bindings_real): Adjust.
        (get_class_bindings): Likewise.
        (get_class_bindings): Likewise.
        * method.c (build_overload_identifier): Only use the innermost
        * method.c (build_overload_identifier): Only use the innermost
        template arguments when mangling.
        template arguments when mangling.
        * pt.c (tsubst_template_argument_vector): New function.
        * pt.c (tsubst_template_argument_vector): New function.
        (complete_template_args): Deal with the situation where the
        (complete_template_args): Deal with the situation where the
        extra_args contain more than one level of arguments.
        extra_args contain more than one level of arguments.
        (lookup_template_class): Deal with member template classes, which
        (lookup_template_class): Deal with member template classes, which
        may have more than one level of arguments.
        may have more than one level of arguments.
        (tsubst): Don't tsbust into the TREE_TYPE of an IDENTIFIER_NODE.
        (tsubst): Don't tsbust into the TREE_TYPE of an IDENTIFIER_NODE.
        Improve handling of member template classes.  Use
        Improve handling of member template classes.  Use
        DECL_PRIMARY_TEMPLATE instead of inline expansion.  Use
        DECL_PRIMARY_TEMPLATE instead of inline expansion.  Use
        tsubst_template_argument_vector where appropriate.
        tsubst_template_argument_vector where appropriate.
        (regenerate_decl_from_template): Break out from ...
        (regenerate_decl_from_template): Break out from ...
        (instantiate_decl): Here.
        (instantiate_decl): Here.
        * lex.c (yyprint): Remove TYPENAME_ELLIPSIS.
        * lex.c (yyprint): Remove TYPENAME_ELLIPSIS.
        * parse.h: Regenerated.
        * parse.h: Regenerated.
        * parse.c: Really regenerated.
        * parse.c: Really regenerated.
        * cp-tree.h (finish_unary_op_expr): New function.
        * cp-tree.h (finish_unary_op_expr): New function.
        (finish_id_expr): Likewise.
        (finish_id_expr): Likewise.
        (begin_new_placement): Likewise.
        (begin_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_declarator): Likewise.
        (finish_declarator): Likewise.
        (finish_translation_unit): Likewise.
        (finish_translation_unit): Likewise.
        (finish_parmlist): Likewise.
        (finish_parmlist): Likewise.
        (begin_class_definition): Likewise.
        (begin_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_default_args): Likewise.
        (finish_default_args): Likewise.
        (finish_inline_definitions): Likewise.
        (finish_inline_definitions): Likewise.
        * parse.y (GCC_ASM_KEYWORD): Remove.
        * parse.y (GCC_ASM_KEYWORD): Remove.
        (TYPENAME_ELLIPSIS): Likewise.
        (TYPENAME_ELLIPSIS): Likewise.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
        Use new functions in semantics.c in the actions for many rules.
        Use new functions in semantics.c in the actions for many rules.
        * gxx.gperf (GCC_ASM_KEYWORD): Just use ASM_KEYWORD.
        * gxx.gperf (GCC_ASM_KEYWORD): Just use ASM_KEYWORD.
        * hash.h: Regenerated.
        * hash.h: Regenerated.
        * semantics.c (finish_expr_stmt): Allow NULL expr.
        * semantics.c (finish_expr_stmt): Allow NULL expr.
        (finish_unary_op_expr): New function, containing
        (finish_unary_op_expr): New function, containing
        code previously in parse.y.
        code previously in parse.y.
        (finish_id_expr): Likewise.
        (finish_id_expr): Likewise.
        (begin_new_placement): Likewise.
        (begin_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_new_placement): Likewise.
        (finish_declarator): Likewise.
        (finish_declarator): Likewise.
        (finish_translation_unit): Likewise.
        (finish_translation_unit): Likewise.
        (finish_parmlist): Likewise.
        (finish_parmlist): Likewise.
        (begin_class_definition): Likewise.
        (begin_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_class_definition): Likewise.
        (finish_default_args): Likewise.
        (finish_default_args): Likewise.
        (finish_inline_definitions): Likewise.
        (finish_inline_definitions): Likewise.
Sun May 10 23:43:13 1998  Mark Mitchell  
Sun May 10 23:43:13 1998  Mark Mitchell  
        * typeck.c (build_c_cast): Don't decay arrays and functions to
        * typeck.c (build_c_cast): Don't decay arrays and functions to
        pointer type when converting to a class type.
        pointer type when converting to a class type.
Sun May 10 22:53:56 1998  Jason Merrill  
Sun May 10 22:53:56 1998  Jason Merrill  
        * cp-tree.h (DECL_NAMESPACE_SCOPE_P): New macro.
        * cp-tree.h (DECL_NAMESPACE_SCOPE_P): New macro.
        (DECL_CLASS_SCOPE_P): Likewise.
        (DECL_CLASS_SCOPE_P): Likewise.
Sun May 10 22:48:22 1998  H.J. Lu  (hjl@gnu.org)
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.
        * class.c (finish_struct_1): Use OVL_CURRENT on TREE_VEC_ELT.
        * decl2.c (constructor_name_full): Likewise.
        * decl2.c (constructor_name_full): Likewise.
Sun May 10 22:48:12 1998  Mike Stump  
Sun May 10 22:48:12 1998  Mike Stump  
        * tree.c (mapcar): Add OVERLOAD support.
        * tree.c (mapcar): Add OVERLOAD support.
        * init.c (resolve_offset_ref): We must use basetype_path before we
        * init.c (resolve_offset_ref): We must use basetype_path before we
        destroy it with a call to convert_pointer_to.
        destroy it with a call to convert_pointer_to.
Sat May  9 14:44:37 1998  Jason Merrill  
Sat May  9 14:44:37 1998  Jason Merrill  
        * class.c (currently_open_class): New fn.
        * class.c (currently_open_class): New fn.
        * decl.c (lookup_name_real): Use it.
        * decl.c (lookup_name_real): Use it.
        * search.c (lookup_field): Likewise.
        * search.c (lookup_field): Likewise.
Fri May  8 23:32:42 1998  Martin von Löwis  
Fri May  8 23:32:42 1998  Martin von Löwis  
        * cp-tree.def (OVERLOAD): New node.
        * cp-tree.def (OVERLOAD): New node.
        * cp-tree.h (BINDING_TYPE, SET_IDENTIFIER_GLOBAL_VALUE,
        * cp-tree.h (BINDING_TYPE, SET_IDENTIFIER_GLOBAL_VALUE,
        SET_IDENTIFIER_NAMESPACE_VALUE): Define.
        SET_IDENTIFIER_NAMESPACE_VALUE): Define.
        (NAMESPACE_BINDING): Remove.
        (NAMESPACE_BINDING): Remove.
        (IDENTIFIER_GLOBAL_VALUE, IDENTIFIER_NAMESPACE_VALUE): Use
        (IDENTIFIER_GLOBAL_VALUE, IDENTIFIER_NAMESPACE_VALUE): Use
        namespace_binding.
        namespace_binding.
        (OVL_FUNCTION, OVL_CHAIN, OVL_CURRENT, OVL_NEXT, OVL_USED):
        (OVL_FUNCTION, OVL_CHAIN, OVL_CURRENT, OVL_NEXT, OVL_USED):
        Define.
        Define.
        (tree_overload): New struct.
        (tree_overload): New struct.
        (IDENTIFIER_TYPE_VALUE): Use identifier_type_value.
        (IDENTIFIER_TYPE_VALUE): Use identifier_type_value.
        (REAL_IDENTIFIER_TYPE_VALUE): Define.
        (REAL_IDENTIFIER_TYPE_VALUE): Define.
        (IDENTIFIER_HAS_TYPE_VALUE): Use IDENTIFIER_TYPE_VALUE.
        (IDENTIFIER_HAS_TYPE_VALUE): Use IDENTIFIER_TYPE_VALUE.
        (lang_decl_flags): Remove in_namespace.
        (lang_decl_flags): Remove in_namespace.
        (lang_decl): Remove chain.
        (lang_decl): Remove chain.
        (DECL_CHAIN, DECL_NAMESPACE): Remove.
        (DECL_CHAIN, DECL_NAMESPACE): Remove.
        (flag_honor_std): Declare extern.
        (flag_honor_std): Declare extern.
        (identifier_type_value, pushdecl_namespace_level, push_using_decl,
        (identifier_type_value, pushdecl_namespace_level, push_using_decl,
        namespace_binding, set_namespace_binding,
        namespace_binding, set_namespace_binding,
        lookup_function_nonclass, cat_namespace_levels,
        lookup_function_nonclass, cat_namespace_levels,
        set_decl_namespace, lookup_arg_dependent, binding_init, ovl_cons,
        set_decl_namespace, lookup_arg_dependent, binding_init, ovl_cons,
        scratch_ovl_cons, ovl_member, build_overload): Declare.
        scratch_ovl_cons, ovl_member, build_overload): Declare.
        (decl_list_length, get_namespace_id, current_namespace_id,
        (decl_list_length, get_namespace_id, current_namespace_id,
        overloaded_globals_p): Remove.
        overloaded_globals_p): Remove.
        (lookup_using_namespace, qualified_lookup_using_namespace): Change
        (lookup_using_namespace, qualified_lookup_using_namespace): Change
        return type.
        return type.
        (push_scratch_obstack): New macro.
        (push_scratch_obstack): New macro.
        * call.c (add_function_candidate): Special-case type of OVERLOAD node.
        * call.c (add_function_candidate): Special-case type of OVERLOAD node.
        (build_user_conversions_1): Iterate using OVL_NEXT for ctors,
        (build_user_conversions_1): Iterate using OVL_NEXT for ctors,
        convs, fns.
        convs, fns.
        (build_new_function_call): Iterate using OVL_CHAIN.
        (build_new_function_call): Iterate using OVL_CHAIN.
        Print DECL_NAME in when reporting ambiguities.
        Print DECL_NAME in when reporting ambiguities.
        (build_object_call): Iterate using OVL_NEXT for fns, convs.
        (build_object_call): Iterate using OVL_NEXT for fns, convs.
        (build_new_op): Call lookup_function_nonclass.
        (build_new_op): Call lookup_function_nonclass.
        Iterate using OVL_NEXT.
        Iterate using OVL_NEXT.
        (build_op_delete_call): Change detection of members.
        (build_op_delete_call): Change detection of members.
        Do not wrap TREE_LIST around fields and single global functions.
        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
        (build_over_call): Don't push a class level if the context is a
        namespace.
        namespace.
        (build_new_method_call): Iterate using OVL_NEXT.
        (build_new_method_call): Iterate using OVL_NEXT.
        * class.c (add_method): Chain overloaded members using
        * class.c (add_method): Chain overloaded members using
        build_overload.  Remove copying of method.
        build_overload.  Remove copying of method.
        (grow_method): When iterating through the obstack, expect OVERLOAD
        (grow_method): When iterating through the obstack, expect OVERLOAD
        nodes.  Chain overload members.
        nodes.  Chain overload members.
        (finish_struct_methods): Chain overload members.  Unpack OVERLOAD
        (finish_struct_methods): Chain overload members.  Unpack OVERLOAD
        nodes in call to get_baselinks.
        nodes in call to get_baselinks.
        (duplicate_tag_error): Expect OVERLOAD nodes when unchaining.
        (duplicate_tag_error): Expect OVERLOAD nodes when unchaining.
        (finish_struct_1): Iterate over ctor using OVL_NEXT.  Handle
        (finish_struct_1): Iterate over ctor using OVL_NEXT.  Handle
        fdecls that are OVERLOAD nodes.
        fdecls that are OVERLOAD nodes.
        (validate_lhs): New function.
        (validate_lhs): New function.
        (instantiate_type): Do not copy OVERLOAD nodes.  Remove dead
        (instantiate_type): Do not copy OVERLOAD nodes.  Remove dead
        code.  Use DECL_NAME in error messages.  Split code between global
        code.  Use DECL_NAME in error messages.  Split code between global
        and member function processing.
        and member function processing.
        * decl.c (global_type_node): New static variable.
        * decl.c (global_type_node): New static variable.
        (in_std): New global.
        (in_std): New global.
        (struct binding_level): New field usings.
        (struct binding_level): New field usings.
        (resume_binding_level): Assert that we are not in a class.
        (resume_binding_level): Assert that we are not in a class.
        (toplevel_bindings_p): Just check for namespace_p or
        (toplevel_bindings_p): Just check for namespace_p or
        pseudo_global.
        pseudo_global.
        (resume_level): Remove.
        (resume_level): Remove.
        (find_binding): New function.
        (find_binding): New function.
        (binding_for_name): Call it.
        (binding_for_name): Call it.
        (namespace_binding, set_namespace_binding): New functions.
        (namespace_binding, set_namespace_binding): New functions.
        (push_namespace): Associate binding level with new namespace,
        (push_namespace): Associate binding level with new namespace,
        resume_binding_level for existing namespace.  Remove old code.
        resume_binding_level for existing namespace.  Remove old code.
        Fake std by counting.
        Fake std by counting.
        (store_bindings): Use REAL_IDENTIFIER_TYPE_VALUE.
        (store_bindings): Use REAL_IDENTIFIER_TYPE_VALUE.
        (maybe_push_to_top_level): Save current namespace.
        (maybe_push_to_top_level): Save current namespace.
        (pop_from_top_level): Restore saved namespace.
        (pop_from_top_level): Restore saved namespace.
        (pop_namespace): Call suspend_binding_level.  Remove old code.
        (pop_namespace): Call suspend_binding_level.  Remove old code.
        (cat_namespace_levels): New function.
        (cat_namespace_levels): New function.
        (set_identifier_type_value_with_scope): For namespace bindings,
        (set_identifier_type_value_with_scope): For namespace bindings,
        set BINDING_TYPE, and use global_type_node.
        set BINDING_TYPE, and use global_type_node.
        Use REAL_IDENTIFIER_TYPE_VALUE otherwise.
        Use REAL_IDENTIFIER_TYPE_VALUE otherwise.
        (identifier_type_value): New function.
        (identifier_type_value): New function.
        (pushtag): If no context, use current_namespace.
        (pushtag): If no context, use current_namespace.
        (duplicate_decls): Don't process DECL_CHAIN.
        (duplicate_decls): Don't process DECL_CHAIN.
        (pushdecl): Set DECL_CONTEXT to current_namespace, if it is not
        (pushdecl): Set DECL_CONTEXT to current_namespace, if it is not
        already set.  Never reset it to NULL_TREE.  Lookup global variables
        already set.  Never reset it to NULL_TREE.  Lookup global variables
        in their namespace.  Push overloaded templates if they are on
        in their namespace.  Push overloaded templates if they are on
        namespace level.
        namespace level.
        (pushdecl_namespace_level): New function.
        (pushdecl_namespace_level): New function.
        (pushdecl_top_level): Implement using pushdecl_namespace_level.
        (pushdecl_top_level): Implement using pushdecl_namespace_level.
        (pushdecl_using_decl): New function.
        (pushdecl_using_decl): New function.
        (overloaded_globals_p): Remove.
        (overloaded_globals_p): Remove.
        (push_overloaded_decl): Create OVERLOAD nodes, and iterate through
        (push_overloaded_decl): Create OVERLOAD nodes, and iterate through
        them.  Use namespace_binding and set_namespace_value.
        them.  Use namespace_binding and set_namespace_value.
        (redeclaration_error_message): Complain if the declarations come
        (redeclaration_error_message): Complain if the declarations come
        from different namespaces.
        from different namespaces.
        (lookup_tag): On namespace level, look in the BINDING_TYPE.
        (lookup_tag): On namespace level, look in the BINDING_TYPE.
        (lookup_namespace_name): Pass tree_bindings from stack.  Remove
        (lookup_namespace_name): Pass tree_bindings from stack.  Remove
        old code.
        old code.
        (select_decl): New function.
        (select_decl): New function.
        (lookup_name_real): Call it for qualified and unqualified lookup.
        (lookup_name_real): Call it for qualified and unqualified lookup.
        Pass tree_bindings from the stack.
        Pass tree_bindings from the stack.
        If prefer_type is 1, also accept namespaces.
        If prefer_type is 1, also accept namespaces.
        (lookup_function_nonclass): New function.
        (lookup_function_nonclass): New function.
        (init_decl_processing): Set the binding level of the global
        (init_decl_processing): Set the binding level of the global
        namespace to global_binding_level.
        namespace to global_binding_level.
        Build a proper type list for __builtin_apply.
        Build a proper type list for __builtin_apply.
        Initialize std_node to "fake std" if flag_honor_std is set.
        Initialize std_node to "fake std" if flag_honor_std is set.
        Initialize global_type_node.
        Initialize global_type_node.
        Allocated bad_alloc in namespace std if flag_honor_std.
        Allocated bad_alloc in namespace std if flag_honor_std.
        (define_function): Set the DECL_CONTEXT to the current_namespace.
        (define_function): Set the DECL_CONTEXT to the current_namespace.
        (start_decl): A namespace is not considered as a context here.  If
        (start_decl): A namespace is not considered as a context here.  If
        the DECL_CONTEXT is a namespace, push the decl.
        the DECL_CONTEXT is a namespace, push the decl.
        (cp_finish_decl): Check for namespaces used as initializers.
        (cp_finish_decl): Check for namespaces used as initializers.
        (grokfndecl): Add namespace parameter.  Remove processing of
        (grokfndecl): Add namespace parameter.  Remove processing of
        DECL_CHAIN.
        DECL_CHAIN.
        (grokvardecl): Add namespace parameter.
        (grokvardecl): Add namespace parameter.
        (grokdeclarator): Process SCOPEs that are namespaces.  For
        (grokdeclarator): Process SCOPEs that are namespaces.  For
        mangling, temporarily set the DECL_CONTEXT on anonymous structs.
        mangling, temporarily set the DECL_CONTEXT on anonymous structs.
        (start_function): Check for contexts that are namespaces.
        (start_function): Check for contexts that are namespaces.
        Set context for declarations that have not been pushed.
        Set context for declarations that have not been pushed.
        (store_parm_decls): Check for ::main only.
        (store_parm_decls): Check for ::main only.
        (finish_function): Likewise.
        (finish_function): Likewise.
        (start_method): Check for contexts that are namespaces.
        (start_method): Check for contexts that are namespaces.
        (start_method): Remove DECL_CHAIN processing.
        (start_method): Remove DECL_CHAIN processing.
        * decl2.c (flag_honor_std): Declare.
        * decl2.c (flag_honor_std): Declare.
        (lang_decode_option): Set it if -fhonor-std or -fnew-abi is given.
        (lang_decode_option): Set it if -fhonor-std or -fnew-abi is given.
        (decl_namespace_list): New static global.
        (decl_namespace_list): New static global.
        (grok_x_components): Ignore namespaces as type contexts.
        (grok_x_components): Ignore namespaces as type contexts.
        (check_classfn): Expect OVERLOAD nodes.
        (check_classfn): Expect OVERLOAD nodes.
        (grokfield): Remove DECL_CHAIN processing.
        (grokfield): Remove DECL_CHAIN processing.
        (finish_file): Call cat_namespace_levels.
        (finish_file): Call cat_namespace_levels.
        (merge_functions): New function.
        (merge_functions): New function.
        (ambiguous_decl): Rewrite.
        (ambiguous_decl): Rewrite.
        (lookup_using_namespace): Produce tree_bindings.
        (lookup_using_namespace): Produce tree_bindings.
        (qualified_lookup_using_namespace): Likewise.
        (qualified_lookup_using_namespace): Likewise.
        (set_decl_namespace, decl_namespace, current_decl_namespace,
        (set_decl_namespace, decl_namespace, current_decl_namespace,
        push_decl_namespace, pop_decl_namespace): New functions.
        push_decl_namespace, pop_decl_namespace): New functions.
        (arg_lookup): New struct.
        (arg_lookup): New struct.
        (add_function, arg_assoc_namespace, arg_assoc_class,
        (add_function, arg_assoc_namespace, arg_assoc_class,
        arg_assoc_type, arg_assoc_args, arg_assoc, lookup_arg_dependent):
        arg_assoc_type, arg_assoc_args, arg_assoc, lookup_arg_dependent):
        New functions.
        New functions.
        (get_namespace_id, current_namespace_id): Remove.
        (get_namespace_id, current_namespace_id): Remove.
        (do_toplevel_using_decl): Rewrite.
        (do_toplevel_using_decl): Rewrite.
        (do_class_using_decl): Complain about namespace qualifiers.
        (do_class_using_decl): Complain about namespace qualifiers.
        (do_using_directive): Sorry if not on namespace level.  Complain
        (do_using_directive): Sorry if not on namespace level.  Complain
        about unknown namespaces.
        about unknown namespaces.
        * error.c (dump_aggr_type): Check for namespace contexts.
        * error.c (dump_aggr_type): Check for namespace contexts.
        * except.c (init_exception_processing): Push terminate into std.
        * except.c (init_exception_processing): Push terminate into std.
        * friend.c (is_friend): A namespace is not a context, here.
        * friend.c (is_friend): A namespace is not a context, here.
        * init.c (expand_member_init): Remove DECL_CHAIN processing.
        * init.c (expand_member_init): Remove DECL_CHAIN processing.
        (build_offset_ref): Process OVERLOAD nodes.
        (build_offset_ref): Process OVERLOAD nodes.
        * lang-specs.h (__HONOR_STD): Define if -fnew-abi or -fhonor-std.
        * lang-specs.h (__HONOR_STD): Define if -fnew-abi or -fhonor-std.
        * lex.c (identifier_type): Loop using OVL_CHAIN.
        * lex.c (identifier_type): Loop using OVL_CHAIN.
        (see_typename): Set looking_for_typename to 2.
        (see_typename): Set looking_for_typename to 2.
        (real_yylex): Likewise.
        (real_yylex): Likewise.
        (do_identifier): Expect OVERLOAD nodes instead of TREE_LISTs.
        (do_identifier): Expect OVERLOAD nodes instead of TREE_LISTs.
        (do_scoped_id): Expect OVERLOAD nodes.
        (do_scoped_id): Expect OVERLOAD nodes.
        Change calling convention for qualified_lookup_using_namespace.
        Change calling convention for qualified_lookup_using_namespace.
        (build_lang_decl): Don't set in_namespace anymore.
        (build_lang_decl): Don't set in_namespace anymore.
        * method.c (typevec_size): New global.
        * method.c (typevec_size): New global.
        (build_overload_nested_name): Return if global_namespace.
        (build_overload_nested_name): Return if global_namespace.
        Otherwise, always expect a declaration context.
        Otherwise, always expect a declaration context.
        (build_qualified_name): Likewise.
        (build_qualified_name): Likewise.
        Make sure we don't write beyond typevec_size.
        Make sure we don't write beyond typevec_size.
        (build_decl_overload_real): Likewise.
        (build_decl_overload_real): Likewise.
        Allocate one extra slot for the namespace.
        Allocate one extra slot for the namespace.
        (hack_identifier): Mark code dead.
        (hack_identifier): Mark code dead.
        Process OVERLOAD and NAMESPACE_DECL nodes.
        Process OVERLOAD and NAMESPACE_DECL nodes.
        * parse.y (program): Pop namespaces until in global namespace.
        * parse.y (program): Pop namespaces until in global namespace.
        (extdef): In a using-declaration, don't discard the identifier if
        (extdef): In a using-declaration, don't discard the identifier if
        there is no declaration.
        there is no declaration.
        (left_curly): Ignore type contexts which are namespaces.
        (left_curly): Ignore type contexts which are namespaces.
        (typename_sub2): Use IDENTIFIER_TYPE_VALUE to retrieve the type
        (typename_sub2): Use IDENTIFIER_TYPE_VALUE to retrieve the type
        used as scope.
        used as scope.
        * pt.c (template_class_depth): Expect types to be namespaces.
        * pt.c (template_class_depth): Expect types to be namespaces.
        (determine_specialization): Simplify by expecting OVERLOAD nodes.
        (determine_specialization): Simplify by expecting OVERLOAD nodes.
        (push_template_decl): Push into namespace level.
        (push_template_decl): Push into namespace level.
        Reset ctx if it is a namespace.
        Reset ctx if it is a namespace.
        Set DECL_CONTEXT to current_namespace if not set already.
        Set DECL_CONTEXT to current_namespace if not set already.
        Ignore real contexts that are namespaces.
        Ignore real contexts that are namespaces.
        (mangle_class_name_for_template): Skip global_namespace.
        (mangle_class_name_for_template): Skip global_namespace.
        Mangle other namespaces as declarations.
        Mangle other namespaces as declarations.
        (lookup_template_function): Set type of OVERLOAD nodes to unknown.
        (lookup_template_function): Set type of OVERLOAD nodes to unknown.
        (lookup_template_class): Push into namespace of context.
        (lookup_template_class): Push into namespace of context.
        If the context is a namespace, set it to global_namespace.
        If the context is a namespace, set it to global_namespace.
        Use id_context for mangling.
        Use id_context for mangling.
        (for_each_template_parm): Handle OVERLOAD and NAMESPACE_DECL nodes.
        (for_each_template_parm): Handle OVERLOAD and NAMESPACE_DECL nodes.
        (tsubst_friend_function): Ignore namespace contexts.
        (tsubst_friend_function): Ignore namespace contexts.
        Push into namespace level.
        Push into namespace level.
        (tsubst): Handle NAMESPACE_DECL nodes.
        (tsubst): Handle NAMESPACE_DECL nodes.
        Remove DECL_CHAIN processing.
        Remove DECL_CHAIN processing.
        (type_unification_real): Recognize OVERLOAD instead of TREE_LIST nodes.
        (type_unification_real): Recognize OVERLOAD instead of TREE_LIST nodes.
        * ptree.c (print_lang_identifier): Print bindings.
        * ptree.c (print_lang_identifier): Print bindings.
        (lang_print_xnode): Print OVERLOAD nodes.
        (lang_print_xnode): Print OVERLOAD nodes.
        * rtti.c (init_rtti_processing): Push type_info into std.
        * rtti.c (init_rtti_processing): Push type_info into std.
        * search.c (lookup_fnfields_here): Expect OVERLOAD nodes.
        * search.c (lookup_fnfields_here): Expect OVERLOAD nodes.
        (lookup_fnfields_1, get_virtuals_named_this, get_matching_virtual,
        (lookup_fnfields_1, get_virtuals_named_this, get_matching_virtual,
        dfs_debug_mark, dfs_pushdecls, dfs_compress_decls, add_conversions,
        dfs_debug_mark, dfs_pushdecls, dfs_compress_decls, add_conversions,
        lookup_fnfields_here): Likewise.
        lookup_fnfields_here): Likewise.
        Process all nodes, instead of going through TREE_CHAIN.
        Process all nodes, instead of going through TREE_CHAIN.
        * sig.c (build_signature_pointer_or_reference_type): Set context
        * sig.c (build_signature_pointer_or_reference_type): Set context
        to global_namespace.
        to global_namespace.
        (build_signature_table_constructor): Expect OVERLOAD nodes.
        (build_signature_table_constructor): Expect OVERLOAD nodes.
        * spew.c (yylex): Save old setting of looking_for_typename.
        * spew.c (yylex): Save old setting of looking_for_typename.
        * tree.c (decl_list_length): Remove.
        * tree.c (decl_list_length): Remove.
        (binding_init): New function.
        (binding_init): New function.
        (count_functions): Rewrite.
        (count_functions): Rewrite.
        (is_overloaded_fn): Expect OVERLOAD nodes.
        (is_overloaded_fn): Expect OVERLOAD nodes.
        (really_overloaded_fn, get_first_fn, lvalue_type): Likewise.
        (really_overloaded_fn, get_first_fn, lvalue_type): Likewise.
        (ovl_cons, scratch_ovl_cons, build_overload, build_overload_after,
        (ovl_cons, scratch_ovl_cons, build_overload, build_overload_after,
        ovl_member): New functions.
        ovl_member): New functions.
        * typeck.c (require_complete_type): Expect OVERLOAD nodes.
        * typeck.c (require_complete_type): Expect OVERLOAD nodes.
        (type_unknown_p): Likewise.
        (type_unknown_p): Likewise.
        (require_instantiated_type): Likewise.
        (require_instantiated_type): Likewise.
        (build_component_ref): Declare code dead.
        (build_component_ref): Declare code dead.
        (build_x_function_call): Create and expect OVERLOAD nodes.
        (build_x_function_call): Create and expect OVERLOAD nodes.
        (build_function_call_real): Check for ::main only.
        (build_function_call_real): Check for ::main only.
        (build_unary_op): Likewise.  Expect OVERLOAD nodes.
        (build_unary_op): Likewise.  Expect OVERLOAD nodes.
        (convert_for_assignment): Check for TREE_LIST before accessing
        (convert_for_assignment): Check for TREE_LIST before accessing
        TREE_VALUE.
        TREE_VALUE.
        * decl.c (duplicate_decls): Check for namespace bindings instead
        * decl.c (duplicate_decls): Check for namespace bindings instead
        of global bindings.
        of global bindings.
        (pushdecl, push_overloaded_decl, lookup_tag, lookup_name_real,
        (pushdecl, push_overloaded_decl, lookup_tag, lookup_name_real,
        lookup_name_current_level, start_decl, xref_tag,
        lookup_name_current_level, start_decl, xref_tag,
        finish_enum): Likewise.
        finish_enum): Likewise.
        * init.c (build_offset_ref): Likewise.
        * init.c (build_offset_ref): Likewise.
        * search.c (lookup_field): Likewise.
        * search.c (lookup_field): Likewise.
        (lookup_fnfields): Likewise.
        (lookup_fnfields): Likewise.
        (dfs_debug_mark): Likewise.
        (dfs_debug_mark): Likewise.
        * decl.c (poplevel): Use SET_IDENTIFIER_TYPE_VALUE.
        * decl.c (poplevel): Use SET_IDENTIFIER_TYPE_VALUE.
        (poplevel_class, pop_from_top_level): Likewise.
        (poplevel_class, pop_from_top_level): Likewise.
        * decl2.c (finish_method): Likewise.
        * decl2.c (finish_method): Likewise.
        * class.c (build_vtable): Use SET_IDENTIFIER_GLOBAL_VALUE.
        * class.c (build_vtable): Use SET_IDENTIFIER_GLOBAL_VALUE.
        * decl.c (record_builtin_type): Likewise.
        * decl.c (record_builtin_type): Likewise.
        (init_decl_processing, grokfndecl): Likewise.
        (init_decl_processing, grokfndecl): Likewise.
        * lex.c (get_time_identifier, do_identifier, do_scoped_id): Likewise.
        * lex.c (get_time_identifier, do_identifier, do_scoped_id): Likewise.
        (make_lang_type): Likewise.
        (make_lang_type): Likewise.
        * parse.y (make_thunk): Likewise.
        * parse.y (make_thunk): Likewise.
        * pt.c (tsubst): Likewise.
        * pt.c (tsubst): Likewise.
        * tree.c (debug_binfo): Likewise.
        * tree.c (debug_binfo): Likewise.
        * exception.cc, new.cc, new1.cc, new2.cc, tinfo.cc, tinfo.h,
        * exception.cc, new.cc, new1.cc, new2.cc, tinfo.cc, tinfo.h,
        tinfo2.cc, inc/new.h: Add std qualifications.
        tinfo2.cc, inc/new.h: Add std qualifications.
        * inc/new: Wrap with namespace std if __HONOR_STD.
        * inc/new: Wrap with namespace std if __HONOR_STD.
        * inc/typeinfo: Likewise.
        * inc/typeinfo: Likewise.
Fri May  8 00:43:50 1998  Jason Merrill  
Fri May  8 00:43:50 1998  Jason Merrill  
        * call.c (build_user_type_conversion_1): Handle second_conv
        * call.c (build_user_type_conversion_1): Handle second_conv
        properly for templates.
        properly for templates.
Thu May  7 17:09:25 1998  Andrew MacLeod  
Thu May  7 17:09:25 1998  Andrew MacLeod  
        * method.c (build_decl_overload_real): Set TREE_USED flag to
        * method.c (build_decl_overload_real): Set TREE_USED flag to
        zero for build_type_variants nodes as well.
        zero for build_type_variants nodes as well.
Wed May  6 19:27:09 1998  Jason Merrill  
Wed May  6 19:27:09 1998  Jason Merrill  
        * pt.c (tsubst): Don't tsubst the type of an IDENTIFIER_NODE.
        * pt.c (tsubst): Don't tsubst the type of an IDENTIFIER_NODE.
Wed May  6 16:49:48 1998  Jim Wilson  
Wed May  6 16:49:48 1998  Jim Wilson  
        * Makefile.in (call.o, class.o, decl.o, decl2.o, errfn.o, error.o,
        * 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,
        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,
        rtti.o, search.o, semantics.o, sig.o, tree.o, typeck.o, typeck2.o,
        xref.o): Add toplev.h dependencies.
        xref.o): Add toplev.h dependencies.
Wed May  6 16:44:58 1998  Jeffrey A Law  (law@cygnus.com)
Wed May  6 16:44:58 1998  Jeffrey A Law  (law@cygnus.com)
        * errfn.c (cp_error, cp_warning): Remove declarations for
        * errfn.c (cp_error, cp_warning): Remove declarations for
        error and warning respectively.
        error and warning respectively.
Wed May  6 14:28:18 1998  Kaveh R. Ghazi  
Wed May  6 14:28:18 1998  Kaveh R. Ghazi  
        * error.c: Convert to using ctype macros defined in system.h.
        * error.c: Convert to using ctype macros defined in system.h.
        * method.c: Likewise.
        * method.c: Likewise.
        * xref.c: Likewise.
        * xref.c: Likewise.
        * lex.c: Likewise.  Also remove redundant system header stuff.
        * lex.c: Likewise.  Also remove redundant system header stuff.
Wed May  6 06:36:41 1998  Robert Lipe  
Wed May  6 06:36:41 1998  Robert Lipe  
        * call.c, class.c, decl.c, decl2.c, errfn.c, error.c, except.c,
        * 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,
        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,
        search.c, semantics.c, sig.c, tree.c, typeck.c, typeck2.c,
        xref.c: Add include of toplev.h.
        xref.c: Add include of toplev.h.
Wed May  6 02:33:39 1998  Jason Merrill  
Wed May  6 02:33:39 1998  Jason Merrill  
        * tree.c (perm_manip): Also regenerate the RTL of an extern.
        * tree.c (perm_manip): Also regenerate the RTL of an extern.
        (copy_to_permanent): Use end_temporary_allocation.
        (copy_to_permanent): Use end_temporary_allocation.
Tue May  5 23:54:04 1998  Jason Merrill  
Tue May  5 23:54:04 1998  Jason Merrill  
        * init.c (expand_vec_init): The initialization of each array
        * init.c (expand_vec_init): The initialization of each array
        element is a full-expression.
        element is a full-expression.
Tue May  5 18:24:13 1998  Andrew MacLeod  
Tue May  5 18:24:13 1998  Andrew MacLeod  
        * method.c (build_mangled_name): Add a call to build_type_variant
        * method.c (build_mangled_name): Add a call to build_type_variant
        to get the right type.
        to get the right type.
Tue May  5 01:25:03 1998  Jason Merrill  
Tue May  5 01:25:03 1998  Jason Merrill  
        * Makefile.in: Add .SUFFIXES.
        * Makefile.in: Add .SUFFIXES.
        * cp-tree.def: Remove NAMESPACE_DECL.
        * cp-tree.def: Remove NAMESPACE_DECL.
Sun May  3 01:32:14 1998  Jason Merrill  
Sun May  3 01:32:14 1998  Jason Merrill  
        * call.c (build_over_call): Do evaluate arg even if it has empty
        * call.c (build_over_call): Do evaluate arg even if it has empty
        class type.
        class type.
        * decl.c (start_function): Don't push a member function.
        * decl.c (start_function): Don't push a member function.
Thu Apr 30 18:59:23 1998  Jim Wilson  
Thu Apr 30 18:59:23 1998  Jim Wilson  
        * Makefile.in (g++FAQ.info): Put -o option before input file.
        * Makefile.in (g++FAQ.info): Put -o option before input file.
Thu Apr 30 13:05:33 1998  Andrew MacLeod  
Thu Apr 30 13:05:33 1998  Andrew MacLeod  
        * gxxint.texi: Add info for squangling codes K and B.
        * gxxint.texi: Add info for squangling codes K and B.
Tue Apr 28 13:22:01 1998  Mark Mitchell  
Tue Apr 28 13:22:01 1998  Mark Mitchell  
        * semantics.c (begin_stmt_expr): Avoid duplicating the effect of
        * semantics.c (begin_stmt_expr): Avoid duplicating the effect of
        the expression in templates.
        the expression in templates.
        (finish_stmt_expr): Likewise.
        (finish_stmt_expr): Likewise.
1998-04-28  Brendan Kehoe  
1998-04-28  Brendan Kehoe  
        * decl2.c (ambiguous_decl): Fix NAME parm to be a tree, not int.
        * decl2.c (ambiguous_decl): Fix NAME parm to be a tree, not int.
Mon Apr 27 13:58:10 1998  Mark Mitchell  
Mon Apr 27 13:58:10 1998  Mark Mitchell  
        * decl.c (maybe_push_to_top_level): Always clear
        * decl.c (maybe_push_to_top_level): Always clear
        current_template_parms and processing_template_decl.
        current_template_parms and processing_template_decl.
        (pushtag): Remove check of current_class_type and some comments,
        (pushtag): Remove check of current_class_type and some comments,
        since maybe_push_to_top_level no longer creates confusion.
        since maybe_push_to_top_level no longer creates confusion.
Sun Apr 26 12:10:18 1998  Mark Mitchell  
Sun Apr 26 12:10:18 1998  Mark Mitchell  
        * cp-tree.h (CLASSTYPE_IS_TEMPLATE): New macro.
        * cp-tree.h (CLASSTYPE_IS_TEMPLATE): New macro.
        (DECL_CLASS_TEMPLATE_P): Likewise.
        (DECL_CLASS_TEMPLATE_P): Likewise.
        (DECL_PRIMARY_TEMPLATE): Likewise.
        (DECL_PRIMARY_TEMPLATE): Likewise.
        (PRIMARY_TEMPLATE_P): Use it.
        (PRIMARY_TEMPLATE_P): Use it.
        (push_template_decl_real): New function.
        (push_template_decl_real): New function.
        (redeclare_class_template): Take new template parameters as
        (redeclare_class_template): Take new template parameters as
        input.
        input.
        (is_specialization_of): New function.
        (is_specialization_of): New function.
        (comp_template_args): Declare.
        (comp_template_args): Declare.
        * decl.c (pushtag): Handle friend template classes.
        * decl.c (pushtag): Handle friend template classes.
        (xref_tag): Likewise.  Use new calling convention for
        (xref_tag): Likewise.  Use new calling convention for
        redeclare_class_template.
        redeclare_class_template.
        * decl2.c (grok_x_components): Handle friend templates.
        * decl2.c (grok_x_components): Handle friend templates.
        * friend.c (is_friend): Use is_specialization_of where
        * friend.c (is_friend): Use is_specialization_of where
        appropriate.  Deal with friend class templates.
        appropriate.  Deal with friend class templates.
        (make_friend_class): Let a class template be friends with itself.
        (make_friend_class): Let a class template be friends with itself.
        * pt.c (comp_template_args): Remove declaration.
        * pt.c (comp_template_args): Remove declaration.
        (tsubst_friend_class): New function.
        (tsubst_friend_class): New function.
        (push_template_decl_real): New function.
        (push_template_decl_real): New function.
        (push_template_decl): Use it.
        (push_template_decl): Use it.
        (redeclare_class_template): Adjust for new calling convention.
        (redeclare_class_template): Adjust for new calling convention.
        (comp_template_args): Give it external linkage.
        (comp_template_args): Give it external linkage.
        (instantiate_class_type): Use tsubst_friend_class to deal
        (instantiate_class_type): Use tsubst_friend_class to deal
        with friend templates.
        with friend templates.
        * typeck.c (comptypes): Use comp_template_args, rather than
        * typeck.c (comptypes): Use comp_template_args, rather than
        expanding it inline.
        expanding it inline.
        * parse.y (component_decl): Handle a nested template type
        * parse.y (component_decl): Handle a nested template type
        like other component type declarations.
        like other component type declarations.
        * pt.c (check_explicit_specialization): Handle overloaded
        * pt.c (check_explicit_specialization): Handle overloaded
        constructors correctly.
        constructors correctly.
        * pt.c (mabybe_get_template_decl_from_type_decl): New function.
        * pt.c (mabybe_get_template_decl_from_type_decl): New function.
        (lookup_template_class): Use it.
        (lookup_template_class): Use it.
Thu Apr 23 21:19:06 1998  Jason Merrill  
Thu Apr 23 21:19:06 1998  Jason Merrill  
        * cp-tree.def: Add WRAPPER.  USER_CONV now only has two ops.
        * cp-tree.def: Add WRAPPER.  USER_CONV now only has two ops.
        * cp-tree.h: Add WRAPPER support.
        * cp-tree.h: Add WRAPPER support.
        * call.c (add_candidate): Split out from add_*_candidate fns.
        * call.c (add_candidate): Split out from add_*_candidate fns.
        (build_over_call): Take the candidate instead of function and args.
        (build_over_call): Take the candidate instead of function and args.
        Enforce access control here.  Emit overload warnings here.
        Enforce access control here.  Emit overload warnings here.
        (add_warning): New fn.
        (add_warning): New fn.
        (joust): Add WARN parm.  If not set, call add_warning instead of
        (joust): Add WARN parm.  If not set, call add_warning instead of
        printing a warning.  Re-enable some warnings.
        printing a warning.  Re-enable some warnings.
        (tourney): Pass it.
        (tourney): Pass it.
        (convert_like): Adjust.
        (convert_like): Adjust.
        (build_new_op): Adjust.
        (build_new_op): Adjust.
        (build_new_function_call): Adjust.
        (build_new_function_call): Adjust.
        (build_user_type_conversion_1): Adjust.
        (build_user_type_conversion_1): Adjust.
        (USER_CONV_FN): Adjust.
        (USER_CONV_FN): Adjust.
        * tree.c (build_expr_wrapper, build_expr_ptr_wrapper,
        * tree.c (build_expr_wrapper, build_expr_ptr_wrapper,
        build_int_wrapper): New fns.
        build_int_wrapper): New fns.
Thu Apr 23 18:27:53 1998  Mark P. Mitchell  
Thu Apr 23 18:27:53 1998  Mark P. Mitchell  
        * pt.c (unify): Fix typo in previous change.
        * pt.c (unify): Fix typo in previous change.
Thu Apr 23 09:32:58 1998  Jason Merrill  
Thu Apr 23 09:32:58 1998  Jason Merrill  
        * error.c (dump_type_real): Declare canonical_name.
        * error.c (dump_type_real): Declare canonical_name.
        * typeck.c (comp_target_types): Fix PMFs.
        * typeck.c (comp_target_types): Fix PMFs.
Wed Apr 22 13:24:48 1998  Mark Mitchell  
Wed Apr 22 13:24:48 1998  Mark Mitchell  
        * class.c (finish_struct): Set TREE_PRIVATE and TREE_PROTECTED for
        * class.c (finish_struct): Set TREE_PRIVATE and TREE_PROTECTED for
        the DECL_RESULTs of a member TEMPLATE_DECL, not just the
        the DECL_RESULTs of a member TEMPLATE_DECL, not just the
        TEMPLATE_DECL.
        TEMPLATE_DECL.
        * pt.c (tsubst): Decrease the template-level of
        * pt.c (tsubst): Decrease the template-level of
        TEMPLATE_TEMPLATE_PARMS.  Likewise for the DECL_INITIAL of a
        TEMPLATE_TEMPLATE_PARMS.  Likewise for the DECL_INITIAL of a
        TEMPLATE_PARM_INDEX.
        TEMPLATE_PARM_INDEX.
        (template_decl_level): New function.
        (template_decl_level): New function.
        (unify): Make sure to record unifications for template
        (unify): Make sure to record unifications for template
        parameters, even when the parameters exactly match the arguments.
        parameters, even when the parameters exactly match the arguments.
        Combine duplicated code for TEMPLATE_TEMPLATE_PARMs and
        Combine duplicated code for TEMPLATE_TEMPLATE_PARMs and
        TEMPLATE_TYPE_PARMS.  Don't try to unify template parameters that
        TEMPLATE_TYPE_PARMS.  Don't try to unify template parameters that
        aren't from the level we're currently working on.
        aren't from the level we're currently working on.
Tue Apr 21 22:00:04 1998  Mark Mitchell  
Tue Apr 21 22:00:04 1998  Mark Mitchell  
        * errfn.c (cp_thing): Use xrealloc, not xmalloc, to copy memory.
        * errfn.c (cp_thing): Use xrealloc, not xmalloc, to copy memory.
        * decl2.c (check_member_template): Set DECL_IGNORED for member
        * decl2.c (check_member_template): Set DECL_IGNORED for member
        class templates, too.
        class templates, too.
        * decl2.c (grokfield): Remangle the name of a member TYPE_DECL.
        * decl2.c (grokfield): Remangle the name of a member TYPE_DECL.
Tue Apr 21 18:59:11 1998  Benjamin Kosnik  
Tue Apr 21 18:59:11 1998  Benjamin Kosnik  
        * decl.c (duplicate_decls): Only check DECL_FRIEND_P if function.
        * decl.c (duplicate_decls): Only check DECL_FRIEND_P if function.
Tue Apr 21 14:22:00 1998  Jeffrey A Law  (law@cygnus.com)
Tue Apr 21 14:22:00 1998  Jeffrey A Law  (law@cygnus.com)
        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Declare.
        * cp-tree.h (intTI_type_node, unsigned_intTI_type_node): Declare.
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Define.
        * decl.c (intTI_type_node, unsigned_intTI_type_node): Define.
        (init_decl_processing): Handle TI types.
        (init_decl_processing): Handle TI types.
        * typeck.c (unsigned_type, signed_type): Handle TI types.
        * typeck.c (unsigned_type, signed_type): Handle TI types.
Sat Apr 18 15:25:21 1998  Jim Wilson  
Sat Apr 18 15:25:21 1998  Jim Wilson  
        * g++spec.c (lang_specific_driver): New argument in_added_libraries.
        * g++spec.c (lang_specific_driver): New argument in_added_libraries.
        New local added_libraries.  Increment count when add library to
        New local added_libraries.  Increment count when add library to
        arglist.
        arglist.
Fri Apr 17 21:25:00 1998  Mark Mitchell  
Fri Apr 17 21:25:00 1998  Mark Mitchell  
        * cp-tree.h (type_as_string_real): New function.
        * cp-tree.h (type_as_string_real): New function.
        * pt.c (mangle_class_name_for_template): Use it.
        * pt.c (mangle_class_name_for_template): Use it.
        * error.c (dump_aggr_type): Change prototype.
        * error.c (dump_aggr_type): Change prototype.
        (dump_type_prefix): Likewise.
        (dump_type_prefix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_type_suffix): Likewise.
        (dump_type_real): Convert from dump_type.  If desired, the
        (dump_type_real): Convert from dump_type.  If desired, the
        "canonica" name of a typedef, i.e., the name of the underlying
        "canonica" name of a typedef, i.e., the name of the underlying
        type, can be printed.
        type, can be printed.
        (dump_type): Call dump_type_real.
        (dump_type): Call dump_type_real.
Fri Apr 17 14:30:45 1998  Jason Merrill  
Fri Apr 17 14:30:45 1998  Jason Merrill  
        * decl2.c (lang_decode_option): -fnew-abi implies -fvtable-thunks.
        * decl2.c (lang_decode_option): -fnew-abi implies -fvtable-thunks.
        * typeck.c (comp_target_types): Tweak pedantic case.
        * typeck.c (comp_target_types): Tweak pedantic case.
        (comp_target_parms): Tweak pedantic case.  Clean up somewhat.
        (comp_target_parms): Tweak pedantic case.  Clean up somewhat.
        Return -1 or 1 instead of 1 or 2.
        Return -1 or 1 instead of 1 or 2.
        (compparms): Remove STRICT handling.
        (compparms): Remove STRICT handling.
        (convert_for_assignment): Fix handling of pmfs.
        (convert_for_assignment): Fix handling of pmfs.
Fri Apr 17 14:04:16 1998  Mark Mitchell  
Fri Apr 17 14:04:16 1998  Mark Mitchell  
        * typeck.c (comp_target_types): Handle references like pointers.
        * typeck.c (comp_target_types): Handle references like pointers.
        (comp_target_parms): Note that return code from comp_target_types
        (comp_target_parms): Note that return code from comp_target_types
        can be negative to indicate failure.
        can be negative to indicate failure.
Fri Apr 17 09:10:52 1998  Andreas Schwab  
Fri Apr 17 09:10:52 1998  Andreas Schwab  
        * Make-lang.in (c++.all.build): Don't depend on $(DEMANGLER_PROG),
        * Make-lang.in (c++.all.build): Don't depend on $(DEMANGLER_PROG),
        which requires a working target compiler to build.
        which requires a working target compiler to build.
Fri Apr 17 08:57:35 1998  Jeffrey A Law  (law@cygnus.com)
Fri Apr 17 08:57:35 1998  Jeffrey A Law  (law@cygnus.com)
        * tree.c (avoid_overlap): Add prototype.
        * tree.c (avoid_overlap): Add prototype.
        * spew.c (num_tokens): Add prototype.
        * spew.c (num_tokens): Add prototype.
        (nth_noken, add_token, consume_token, debug_yychar): Likewise.
        (nth_noken, add_token, consume_token, debug_yychar): Likewise.
        * search.c (dfs_check_overlap): Add prototype.
        * search.c (dfs_check_overlap): Add prototype.
        (dfs_no_overlap_yet): Likewise.
        (dfs_no_overlap_yet): Likewise.
        * pt.c (original_template): Add prototype.
        * pt.c (original_template): Add prototype.
        (inline_needs_template_parms): Likewise.
        (inline_needs_template_parms): Likewise.
        (push_inline_template_parms_recursive): Likewise.
        (push_inline_template_parms_recursive): Likewise.
        (retrieve_specialization, register_specialization): Likewise.
        (retrieve_specialization, register_specialization): Likewise.
        (print_candidates, reduce_template_parm_level): Likewise.
        (print_candidates, reduce_template_parm_level): Likewise.
        (build_template_decl, mark_template_parm): Likewise.
        (build_template_decl, mark_template_parm): Likewise.
        (tsubst_friend_function, get_bindings_real): Likewise.
        (tsubst_friend_function, get_bindings_real): Likewise.
        * method.c (start_squangling): Add prototype.
        * method.c (start_squangling): Add prototype.
        (end_squangling, check_ktype, issue_ktype): Likewise.
        (end_squangling, check_ktype, issue_ktype): Likewise.
        (build_overloaded_scope_ref, check_btype): Likewise.
        (build_overloaded_scope_ref, check_btype): Likewise.
        (build_mangled_template_parm_index): Likewise.
        (build_mangled_template_parm_index): Likewise.
        * lex.c (init_cpp_parse): Add prototype.
        * lex.c (init_cpp_parse): Add prototype.
        (handle_cp_pragma, handle_sysv_pragma): Likewise.
        (handle_cp_pragma, handle_sysv_pragma): Likewise.
        (reduce_cmp, token_cmp): Likewise.
        (reduce_cmp, token_cmp): Likewise.
        * except.c (call_eh_info): Add prototype.
        * except.c (call_eh_info): Add prototype.
        (push_eh_info, get_eh_info, get_eh_value, get_eh_type): Likewise.
        (push_eh_info, get_eh_info, get_eh_value, get_eh_type): Likewise.
        (get_eh_caught, get_eh_handlers, do_pop_exception): Likewise.
        (get_eh_caught, get_eh_handlers, do_pop_exception): Likewise.
        * decl2.c (is_namespace_ancestor): Add prototype.
        * decl2.c (is_namespace_ancestor): Add prototype.
        (namespace_ancestor, add_using_namespace): Likewise.
        (namespace_ancestor, add_using_namespace): Likewise.
        (ambiguous_decl): Likewise.
        (ambiguous_decl): Likewise.
        * decl.c (indent): Add prototype.
        * decl.c (indent): Add prototype.
        * call.c (add_template_candidate_real): Add prototype.
        * call.c (add_template_candidate_real): Add prototype.
Fri Apr 17 01:57:12 1998  Jason Merrill  
Fri Apr 17 01:57:12 1998  Jason Merrill  
        * decl2.c (build_expr_from_tree): Just return a PMF.
        * decl2.c (build_expr_from_tree): Just return a PMF.
Fri Apr 17 00:45:12 1998  Mark Mitchell  
Fri Apr 17 00:45:12 1998  Mark Mitchell  
        * typeck2.c (process_init_constructor): Don't strip cv-qualifiers
        * typeck2.c (process_init_constructor): Don't strip cv-qualifiers
        when doing initializations.
        when doing initializations.
        * pt.c (unify): Use comptypes to compare type args.
        * pt.c (unify): Use comptypes to compare type args.
Fri Apr 17 00:24:22 1998  Jason Merrill  
Fri Apr 17 00:24:22 1998  Jason Merrill  
        * decl.c (duplicate_decls): Fix check for when it's safe to free
        * decl.c (duplicate_decls): Fix check for when it's safe to free
        the new decl.
        the new decl.
        * pt.c (mangle_class_name_for_template): Don't pass a typedef type
        * pt.c (mangle_class_name_for_template): Don't pass a typedef type
        to type_as_string.
        to type_as_string.
Thu Apr 16 17:47:30 1998  Jeffrey A Law  (law@cygnus.com)
Thu Apr 16 17:47:30 1998  Jeffrey A Law  (law@cygnus.com)
        * pt.c (build_template_parm_index): Add prototype.
        * pt.c (build_template_parm_index): Add prototype.
        * search.c (my_tree_cons): Don't clear words outside the
        * search.c (my_tree_cons): Don't clear words outside the
        newly allocated node.
        newly allocated node.
Wed Apr 15 15:34:44 1998  Dave Brolley  
Wed Apr 15 15:34:44 1998  Dave Brolley  
        * lex.c (init_parse): Now returns char* containing the filename.
        * lex.c (init_parse): Now returns char* containing the filename.
Wed Apr 15 13:20:06 1998  John Carr  
Wed Apr 15 13:20:06 1998  John Carr  
                          Jeff Law   
                          Jeff Law   
        * errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
        * errfn.c: Rework to avoid problems when HOST_WIDE_INT is longer
        than a pointer.
        than a pointer.
Sun Apr 12 22:31:19 1998  Richard Kenner  
Sun Apr 12 22:31:19 1998  Richard Kenner  
        * cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.
        * cvt.c (cp_convert_to_pointer): Use TYPE_PRECISION.
Fri Apr 10 12:16:49 1998  Benjamin Kosnik  
Fri Apr 10 12:16:49 1998  Benjamin Kosnik  
        * decl.c (duplicate_decls): Don't warn for redundant decls if
        * decl.c (duplicate_decls): Don't warn for redundant decls if
        friend: let add_friend take care of it.
        friend: let add_friend take care of it.
Thu Apr  9 02:40:48 1998  Jason Merrill  
Thu Apr  9 02:40:48 1998  Jason Merrill  
        * sig.c (build_signature_pointer_constructor): Don't set
        * sig.c (build_signature_pointer_constructor): Don't set
        TREE_HAS_CONSTRUCTOR for a signature pointer.
        TREE_HAS_CONSTRUCTOR for a signature pointer.
        * cvt.c (ocp_convert): Don't force a temporary for internal structs.
        * cvt.c (ocp_convert): Don't force a temporary for internal structs.
        * init.c (resolve_offset_ref): Warn about implicit & on pmfs
        * init.c (resolve_offset_ref): Warn about implicit & on pmfs
        here, too.
        here, too.
        * typeck.c (build_unary_op): Only allow taking the address of a
        * typeck.c (build_unary_op): Only allow taking the address of a
        real constructor.
        real constructor.
        * typeck2.c (digest_init): Simplify.
        * typeck2.c (digest_init): Simplify.
        (store_init_value): Don't pedwarn about using { } for pmfs.
        (store_init_value): Don't pedwarn about using { } for pmfs.
Thu Apr  9 22:16:57 1998  Per Bothner  
Thu Apr  9 22:16:57 1998  Per Bothner  
        * cp-tree.h (start_decl):  Update prototype.
        * cp-tree.h (start_decl):  Update prototype.
        * decl.c (start_decl):  Like the C version, new parameters
        * decl.c (start_decl):  Like the C version, new parameters
        for the attributes.  Call cplus_decl_attributes here,
        for the attributes.  Call cplus_decl_attributes here,
        (pushdecl):  Like C version, do build_type_copy if TYPE_DECL,
        (pushdecl):  Like C version, do build_type_copy if TYPE_DECL,
        (grokdeclarator):  Pass NULL for new start_decl arguments.
        (grokdeclarator):  Pass NULL for new start_decl arguments.
        * pt.c (tsubst_expr):  Likewise.
        * pt.c (tsubst_expr):  Likewise.
        * parse.y:  Merge cplus_decl_attribute calls into start_decl calls.
        * parse.y:  Merge cplus_decl_attribute calls into start_decl calls.
        * typeck.c (common_type): Check TYPE_MAIN_VARIANT.
        * typeck.c (common_type): Check TYPE_MAIN_VARIANT.
        * lex.c (build_lang_decl): Add lang_name_java.
        * lex.c (build_lang_decl): Add lang_name_java.
        * class.c (push_lang_context): Add lang_name_java.
        * class.c (push_lang_context): Add lang_name_java.
        * method.c (build_mangled_name): Check for is_java_type.
        * method.c (build_mangled_name): Check for is_java_type.
Thu Apr  9 22:16:57 1998  Benjamin Kosnik  
Thu Apr  9 22:16:57 1998  Benjamin Kosnik  
        * decl.c (grokdeclarator): Check TYPE_MAIN_VARIANT.
        * decl.c (grokdeclarator): Check TYPE_MAIN_VARIANT.
        * call.c (build_scoped_method_call): Check for TREE_CODE for
        * call.c (build_scoped_method_call): Check for TREE_CODE for
        VOID_TYPE instead of type ==  void_type_node.
        VOID_TYPE instead of type ==  void_type_node.
        (build_method_call): Likewise.
        (build_method_call): Likewise.
        * decl.c (lookup_name_real): Likewise.
        * decl.c (lookup_name_real): Likewise.
        (grokdeclarator): Likewise.
        (grokdeclarator): Likewise.
        (start_decl): Likewise.
        (start_decl): Likewise.
        (grokparms): Likewise.
        (grokparms): Likewise.
        (start_function): Likewise.
        (start_function): Likewise.
        (finish_function): Likewise.
        (finish_function): Likewise.
        (start_method): Likewise.
        (start_method): Likewise.
Thu Apr  9 00:18:44 1998  Dave Brolley  (brolley@cygnus.com)
Thu Apr  9 00:18:44 1998  Dave Brolley  (brolley@cygnus.com)
        * lex.c (finput): New variable.
        * lex.c (finput): New variable.
        (init_cpp_parse):  Renamed from init_parse.
        (init_cpp_parse):  Renamed from init_parse.
        (init_parse): Handle !USE_CPPLIB.  Call init_cpp_parse when finished.
        (init_parse): Handle !USE_CPPLIB.  Call init_cpp_parse when finished.
        (finish_parse): New function.
        (finish_parse): New function.
        * cp-tree.h (init_lex, init_parse): Remove declarations.
        * cp-tree.h (init_lex, init_parse): Remove declarations.
Mon Apr  6 02:25:05 1998  Jason Merrill  
Mon Apr  6 02:25:05 1998  Jason Merrill  
        * call.c (build_call): Still evaluate the actual argument.
        * call.c (build_call): Still evaluate the actual argument.
        * class.c (is_empty_class): Update for -fnew-abi.
        * class.c (is_empty_class): Update for -fnew-abi.
        * decl2.c: -fnew-abi implies -fsquangle.
        * decl2.c: -fnew-abi implies -fsquangle.
        * method.c (do_build_assign_ref): Don't do anything to copy
        * method.c (do_build_assign_ref): Don't do anything to copy
        an empty class.
        an empty class.
        (do_build_copy_constructor): Likewise.
        (do_build_copy_constructor): Likewise.
        * call.c (build_over_call): Likewise.
        * call.c (build_over_call): Likewise.
Sat Apr  4 18:43:58 1998  Jason Merrill  
Sat Apr  4 18:43:58 1998  Jason Merrill  
        * tree.c (avoid_overlap): Return a value.
        * tree.c (avoid_overlap): Return a value.
Sat Apr  4 12:52:35 1998  Jeffrey A Law  (law@cygnus.com)
Sat Apr  4 12:52:35 1998  Jeffrey A Law  (law@cygnus.com)
        * method.c (check_btype): Add missing argument to xrealloc.
        * method.c (check_btype): Add missing argument to xrealloc.
        (check_ktype): Likewise.
        (check_ktype): Likewise.
Fri Apr  3 02:22:59 1998  Jason Merrill  
Fri Apr  3 02:22:59 1998  Jason Merrill  
        Implement empty base optimization.
        Implement empty base optimization.
        * class.c (finish_struct_1): Add vbase fields earlier.  Set
        * class.c (finish_struct_1): Add vbase fields earlier.  Set
        CLASSTYPE_SIZE of an empty base to 0.  Types with bases can be empty.
        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.
        * search.c (dfs_check_overlap, dfs_no_overlap_yet): New fns.
        (types_overlap_p): New fn.
        (types_overlap_p): New fn.
        * tree.c (avoid_overlap): New fn.
        * tree.c (avoid_overlap): New fn.
        (build_base_fields): Use it to avoid overlapping empty bases.
        (build_base_fields): Use it to avoid overlapping empty bases.
        * cp-tree.h, decl2.c, lang-options.h: Add -fnew-abi.
        * cp-tree.h, decl2.c, lang-options.h: Add -fnew-abi.
        * decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.
        * decl.c (cplus_expand_expr_stmt): Strip unused INDIRECT_REFs.
        Re-implement allocation of base class subobjects.
        Re-implement allocation of base class subobjects.
        * tree.c (unshare_base_binfos): New fn.
        * tree.c (unshare_base_binfos): New fn.
        (layout_basetypes): Use it.  Now handles offsets of both virtual and
        (layout_basetypes): Use it.  Now handles offsets of both virtual and
        non-virtual bases, after layout_type.
        non-virtual bases, after layout_type.
        (layout_vbasetypes): Remove.
        (layout_vbasetypes): Remove.
        (build_base_fields): Generate FIELD_DECLs for each non-virtual base.
        (build_base_fields): Generate FIELD_DECLs for each non-virtual base.
        (build_vbase_pointer_fields): Split out from old layout_basetypes.
        (build_vbase_pointer_fields): Split out from old layout_basetypes.
        * class.c (finish_base_struct): Lose offset handling code.
        * class.c (finish_base_struct): Lose offset handling code.
        Move nonvdtor warning here.  Don't mess with t_binfo anymore.
        Move nonvdtor warning here.  Don't mess with t_binfo anymore.
        (finish_struct_1): Don't mess with t_binfo anymore.  Use fns above.
        (finish_struct_1): Don't mess with t_binfo anymore.  Use fns above.
        * cp-tree.h: Adjust.
        * cp-tree.h: Adjust.
Thu Apr  2 14:25:13 1998  Jason Merrill  
Thu Apr  2 14:25:13 1998  Jason Merrill  
        * cp-tree.h: Lose CLASSTYPE_VBASE_SIZE, some unused stuff.
        * cp-tree.h: Lose CLASSTYPE_VBASE_SIZE, some unused stuff.
        * decl.c, decl2.c, pt.c, ptree.c, lex.c: Likewise.
        * decl.c, decl2.c, pt.c, ptree.c, lex.c: Likewise.
        * class.c (duplicate_tag_error): Likewise.
        * class.c (duplicate_tag_error): Likewise.
        (finish_struct_1): Set CLASSTYPE_SIZE, CLASSTYPE_MODE, CLASSTYPE_ALIGN.
        (finish_struct_1): Set CLASSTYPE_SIZE, CLASSTYPE_MODE, CLASSTYPE_ALIGN.
        * tree.c (layout_vbasetypes): Update from layout_record, remove
        * tree.c (layout_vbasetypes): Update from layout_record, remove
        var_size support, use CLASSTYPE_SIZE instead of CLASSTYPE_VBASE_SIZE.
        var_size support, use CLASSTYPE_SIZE instead of CLASSTYPE_VBASE_SIZE.
        (layout_basetypes): Likewise.
        (layout_basetypes): Likewise.
Wed Apr  1 18:22:25 1998  Jeffrey A Law  (law@cygnus.com)
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.
        * class.c, Make sure system.h is included just after config.h.
        Delete lingering stdio and errno references too.
        Delete lingering stdio and errno references too.
        * decl.c, errfn.c, parse.y, ptree.c search.c, xref.c: Likewise.
        * decl.c, errfn.c, parse.y, ptree.c search.c, xref.c: Likewise.
Wed Apr  1 15:38:36 1998  Jason Merrill  
Wed Apr  1 15:38:36 1998  Jason Merrill  
        * friend.c (is_friend): Fix access control for local classes.
        * friend.c (is_friend): Fix access control for local classes.
        * class.c (is_empty_class): New fn.
        * class.c (is_empty_class): New fn.
        * call.c (build_call): Don't pass empty class objects to a function.
        * call.c (build_call): Don't pass empty class objects to a function.
Wed Apr  1 14:58:35 1998  Mark Mitchell  
Wed Apr  1 14:58:35 1998  Mark Mitchell  
        * call.c (build_over_call): Do name resolution for default
        * call.c (build_over_call): Do name resolution for default
        arguments of function templates in the scope of the templates.
        arguments of function templates in the scope of the templates.
Tue Mar 31 13:43:57 1998  Jeffrey A Law  (law@cygnus.com)
Tue Mar 31 13:43:57 1998  Jeffrey A Law  (law@cygnus.com)
        * call.c: Include system.h.  Remove includes, declarations and
        * call.c: Include system.h.  Remove includes, declarations and
        defines provided by system.h.
        defines provided by system.h.
        * class.c, cvt.c, decl.c, decl2.c, errfn.c error.c: Likewise.
        * 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.
        * 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.
        * 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.
        * semantics.c, sig.c, spew.c, tree.c, typeck.c: Likewise.
        * typeck2.c, xref.c: Likewise.
        * typeck2.c, xref.c: Likewise.
        * Makefile.in: Dependencies updated as appropriate.
        * Makefile.in: Dependencies updated as appropriate.
        * Make-lang.in: Likewise.
        * Make-lang.in: Likewise.
Mon Mar 30 12:15:00 1998  Mark Mitchell  
Mon Mar 30 12:15:00 1998  Mark Mitchell  
        * pt.c (fn_type_unification): Allow incomplete unification without
        * pt.c (fn_type_unification): Allow incomplete unification without
        an immediate error message.
        an immediate error message.
Mon Mar 30 08:55:42 1998  Jason Merrill  
Mon Mar 30 08:55:42 1998  Jason Merrill  
        * tree.c (member_p): New fn.
        * tree.c (member_p): New fn.
        * decl2.c (finish_file): Only set DECL_STATIC_FUNCTION_P for
        * decl2.c (finish_file): Only set DECL_STATIC_FUNCTION_P for
        initializing class members.
        initializing class members.
        * cp-tree.def (TEMPLATE_PARM_INDEX): Class 'x'.
        * cp-tree.def (TEMPLATE_PARM_INDEX): Class 'x'.
        * ptree.c (lang_print_xnode): Handle TEMPLATE_PARM_INDEX.
        * ptree.c (lang_print_xnode): Handle TEMPLATE_PARM_INDEX.
        * call.c (build_method_call): Handle non-scoped destructors, too.
        * call.c (build_method_call): Handle non-scoped destructors, too.
        * pt.c (tsubst_copy): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * pt.c (print_template_context): Split out...
        * pt.c (print_template_context): Split out...
        (push_tinst_level): ...from here.
        (push_tinst_level): ...from here.
        * friend.c (is_friend): Don't pass a type to decl_function_context.
        * friend.c (is_friend): Don't pass a type to decl_function_context.
        * typeck.c (convert_for_initialization): Always hand off
        * typeck.c (convert_for_initialization): Always hand off
        conversions to class type.
        conversions to class type.
Sun Mar 29 20:01:59 1998  Jason Merrill  
Sun Mar 29 20:01:59 1998  Jason Merrill  
        * friend.c (is_friend): Local classes have the same access as the
        * friend.c (is_friend): Local classes have the same access as the
        enclosing function.
        enclosing function.
Sun Mar 29 00:47:32 1998  Jeffrey A Law  (law@cygnus.com)
Sun Mar 29 00:47:32 1998  Jeffrey A Law  (law@cygnus.com)
        * typeck.c (expand_target_expr): Delete dead function.
        * typeck.c (expand_target_expr): Delete dead function.
        * search.c: Put various prototypes inside #ifdef MI_MATRIX.
        * search.c: Put various prototypes inside #ifdef MI_MATRIX.
        * repo.c (save_string): Delete dead function.
        * repo.c (save_string): Delete dead function.
        * method.c (thunk_printable_name): Delete dead function.
        * method.c (thunk_printable_name): Delete dead function.
        * lex.c (yynextch): Delete dead function.
        * lex.c (yynextch): Delete dead function.
        * expr.c (tree_extract_aggr_init): #if 0 out.
        * expr.c (tree_extract_aggr_init): #if 0 out.
        * except.c (do_unwind): Delete dead function.
        * except.c (do_unwind): Delete dead function.
        (easy_expand_asm): Likewise.
        (easy_expand_asm): Likewise.
        * cvt.c (build_conversion_type_1): Delete dead function.
        * cvt.c (build_conversion_type_1): Delete dead function.
        * cp-tree.h (push_expression_obstack): Declare.
        * cp-tree.h (push_expression_obstack): Declare.
        * call.c (source_type): #if 0 out.
        * call.c (source_type): #if 0 out.
        * class.c (alter_access): Remove unused label.  Add braces
        * class.c (alter_access): Remove unused label.  Add braces
        around empty else clause.
        around empty else clause.
        * lex.c (yyprint): Fix argument to printf.
        * lex.c (yyprint): Fix argument to printf.
Sat Mar 28 17:43:52 1998  Mark Mitchell  
Sat Mar 28 17:43:52 1998  Mark Mitchell  
        * pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.
        * pt.c (tsubst): Clear TREE_USED for new FUNCTION_DECLs.
        * pt.c (instantiate_class_template): Make sure template
        * pt.c (instantiate_class_template): Make sure template
        arguments are permanent.
        arguments are permanent.
        * init.c (resolve_offset_ref): Don't go looking around in
        * init.c (resolve_offset_ref): Don't go looking around in
        template types.
        template types.
        * semantics.c: Add routines to handle expressions, and some
        * semantics.c: Add routines to handle expressions, and some
        declaration processing.
        declaration processing.
        * parse.y: Use them.
        * parse.y: Use them.
        (current_class_depth): Move declaration to cp-tree.h.
        (current_class_depth): Move declaration to cp-tree.h.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
        * cp-tree.h: Use them.
        * cp-tree.h: Use them.
        (current_class_depth): Declare.
        (current_class_depth): Declare.
        * pt.c (tsubst_copy): Use begin_stmt_expr and finish_stmt_expr.
        * pt.c (tsubst_copy): Use begin_stmt_expr and finish_stmt_expr.
Fri Mar 27 20:23:18 1998  Mark Mitchell  
Fri Mar 27 20:23:18 1998  Mark Mitchell  
        * error.c (dump_decl): Be a bit more explicit with template
        * error.c (dump_decl): Be a bit more explicit with template
        type arguments, when verbose.
        type arguments, when verbose.
Fri Mar 27 18:16:40 1998  Jason Merrill  
Fri Mar 27 18:16:40 1998  Jason Merrill  
        * inc/exception: Reorder closing braces.
        * inc/exception: Reorder closing braces.
Fri Mar 27 13:22:18 1998  Mark Mitchell  
Fri Mar 27 13:22:18 1998  Mark Mitchell  
        * pt.c (redeclare_class_template): New function.
        * pt.c (redeclare_class_template): New function.
        * cp_tree.h (redeclare_class_template): Declare it.
        * cp_tree.h (redeclare_class_template): Declare it.
        * decl.c (xref_tag): Use it.
        * decl.c (xref_tag): Use it.
Thu Mar 26 11:16:30 1998  Jason Merrill  
Thu Mar 26 11:16:30 1998  Jason Merrill  
        * call.c (build_over_call): Check IS_AGGR_TYPE, not
        * call.c (build_over_call): Check IS_AGGR_TYPE, not
        TYPE_LANG_SPECIFIC.
        TYPE_LANG_SPECIFIC.
        * typeck.c (convert_arguments): Likewise.
        * typeck.c (convert_arguments): Likewise.
        * decl.c (grokdeclarator): Remove const and volatile from type after
        * decl.c (grokdeclarator): Remove const and volatile from type after
        setting constp and volatilep.
        setting constp and volatilep.
        * class.c (finish_struct_1): Don't warn about bool bitfield larger
        * class.c (finish_struct_1): Don't warn about bool bitfield larger
        than one bit.
        than one bit.
Thu Mar 26 10:25:52 1998  Mark Mitchell  
Thu Mar 26 10:25:52 1998  Mark Mitchell  
        * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.
        * pt.c (convert_nontype_argument): STRIP_NOPS where appropriate.
Thu Mar 26 10:24:05 1998  Mark Mitchell  
Thu Mar 26 10:24:05 1998  Mark Mitchell  
        * call.c (build_object_call): Complain about ambiguous operator(),
        * call.c (build_object_call): Complain about ambiguous operator(),
        rather that crashing.
        rather that crashing.
        (build_new_op): Likewise.
        (build_new_op): Likewise.
        (build_op_delete_call): Likewise.
        (build_op_delete_call): Likewise.
Thu Mar 26 10:23:24 1998  Mark Mitchell  
Thu Mar 26 10:23:24 1998  Mark Mitchell  
        * cvt.c (perform_qualification_conversions): Use comp_target_types
        * cvt.c (perform_qualification_conversions): Use comp_target_types
        instead of comp_ptr_ttypes.
        instead of comp_ptr_ttypes.
Wed Mar 25 16:10:50 1998  Mark Mitchell  
Wed Mar 25 16:10:50 1998  Mark Mitchell  
        * cp-tree.h (enforce_access): Declare.
        * cp-tree.h (enforce_access): Declare.
        * call.c (enforce_access): Make it extern, not static.
        * call.c (enforce_access): Make it extern, not static.
        * class.c (alter_access): Use enforce_access; modify code for ISO
        * class.c (alter_access): Use enforce_access; modify code for ISO
        compliance, rather than ARM rules.
        compliance, rather than ARM rules.
Wed Mar 25 12:10:45 1998  Kriang Lerdsuwanakij  
Wed Mar 25 12:10:45 1998  Kriang Lerdsuwanakij  
        * cp-tree.h: Fix typo.
        * cp-tree.h: Fix typo.
Wed Mar 25 02:01:02 1998  Jason Merrill  
Wed Mar 25 02:01:02 1998  Jason Merrill  
        * expr.c (cplus_expand_expr): Only do PCC_STATIC_STRUCT_RETURN thing
        * expr.c (cplus_expand_expr): Only do PCC_STATIC_STRUCT_RETURN thing
        if (aggregate_value_p (type)).
        if (aggregate_value_p (type)).
        * decl2.c (constructor_name_full): Handle TYPENAME_TYPE.
        * decl2.c (constructor_name_full): Handle TYPENAME_TYPE.
Tue Mar 24 16:12:01 1998  Mark Mitchell  
Tue Mar 24 16:12:01 1998  Mark Mitchell  
        * tree.c (mapcar): When dealing with a DECL, use it's constant
        * tree.c (mapcar): When dealing with a DECL, use it's constant
        value, if any.
        value, if any.
        * pt.c (lookup_template_class): Don't mangle the names of template
        * pt.c (lookup_template_class): Don't mangle the names of template
        classes whose arguments are unknown.
        classes whose arguments are unknown.
        * pt.c (tsubst_expr): Handle GOTO_STMT correctly.
        * pt.c (tsubst_expr): Handle GOTO_STMT correctly.
Tue Mar 24 12:21:55 1998  Benjamin Kosnik  
Tue Mar 24 12:21:55 1998  Benjamin Kosnik  
        * decl.c (init_decl_processing): Set TYPE_PRECISON for bools to 1.
        * decl.c (init_decl_processing): Set TYPE_PRECISON for bools to 1.
Tue Mar 24 12:21:48 1998  Jim Wilson  
Tue Mar 24 12:21:48 1998  Jim Wilson  
        * decl.c (init_decl_processing): Initialize TYPE_MAX_VALUE for
        * decl.c (init_decl_processing): Initialize TYPE_MAX_VALUE for
        boolean_type_node to 1.
        boolean_type_node to 1.
Tue Mar 24 10:23:47 1998  Mark Mitchell  
Tue Mar 24 10:23:47 1998  Mark Mitchell  
        * error.c (dump_expr): Remove unused variable `l'.
        * error.c (dump_expr): Remove unused variable `l'.
        * pt.c (for_each_template_parm): New function, created by
        * pt.c (for_each_template_parm): New function, created by
        converting uses_template_parms.
        converting uses_template_parms.
        (tree_fn_t): New typedef.
        (tree_fn_t): New typedef.
        (uses_template_parms): Use it.
        (uses_template_parms): Use it.
        (mark_template_parm): New function.
        (mark_template_parm): New function.
        (push_template_decl): Check that the argument list of a partial
        (push_template_decl): Check that the argument list of a partial
        specialization uses all the template parameters.
        specialization uses all the template parameters.
        * Make-lang.in (c++filt): Don't delete cxxmain.c after we're done
        * Make-lang.in (c++filt): Don't delete cxxmain.c after we're done
        with it; we might want it for debugging.
        with it; we might want it for debugging.
        * cp-tree.h (type_unification): Change interface.
        * cp-tree.h (type_unification): Change interface.
        * class.c (finish_struct_1): Skip nested template types, just like
        * class.c (finish_struct_1): Skip nested template types, just like
        ordinary nested types.
        ordinary nested types.
        (instantiate_type): Use new interface to type_unification.
        (instantiate_type): Use new interface to type_unification.
        * lex.c (init_lex): Add __sz as opname for sizeof.
        * lex.c (init_lex): Add __sz as opname for sizeof.
        * method.c (build_overload_scope_ref): New function.
        * method.c (build_overload_scope_ref): New function.
        (build_overload_int): Handle complex expressions.  Set
        (build_overload_int): Handle complex expressions.  Set
        numeric_output_need_bar if necessary.
        numeric_output_need_bar if necessary.
        (build_overload_value): Handle non-PARM_DECL nodes; this
        (build_overload_value): Handle non-PARM_DECL nodes; this
        routine is now used by build_overload_int.  Remove some
        routine is now used by build_overload_int.  Remove some
        assignments to numeric_output_need_bar.  Use
        assignments to numeric_output_need_bar.  Use
        build_overload_scope_ref.
        build_overload_scope_ref.
        (build_qualified_name): Note that some template mangled names end
        (build_qualified_name): Note that some template mangled names end
        with digits, and set numeric_output_need_bar appropriately.  Use
        with digits, and set numeric_output_need_bar appropriately.  Use
        build_underscore_int.
        build_underscore_int.
        * pt.c (unify): Change interface.
        * pt.c (unify): Change interface.
        (type_unification_real): Likewise.
        (type_unification_real): Likewise.
        (determine_specialization): Use new interfaces.
        (determine_specialization): Use new interfaces.
        (tsubst): Deal gracefully with situations in which the argument
        (tsubst): Deal gracefully with situations in which the argument
        vector is not fully filled.
        vector is not fully filled.
        (fn_type_unification): Use new interfaces.
        (fn_type_unification): Use new interfaces.
        (type_unification): Likewise.  Remove NOP_EXPR hack.
        (type_unification): Likewise.  Remove NOP_EXPR hack.
        (type_unification_real): Likewise.
        (type_unification_real): Likewise.
        (unify): Likewise.  Deal with unification of complex expressions.
        (unify): Likewise.  Deal with unification of complex expressions.
Mon Mar 23 12:24:37 1998  Jason Merrill  
Mon Mar 23 12:24:37 1998  Jason Merrill  
        * pt.c (complete_template_args): Initialize skip properly.
        * pt.c (complete_template_args): Initialize skip properly.
        * decl.c (make_typename_type): Revert.
        * decl.c (make_typename_type): Revert.
        (make_implicit_typename): Remove.
        (make_implicit_typename): Remove.
        (lookup_name_real): Don't call it.  Call lookup_field if we see a
        (lookup_name_real): Don't call it.  Call lookup_field if we see a
        TYPE_DECL from a template base.
        TYPE_DECL from a template base.
        * search.c (lookup_field): Do implicit typename stuff.
        * search.c (lookup_field): Do implicit typename stuff.
Sun Mar 22 00:50:42 1998  Nick Clifton  
Sun Mar 22 00:50:42 1998  Nick Clifton  
                          Geoff Noer    
                          Geoff Noer    
        * Makefile.in: Various fixes for building cygwin32 native toolchains.
        * Makefile.in: Various fixes for building cygwin32 native toolchains.
        * Make-lang.in: Likewise.
        * Make-lang.in: Likewise.
Fri Mar 20 18:07:39 1998  Kriang Lerdsuwanakij  
Fri Mar 20 18:07:39 1998  Kriang Lerdsuwanakij  
        * pt.c (tsubst, TEMPLATE_TEMPLATE_PARM): Simplify.
        * pt.c (tsubst, TEMPLATE_TEMPLATE_PARM): Simplify.
Fri Mar 20 10:42:07 1998  Jason Merrill  
Fri Mar 20 10:42:07 1998  Jason Merrill  
        * decl.c (make_implicit_typename): Rewrite removed code.
        * decl.c (make_implicit_typename): Rewrite removed code.
        (make_typename_type): Call it if the type we look up comes from
        (make_typename_type): Call it if the type we look up comes from
        a base that uses template parms.
        a base that uses template parms.
        * pt.c (complete_template_args): Rewrite.
        * pt.c (complete_template_args): Rewrite.
        (tsubst, FUNCTION_DECL): Use it.
        (tsubst, FUNCTION_DECL): Use it.
Fri Mar 20 08:12:43 1998  H.J. Lu  (hjl@gnu.org)
Fri Mar 20 08:12:43 1998  H.J. Lu  (hjl@gnu.org)
        * semantics.c (finish_asm_stmt): Fix combine strings.  Call
        * semantics.c (finish_asm_stmt): Fix combine strings.  Call
        c_expand_asm_operands () if output_operands, input_operands or
        c_expand_asm_operands () if output_operands, input_operands or
        clobbers is not NULL_TREE.
        clobbers is not NULL_TREE.
Fri Mar 20 00:10:19 1998  Kriang Lerdsuwanakij  
Fri Mar 20 00:10:19 1998  Kriang Lerdsuwanakij  
        * pt.c (complete_template_args): New function.
        * pt.c (complete_template_args): New function.
        (get_bindings): Deal with specializations of function templates
        (get_bindings): Deal with specializations of function templates
        with return type containing parameters from outer class
        with return type containing parameters from outer class
        templates.
        templates.
        (tsubst, TEMPLATE_TEMPLATE_PARM): When reducing parameter level,
        (tsubst, TEMPLATE_TEMPLATE_PARM): When reducing parameter level,
        substitute arguments and compose a new type.
        substitute arguments and compose a new type.
Thu Mar 19 19:01:48 1998  Mark Mitchell  
Thu Mar 19 19:01:48 1998  Mark Mitchell  
        * pt.c (tsubst): Clear DECL_PENDING_INLINE_INFO for new
        * pt.c (tsubst): Clear DECL_PENDING_INLINE_INFO for new
        FUNCTION_DECLs.
        FUNCTION_DECLs.
Thu Mar 19 11:51:58 1998  Jason Merrill  
Thu Mar 19 11:51:58 1998  Jason Merrill  
        * decl.c (make_implicit_typename): Lose useless code.
        * decl.c (make_implicit_typename): Lose useless code.
        * call.c (standard_conversion): Handle A* -> const A* properly.
        * call.c (standard_conversion): Handle A* -> const A* properly.
        * pt.c (get_bindings_real): Rename from get_bindings.  Add
        * pt.c (get_bindings_real): Rename from get_bindings.  Add
        check_rettype parm.
        check_rettype parm.
        (get_bindings): Pass 1.
        (get_bindings): Pass 1.
        (get_bindings_overload): Pass 0.
        (get_bindings_overload): Pass 0.
Wed Mar 19 09:08:12 1998  Mark Mitchell  
Wed Mar 19 09:08:12 1998  Mark Mitchell  
        * pt.c (check_explicit_specialization): When reverting a static
        * pt.c (check_explicit_specialization): When reverting a static
        member function, also remove the `this' parameter from
        member function, also remove the `this' parameter from
        last_function_parms.
        last_function_parms.
Thu Mar 19 02:27:48 1998  Jason Merrill  
Thu Mar 19 02:27:48 1998  Jason Merrill  
        * pt.c (tsubst_copy, CONST_DECL): Don't bother tsubsting
        * pt.c (tsubst_copy, CONST_DECL): Don't bother tsubsting
        a function context.
        a function context.
        * decl.c (store_bindings): Use free_binding_vecs.
        * decl.c (store_bindings): Use free_binding_vecs.
        (pop_from_top_level): Likewise.
        (pop_from_top_level): Likewise.
Wed Mar 18 12:41:43 1998  Jason Merrill  
Wed Mar 18 12:41:43 1998  Jason Merrill  
        * decl.c (make_implicit_typename): Only change the type of a
        * decl.c (make_implicit_typename): Only change the type of a
        TYPENAME_TYPE.
        TYPENAME_TYPE.
Wed Mar 18 10:09:51 1998  Mark Mitchell  
Wed Mar 18 10:09:51 1998  Mark Mitchell  
        * semantics.c: New file, containing routines to perform the
        * semantics.c: New file, containing routines to perform the
        semantic phase of parsing.
        semantic phase of parsing.
        * parse.y: Use it.
        * parse.y: Use it.
        * pt.c (tsubst_expr): Likewise.
        * pt.c (tsubst_expr): Likewise.
        * cp-tree.h: Declare the various functions in semantics.c.
        * cp-tree.h: Declare the various functions in semantics.c.
        Provide macros to access _STMT tree nodes.
        Provide macros to access _STMT tree nodes.
        * cp-tree.def: Add ASM_STMT tree node.
        * cp-tree.def: Add ASM_STMT tree node.
        * Makefile.in, Make-lang.in: Add dependencies on and for
        * Makefile.in, Make-lang.in: Add dependencies on and for
        semantics.c.
        semantics.c.
Wed Mar 18 00:24:10 1998  Jason Merrill  
Wed Mar 18 00:24:10 1998  Jason Merrill  
        * pt.c (push_template_decl): Only check primary templates.
        * pt.c (push_template_decl): Only check primary templates.
        * pt.c (check_explicit_specialization): Complain about default args
        * pt.c (check_explicit_specialization): Complain about default args
        in explicit specialization.
        in explicit specialization.
        * parse.y (nomods_initdcl0): Also call cp_finish_decl for a
        * parse.y (nomods_initdcl0): Also call cp_finish_decl for a
        constructor_declarator.
        constructor_declarator.
Tue Mar 17 14:44:54 1998  Mark Mitchell  
Tue Mar 17 14:44:54 1998  Mark Mitchell  
        * typeck2.c (build_x_arrow): Don't crash when an aggregate type
        * typeck2.c (build_x_arrow): Don't crash when an aggregate type
        has no overloaded operator ->.
        has no overloaded operator ->.
        * call.c (build_field_call): Don't crash when presented with a
        * call.c (build_field_call): Don't crash when presented with a
        field that is actually a nested type.
        field that is actually a nested type.
        * decl.c (pushtag): Deal with friend class injection in local
        * decl.c (pushtag): Deal with friend class injection in local
        classes.
        classes.
        * call.c (build_object_call): Don't crash if OBJ is a
        * call.c (build_object_call): Don't crash if OBJ is a
        pointer-to-member-function.
        pointer-to-member-function.
Tue Mar 17 11:40:26 1998  Jason Merrill  
Tue Mar 17 11:40:26 1998  Jason Merrill  
        * pt.c (push_template_decl): Complain about template with C linkage,
        * pt.c (push_template_decl): Complain about template with C linkage,
        anonymous template class.
        anonymous template class.
Mon Mar 16 12:10:39 1998  Jason Merrill  
Mon Mar 16 12:10:39 1998  Jason Merrill  
        * class.c (pushclass): Only use the mi_matrix stuff #ifdef MI_MATRIX.
        * class.c (pushclass): Only use the mi_matrix stuff #ifdef MI_MATRIX.
        * search.c: Likewise.
        * search.c: Likewise.
        * lex.c (do_pending_defargs): Only call
        * lex.c (do_pending_defargs): Only call
        maybe_{begin,end}_member_template_processing for FUNCTION_DECLs.
        maybe_{begin,end}_member_template_processing for FUNCTION_DECLs.
        * parse.y (initdcl0_innards): Move maybeasm back into initdcl0 et al.
        * parse.y (initdcl0_innards): Move maybeasm back into initdcl0 et al.
Mon Mar 16 10:47:22 1998  Mark Mitchell  
Mon Mar 16 10:47:22 1998  Mark Mitchell  
        * parse.y: Deal with CONSTRUCTORS in new_initializers.
        * parse.y: Deal with CONSTRUCTORS in new_initializers.
Mon Mar 16 10:54:21 1998  Mark Mitchell  
Mon Mar 16 10:54:21 1998  Mark Mitchell  
        * pt.c (tsubst_copy): Deal with BIND_EXPR in a way that more
        * pt.c (tsubst_copy): Deal with BIND_EXPR in a way that more
        closely mimics the behavior in parse.y.
        closely mimics the behavior in parse.y.
        (tsubst_expr): Return the resulting BLOCK when making a tsubst'ing
        (tsubst_expr): Return the resulting BLOCK when making a tsubst'ing
        into a compound statement.
        into a compound statement.
Sun Mar 15 02:07:26 1998  Jason Merrill  
Sun Mar 15 02:07:26 1998  Jason Merrill  
        * cp-tree.h (TEMPLATE_PARMS_FOR_INLINE): New macro.
        * cp-tree.h (TEMPLATE_PARMS_FOR_INLINE): New macro.
        * pt.c (inline_needs_template_parms): New fn.
        * pt.c (inline_needs_template_parms): New fn.
        (original_template): New fn.
        (original_template): New fn.
        (push_inline_template_parms_recursive): New fn.
        (push_inline_template_parms_recursive): New fn.
        (maybe_begin_member_template_processing): Use them.
        (maybe_begin_member_template_processing): Use them.
        (maybe_end_member_template_processing): Likewise.
        (maybe_end_member_template_processing): Likewise.
        (is_member_or_friend_template): Rename to is_member_template.
        (is_member_or_friend_template): Rename to is_member_template.
        Member functions of local classes are never member templates.
        Member functions of local classes are never member templates.
Sun Mar 15 01:14:22 1998  Kriang Lerdsuwanakij  
Sun Mar 15 01:14:22 1998  Kriang Lerdsuwanakij  
        * lex.c (do_identifier): Handle TEMPLATE_DECL that was
        * lex.c (do_identifier): Handle TEMPLATE_DECL that was
        added in the class scope to catch redefinition error.
        added in the class scope to catch redefinition error.
        * pt.c (reduce_template_parm_level): Also copy
        * pt.c (reduce_template_parm_level): Also copy
        the DECL_TEMPLATE_PARMS field.
        the DECL_TEMPLATE_PARMS field.
Sun Mar 15 10:54:08 1998  Mark Mitchell  
Sun Mar 15 10:54:08 1998  Mark Mitchell  
        * pt.c (tsubst): Clear TYPE_REFERENCE_TO when creating a
        * pt.c (tsubst): Clear TYPE_REFERENCE_TO when creating a
        reduced-level template type parameter.
        reduced-level template type parameter.
Sun Mar 15 12:26:02 1998  Manfred Hollstein  
Sun Mar 15 12:26:02 1998  Manfred Hollstein  
        * cp-tree.h (struct lang_decl_flags): Add needs_final_overrider.
        * cp-tree.h (struct lang_decl_flags): Add needs_final_overrider.
        (DECL_NEEDS_FINAL_OVERRIDER_P): New macro.
        (DECL_NEEDS_FINAL_OVERRIDER_P): New macro.
        * class.c (override_one_vtable): Set DECL_NEEDS_FINAL_OVERRIDER_P.
        * class.c (override_one_vtable): Set DECL_NEEDS_FINAL_OVERRIDER_P.
        * decl.c (duplicate_decls): Propagate it.
        * decl.c (duplicate_decls): Propagate it.
        * typeck2.c (abstract_virtuals_error): Use two loops to emit
        * typeck2.c (abstract_virtuals_error): Use two loops to emit
        abstract virtual functions and virtual functions which need a
        abstract virtual functions and virtual functions which need a
        final overrider separately.
        final overrider separately.
Thu Mar 12 09:39:40 1998  Manfred Hollstein  
Thu Mar 12 09:39:40 1998  Manfred Hollstein  
        * lang-specs.h: Properly put brackets around array elements in
        * lang-specs.h: Properly put brackets around array elements in
        initializer.
        initializer.
        * typeck.c (build_binary_op_nodefault): Correctly place parens around
        * typeck.c (build_binary_op_nodefault): Correctly place parens around
        && and || in expression.
        && and || in expression.
Thu Mar 12 09:26:04 1998  Manfred Hollstein  
Thu Mar 12 09:26:04 1998  Manfred Hollstein  
        * call.c (default_parm_conversions): Remove prototype definition.
        * call.c (default_parm_conversions): Remove prototype definition.
        (build_method_call): Remove unused variable result.
        (build_method_call): Remove unused variable result.
        * cvt.c (ocp_convert): Remove unused variable conversion.
        * cvt.c (ocp_convert): Remove unused variable conversion.
        * decl2.c (ambiguous_decl): Add explicit parameter definition for name.
        * decl2.c (ambiguous_decl): Add explicit parameter definition for name.
        * except.c (do_unwind): #if 0 definition of unused variables fcall
        * except.c (do_unwind): #if 0 definition of unused variables fcall
        and next_pc.
        and next_pc.
        * expr.c (extract_scalar_init): #if 0 prototype and function
        * expr.c (extract_scalar_init): #if 0 prototype and function
        definition.
        definition.
        * init.c (expand_aggr_init_1): Remove unused variable init_type.
        * init.c (expand_aggr_init_1): Remove unused variable init_type.
        (build_new_1): Remove unused variable t.
        (build_new_1): Remove unused variable t.
        * pt.c (instantiate_class_template): Remove unused variable newtag;
        * pt.c (instantiate_class_template): Remove unused variable newtag;
        cast called function return value to void.
        cast called function return value to void.
        (do_decl_instantiation): Remove unused variables name and fn.
        (do_decl_instantiation): Remove unused variables name and fn.
        * tree.c (get_type_decl): Add default return to shut up compiler from
        * tree.c (get_type_decl): Add default return to shut up compiler from
        complaining control reaches end of non-void function.
        complaining control reaches end of non-void function.
        * typeck.c (build_x_conditional_expr): Remove unused variable rval.
        * typeck.c (build_x_conditional_expr): Remove unused variable rval.
Thu Mar 12 09:12:15 1998  Manfred Hollstein  
Thu Mar 12 09:12:15 1998  Manfred Hollstein  
        * call.c (default_parm_conversions): Remove prototype definition.
        * call.c (default_parm_conversions): Remove prototype definition.
        (build_method_call): Remove unused variable result.
        (build_method_call): Remove unused variable result.
        (build_over_call): Add default case in enumeration switch.
        (build_over_call): Add default case in enumeration switch.
Thu Mar 12 08:39:13 1998  Manfred Hollstein  
Thu Mar 12 08:39:13 1998  Manfred Hollstein  
        * decl2.c (lang_decode_option): Change j's type to size_t.
        * decl2.c (lang_decode_option): Change j's type to size_t.
        * tree.c (layout_vbasetypes): record_align and desired_align are of
        * tree.c (layout_vbasetypes): record_align and desired_align are of
        type unsigned int; const_size and nonvirtual_const_size likewise.
        type unsigned int; const_size and nonvirtual_const_size likewise.
Wed Mar 11 07:25:20 1998  Mark Mitchell  
Wed Mar 11 07:25:20 1998  Mark Mitchell  
        * parse.y (new_initializer): Make sure all initializers are
        * parse.y (new_initializer): Make sure all initializers are
        lists.
        lists.
Tue Mar 10 07:32:36 1998  Mark Mitchell  
Tue Mar 10 07:32:36 1998  Mark Mitchell  
        * decl2.c (import_export_decl): Mark tinfo functions for
        * decl2.c (import_export_decl): Mark tinfo functions for
        cv-qualified versions of class types as DECL_NOT_REALLY_EXTERN.
        cv-qualified versions of class types as DECL_NOT_REALLY_EXTERN.
Fri Mar  6 23:27:35 1998  Jeffrey A Law  (law@cygnus.com)
Fri Mar  6 23:27:35 1998  Jeffrey A Law  (law@cygnus.com)
        * method.c: Fix typo.
        * method.c: Fix typo.
Fri Mar  6 10:06:59 1998  Kaveh R. Ghazi  
Fri Mar  6 10:06:59 1998  Kaveh R. Ghazi  
        * method.c: Include "system.h" to get stdlib.h, stdio.h,
        * method.c: Include "system.h" to get stdlib.h, stdio.h,
        ctype.h, string.h, etc.
        ctype.h, string.h, etc.
        (issue_nrepeats): Add default case in enumeration switch.
        (issue_nrepeats): Add default case in enumeration switch.
        (check_btype): Likewise.
        (check_btype): Likewise.
        (process_overload_item): Likewise.
        (process_overload_item): Likewise.
        * Makefile.in (method.o): Depend on system.h.
        * Makefile.in (method.o): Depend on system.h.
Wed Mar  4 22:26:53 1998  Andreas Schwab  
Wed Mar  4 22:26:53 1998  Andreas Schwab  
        * lex.c (do_scoped_id): Fix parenthesizing.
        * lex.c (do_scoped_id): Fix parenthesizing.
Wed Mar  4 12:11:53 1998  Michael Tiemann  
Wed Mar  4 12:11:53 1998  Michael Tiemann  
        * rtti.c (get_tinfo_fn_dynamic): If this function is called an
        * rtti.c (get_tinfo_fn_dynamic): If this function is called an
        FLAG_RTTI is unset, initialize type info machinery and continue
        FLAG_RTTI is unset, initialize type info machinery and continue
        with FLAG_RTTI enabled.
        with FLAG_RTTI enabled.
        (get_typeid): Likewise.
        (get_typeid): Likewise.
Wed Mar  4 11:47:55 1998  Jason Merrill  
Wed Mar  4 11:47:55 1998  Jason Merrill  
        * typeck.c (unary_complex_lvalue): &D::i has type B::* if i comes
        * typeck.c (unary_complex_lvalue): &D::i has type B::* if i comes
        from B.
        from B.
Wed Mar  4 11:28:08 1998  Mark Mitchell  
Wed Mar  4 11:28:08 1998  Mark Mitchell  
        * pt.c (finish_member_template_decl): Deal more gracefully with
        * pt.c (finish_member_template_decl): Deal more gracefully with
        invalid declarations.
        invalid declarations.
Tue Mar  3 01:38:17 1998  Jason Merrill  
Tue Mar  3 01:38:17 1998  Jason Merrill  
        * cvt.c, decl.c, decl2.c, init.c, rtti.c, typeck.c, typeck2.c,
        * 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
        cp-tree.h: Clean up more old overloading code, old RTTI code, and
        some formatting quirks.
        some formatting quirks.
        * call.c, class.c, cp-tree.h, cvt.c, decl.c, init.c, lex.c,
        * 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
        method.c, pt.c, ptree.c, typeck.c: Remove support for
        -fno-ansi-overloading and overloading METHOD_CALL_EXPR.
        -fno-ansi-overloading and overloading METHOD_CALL_EXPR.
        * class.h: Remove.
        * class.h: Remove.
        * Makefile.in: Adjust.
        * Makefile.in: Adjust.
        * pt.c (unify): Don't allow reduced cv-quals when strict.
        * pt.c (unify): Don't allow reduced cv-quals when strict.
        * call.c, class.c, pt.c, cp-tree.h: Remove nsubsts parm from
        * call.c, class.c, pt.c, cp-tree.h: Remove nsubsts parm from
        *type_unification* and unify.
        *type_unification* and unify.
Mon Mar  2 12:11:06 1998  Jason Merrill  
Mon Mar  2 12:11:06 1998  Jason Merrill  
        * parse.y (explicit_template_type): Remove TEMPLATE keyword.
        * parse.y (explicit_template_type): Remove TEMPLATE keyword.
        (nested_name_specifier): And add it before this use.
        (nested_name_specifier): And add it before this use.
        (typename_sub0): And this use.  Also add use without the keyword.
        (typename_sub0): And this use.  Also add use without the keyword.
        (typename_sub1): Likewise.
        (typename_sub1): Likewise.
        * pt.c (instantiate_class_template): Don't actually instantiate
        * pt.c (instantiate_class_template): Don't actually instantiate
        anything if our type uses template parms.
        anything if our type uses template parms.
Mon Mar  2 11:04:59 1998  Jim Wilson  
Mon Mar  2 11:04:59 1998  Jim Wilson  
        * decl.c (start_function): Don't call temporary_allocation for a
        * decl.c (start_function): Don't call temporary_allocation for a
        nested function.
        nested function.
Sun Mar  1 21:06:37 1998  Jason Merrill  
Sun Mar  1 21:06:37 1998  Jason Merrill  
        * pt.c (instantiate_class_template): Don't mess with friends if
        * pt.c (instantiate_class_template): Don't mess with friends if
        our type uses template parms.
        our type uses template parms.
Sat Feb 28 12:06:44 1998  Jason Merrill  
Sat Feb 28 12:06:44 1998  Jason Merrill  
        * parse.y (nested_name_specifier): Use explicit_template_type.
        * parse.y (nested_name_specifier): Use explicit_template_type.
        (typename_sub): Allow a template_type, an explicit_template_type,
        (typename_sub): Allow a template_type, an explicit_template_type,
        or an implicit template type at the end.
        or an implicit template type at the end.
        * lex.c (yyprint): Handle a PTYPENAME being a TEMPLATE_DECL.
        * lex.c (yyprint): Handle a PTYPENAME being a TEMPLATE_DECL.
        * decl.c (make_typename_type): Handle template-id where the name
        * decl.c (make_typename_type): Handle template-id where the name
        is a TEMPLATE_DECL.
        is a TEMPLATE_DECL.
        * call.c (build_scoped_method_call): Handle member template
        * call.c (build_scoped_method_call): Handle member template
        destructor call.
        destructor call.
        * pt.c (tsubst_copy, METHOD_CALL_EXPR): Don't assume a member
        * pt.c (tsubst_copy, METHOD_CALL_EXPR): Don't assume a member
        destructor is represented by the type.
        destructor is represented by the type.
        * cp-tree.h (TYPENAME_TYPE_FULLNAME): New macro.
        * cp-tree.h (TYPENAME_TYPE_FULLNAME): New macro.
        * parse.y (nested_name_specifier): Add 'template' case.
        * parse.y (nested_name_specifier): Add 'template' case.
        (explicit_template_type): New rule.
        (explicit_template_type): New rule.
        (typename_sub): Use it.
        (typename_sub): Use it.
        * decl.c (make_typename_type): Handle getting a template-id for NAME.
        * decl.c (make_typename_type): Handle getting a template-id for NAME.
        * pt.c (tsubst): Likewise.
        * pt.c (tsubst): Likewise.
Fri Feb 27 11:17:50 1998  Jason Merrill  
Fri Feb 27 11:17:50 1998  Jason Merrill  
        * pt.c (add_to_template_args): Fix thinko.
        * pt.c (add_to_template_args): Fix thinko.
        (instantiate_class_template): Call it later.
        (instantiate_class_template): Call it later.
        * pt.c (get_class_bindings): Add outer_args parm.
        * pt.c (get_class_bindings): Add outer_args parm.
        (most_specialized_class): Likewise.
        (most_specialized_class): Likewise.
        (instantiate_class_template): Pass it.
        (instantiate_class_template): Pass it.
        (more_specialized_class): Likewise.
        (more_specialized_class): Likewise.
        (lookup_template_class): Get context from template if none
        (lookup_template_class): Get context from template if none
        was specified.
        was specified.
        (finish_member_template_decl): Don't do anything with a
        (finish_member_template_decl): Don't do anything with a
        partial specialization.
        partial specialization.
        * decl2.c (check_member_template): Use IS_AGGR_TYPE instead of
        * decl2.c (check_member_template): Use IS_AGGR_TYPE instead of
        AGGREGATE_TYPE_P.
        AGGREGATE_TYPE_P.
        * class.c (finish_struct): Member class templates have already been
        * class.c (finish_struct): Member class templates have already been
        checked for name clashes.
        checked for name clashes.
        * decl.c (pushdecl_with_scope): Handle pushing at class level.
        * decl.c (pushdecl_with_scope): Handle pushing at class level.
Fri Feb 27 02:25:16 1998  Jason Merrill  
Fri Feb 27 02:25:16 1998  Jason Merrill  
        * pt.c (tsubst, TEMPLATE_DECL): Support member class templates.
        * pt.c (tsubst, TEMPLATE_DECL): Support member class templates.
        (tsubst, *_PARM): Support multiple levels of template classes.
        (tsubst, *_PARM): Support multiple levels of template classes.
        (instantiate_class_template): Look up the pattern from the
        (instantiate_class_template): Look up the pattern from the
        original template.
        original template.
        (lookup_template_class): Handle getting a template for d1.
        (lookup_template_class): Handle getting a template for d1.
        (push_template_decl): Correct setting of 'primary'.
        (push_template_decl): Correct setting of 'primary'.
        (reduce_template_parm_level): Add 'levels' parm.
        (reduce_template_parm_level): Add 'levels' parm.
        (finish_member_template_decl): Support member class templates.
        (finish_member_template_decl): Support member class templates.
        (template_class_depth): Handle multiple levels.
        (template_class_depth): Handle multiple levels.
        * parse.y (component_decl_1, fn.def2): Remove member template case.
        * parse.y (component_decl_1, fn.def2): Remove member template case.
        (component_decl): Add member template cases.
        (component_decl): Add member template cases.
        * decl2.c (check_member_template): We now handle member template
        * decl2.c (check_member_template): We now handle member template
        classes.
        classes.
        * decl.c (pushtag): Handle member templates.
        * decl.c (pushtag): Handle member templates.
        * method.c (do_inline_function_hair): Don't touch
        * method.c (do_inline_function_hair): Don't touch
        IDENTIFIER_GLOBAL_VALUE.
        IDENTIFIER_GLOBAL_VALUE.
        * init.c (build_offset_ref): If name isn't an identifier, just
        * init.c (build_offset_ref): If name isn't an identifier, just
        return it.
        return it.
        * spew.c (yylex): Handle PTYPENAME like TYPENAME.
        * spew.c (yylex): Handle PTYPENAME like TYPENAME.
        * typeck.c (get_delta_difference): Do adjust for conversions to
        * typeck.c (get_delta_difference): Do adjust for conversions to
        and from virtual base.
        and from virtual base.
Wed Feb 25 09:51:29 1998  Jason Merrill  
Wed Feb 25 09:51:29 1998  Jason Merrill  
        * typeck.c (get_delta_difference): Give hard error for conversion
        * typeck.c (get_delta_difference): Give hard error for conversion
        from virtual base.
        from virtual base.
        * cp-tree.h: Tweak formatting.
        * cp-tree.h: Tweak formatting.
Wed Feb 25 00:35:33 1998  Jason Merrill  
Wed Feb 25 00:35:33 1998  Jason Merrill  
        * decl.c (push_namespace): Handle redeclaration error.
        * decl.c (push_namespace): Handle redeclaration error.
        * cp-tree.h (IDENTIFIER_NAMESPACE_VALUE): New macro.
        * cp-tree.h (IDENTIFIER_NAMESPACE_VALUE): New macro.
        (IDENTIFIER_NAMESPACE_BINDINGS): New macro.
        (IDENTIFIER_NAMESPACE_BINDINGS): New macro.
        (NAMESPACE_BINDING): New macro.
        (NAMESPACE_BINDING): New macro.
        (IDENTIFIER_GLOBAL_VALUE): Use NAMESPACE_BINDING.
        (IDENTIFIER_GLOBAL_VALUE): Use NAMESPACE_BINDING.
        * *.c: Use them.
        * *.c: Use them.
        * pt.c (push_template_decl): Use innermost_args.
        * pt.c (push_template_decl): Use innermost_args.
        * decl.c (get_unique_name): Tweak from earlier in the name.
        * decl.c (get_unique_name): Tweak from earlier in the name.
Tue Feb 24 22:15:04 1998  Martin von Löwis  
Tue Feb 24 22:15:04 1998  Martin von Löwis  
        * cp-tree.def: Add CPLUS_BINDING node.
        * cp-tree.def: Add CPLUS_BINDING node.
        * cp-tree.h (tree_binding): New struct.
        * cp-tree.h (tree_binding): New struct.
        (BINDING_SCOPE, BINDING_VALUE): New macros.
        (BINDING_SCOPE, BINDING_VALUE): New macros.
        (current_namespace, global_namespace): Declare extern.
        (current_namespace, global_namespace): Declare extern.
        (struct lang_decl_flags): New field in_namespace.
        (struct lang_decl_flags): New field in_namespace.
        (DECL_NAMESPACE_USING, DECL_NAMESPACE_USERS): New macros.
        (DECL_NAMESPACE_USING, DECL_NAMESPACE_USERS): New macros.
        (DECL_NAMESPACE, SET_DECL_NAMESPACE): New macros.
        (DECL_NAMESPACE, SET_DECL_NAMESPACE): New macros.
        (TREE_INDIRECT_USING): New macro.
        (TREE_INDIRECT_USING): New macro.
        * decl2.c (current_namespace, global_namespace): Declare.  The
        * decl2.c (current_namespace, global_namespace): Declare.  The
        value is a NAMESPACE_DECL now, not a TREE_LIST.
        value is a NAMESPACE_DECL now, not a TREE_LIST.
        (is_namespace_ancestor, namespace_ancestor): New static functions.
        (is_namespace_ancestor, namespace_ancestor): New static functions.
        (add_using_namespace, ambiguous_decl): Likewise.
        (add_using_namespace, ambiguous_decl): Likewise.
        (lookup_using_namespace): New support function for lookup_name.
        (lookup_using_namespace): New support function for lookup_name.
        (qualified_lookup_using_namespace): New support function for
        (qualified_lookup_using_namespace): New support function for
        do_scoped_id and lookup_namespace_name.
        do_scoped_id and lookup_namespace_name.
        (get_namespace_id): Mark as obsolete.
        (get_namespace_id): Mark as obsolete.
        (current_namespace_id): Likewise.
        (current_namespace_id): Likewise.
        (do_namespace_alias): Implement.
        (do_namespace_alias): Implement.
        (do_using_directive): Implement as call to add_using_namespace.
        (do_using_directive): Implement as call to add_using_namespace.
        * decl.c (binding_for_name): New function.
        * decl.c (binding_for_name): New function.
        (push_namespace, pop_namespace): Implement.
        (push_namespace, pop_namespace): Implement.
        (push_decl): Don't install a FUNCTION_DECL in the global branch.
        (push_decl): Don't install a FUNCTION_DECL in the global branch.
        (lookup_namespace_name): Implement using qualified lookup.
        (lookup_namespace_name): Implement using qualified lookup.
        (lookup_name_real): For global scoping, lookup in
        (lookup_name_real): For global scoping, lookup in
        global_namespace.  For namespace scoping, lookup in given
        global_namespace.  For namespace scoping, lookup in given
        namespace.  For unscoped lookup, iterate over namespace,
        namespace.  For unscoped lookup, iterate over namespace,
        considering using directives.
        considering using directives.
        (init_decl_processing): Initialize global_namespace.
        (init_decl_processing): Initialize global_namespace.
        (grokvardecl): Build assembler name as static name for globals.
        (grokvardecl): Build assembler name as static name for globals.
        (grokdeclarator): Remove old namespace mangling.
        (grokdeclarator): Remove old namespace mangling.
        (xref_tag): When installing a global binding for the
        (xref_tag): When installing a global binding for the
        tag, make sure we have an identifier.
        tag, make sure we have an identifier.
        * method.c (build_overload_nested_name): Mangle namespaces.
        * method.c (build_overload_nested_name): Mangle namespaces.
        (build_qualified_name): Likewise.
        (build_qualified_name): Likewise.
        (build_decl_overload_real): Likewise.
        (build_decl_overload_real): Likewise.
        * lex.c (build_lang_decl): Set namespace for new declaration to
        * lex.c (build_lang_decl): Set namespace for new declaration to
        current_namespace.
        current_namespace.
        (do_scoped_id): Find global names in global or current
        (do_scoped_id): Find global names in global or current
        namespace, or using qualified namespace lookup, depending on
        namespace, or using qualified namespace lookup, depending on
        context.
        context.
        * init.c (build_member_call): When scope is namespace, use
        * init.c (build_member_call): When scope is namespace, use
        build_x_function_call instead.
        build_x_function_call instead.
        (build_offset_ref): When scope is namespace, collapse processing
        (build_offset_ref): When scope is namespace, collapse processing
        to lookup_namespace_name instead.
        to lookup_namespace_name instead.
        * error.c (dump_decl): Support NAMESPACE_DECL.
        * error.c (dump_decl): Support NAMESPACE_DECL.
        * decl.c (pushdecl): Bind globals to current namespace.
        * decl.c (pushdecl): Bind globals to current namespace.
        (push_overloaded_decl): Likewise.
        (push_overloaded_decl): Likewise.
        (lookup_tag): Likewise.
        (lookup_tag): Likewise.
        (lookup_name_current_level): Likewise.
        (lookup_name_current_level): Likewise.
        (xref_tag): Likewise.
        (xref_tag): Likewise.
        (start_function): Likewise.
        (start_function): Likewise.
        * lex.c (do_identifier): Likewise.
        * lex.c (do_identifier): Likewise.
        (identifier_typedecl_value): Likewise.
        (identifier_typedecl_value): Likewise.
        (real_yylex): Likewise.
        (real_yylex): Likewise.
        * method.c (do_inline_function_hair): Likewise.
        * method.c (do_inline_function_hair): Likewise.
        * parse.y (unscoped): Likewise.
        * parse.y (unscoped): Likewise.
        * pt.c (check_explicit_specialization): Likewise.
        * pt.c (check_explicit_specialization): Likewise.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        * rtti.c (call_void_fn): Likewise.
        * rtti.c (call_void_fn): Likewise.
        * sig.c (build_sigtable): Likewise.
        * sig.c (build_sigtable): Likewise.
        * ptree.c (lang_print_xnode): New function.
        * ptree.c (lang_print_xnode): New function.
Tue Feb 24 01:40:24 1998  Jason Merrill  
Tue Feb 24 01:40:24 1998  Jason Merrill  
        * pt.c (instantiate_class_template): Don't instantiate if pedantic
        * pt.c (instantiate_class_template): Don't instantiate if pedantic
        and the args use template parms.
        and the args use template parms.
        * pt.c (push_tinst_level): If the instantiation uses template parms,
        * pt.c (push_tinst_level): If the instantiation uses template parms,
        fail silently.
        fail silently.
        * decl.c (xref_basetypes): Do call complete_type for basetypes
        * decl.c (xref_basetypes): Do call complete_type for basetypes
        that involve template parameters.
        that involve template parameters.
Tue Feb 24 00:36:43 1998  Jason Merrill  
Tue Feb 24 00:36:43 1998  Jason Merrill  
        * typeck2.c (process_init_constructor): Fix labeled init check.
        * typeck2.c (process_init_constructor): Fix labeled init check.
Mon Feb 23 05:08:55 1998  Jason Merrill  
Mon Feb 23 05:08:55 1998  Jason Merrill  
        * pt.c, call.c, decl.c, method.c, cp-tree.h: Remove unused NARGS
        * pt.c, call.c, decl.c, method.c, cp-tree.h: Remove unused NARGS
        argument to tsubst and friends.
        argument to tsubst and friends.
        * pt.c (tsubst, FUNCTION_DECL): Tidy.
        * pt.c (tsubst, FUNCTION_DECL): Tidy.
        * typeck.c (build_x_function_call): Handle static member function
        * typeck.c (build_x_function_call): Handle static member function
        templates like non-templates.  Handle friend templates like normal
        templates like non-templates.  Handle friend templates like normal
        function templates.
        function templates.
        * pt.c (tsubst, *_PARM): Don't use orig_level.
        * pt.c (tsubst, *_PARM): Don't use orig_level.
        (get_bindings): Don't call add_to_template_args.
        (get_bindings): Don't call add_to_template_args.
        (instantiate_template): Likewise.
        (instantiate_template): Likewise.
        (tsubst, FUNCTION_DECL): Call add_to_template_args as appropriate.
        (tsubst, FUNCTION_DECL): Call add_to_template_args as appropriate.
        * ptree.c (print_lang_type): Print index/level for template parms.
        * ptree.c (print_lang_type): Print index/level for template parms.
Mon Feb 23 02:52:29 1998  Mark Mitchell  
Mon Feb 23 02:52:29 1998  Mark Mitchell  
        * Make-lang.in (cc1plus): Note that cc1plus depends on
        * Make-lang.in (cc1plus): Note that cc1plus depends on
        cp/cp-tree.h and cp/cp-tree.def.
        cp/cp-tree.h and cp/cp-tree.def.
        * cp-tree.def (TEMPLATE_CONST_PARM): Remove.
        * cp-tree.def (TEMPLATE_CONST_PARM): Remove.
        (TEMPLATE_PARM_INDEX): New tree code, used to indicate a
        (TEMPLATE_PARM_INDEX): New tree code, used to indicate a
        position in a template parameter list.
        position in a template parameter list.
        * cp-tree.h (template_parm_index): New structure, used as the tree
        * cp-tree.h (template_parm_index): New structure, used as the tree
        structure for a TEMPLATE_PARM_INDEX.
        structure for a TEMPLATE_PARM_INDEX.
        (TEMPLATE_PARM_IDX): New macro.
        (TEMPLATE_PARM_IDX): New macro.
        (TEMPLATE_PARM_LEVEL): Likewise.
        (TEMPLATE_PARM_LEVEL): Likewise.
        (TEMPLATE_PARM_DESCENDANTS): Likewise.
        (TEMPLATE_PARM_DESCENDANTS): Likewise.
        (TEMPLATE_PARM_ORIG_LEVEL): Likewise.
        (TEMPLATE_PARM_ORIG_LEVEL): Likewise.
        (TEMPLATE_PARM_DECL): Likewise.
        (TEMPLATE_PARM_DECL): Likewise.
        (TEMPLATE_TYPE_PARM_INDEX): Likewise.
        (TEMPLATE_TYPE_PARM_INDEX): Likewise.
        (TEMPLATE_TYPE_ORIG_LEVEL): Likewise.
        (TEMPLATE_TYPE_ORIG_LEVEL): Likewise.
        (TEMPLATE_TYPE_DECL): Likewise.
        (TEMPLATE_TYPE_DECL): Likewise.
        (TEMPLATE_CONST_IDX): Remove.
        (TEMPLATE_CONST_IDX): Remove.
        (TEMPLATE_CONST_LEVEL): Likewise.
        (TEMPLATE_CONST_LEVEL): Likewise.
        (TEMPLATE_CONST_SET_INFO): Likewise.
        (TEMPLATE_CONST_SET_INFO): Likewise.
        (TEMPLATE_TYPE_SET_INFO): Likewise.
        (TEMPLATE_TYPE_SET_INFO): Likewise.
        (TEMPLATE_TYPE_IDX): Redefine in terms of TEMPLATE_PARM_INDEX
        (TEMPLATE_TYPE_IDX): Redefine in terms of TEMPLATE_PARM_INDEX
        node.
        node.
        (TEMPLATE_TYPE_LEVEL): Likewise.
        (TEMPLATE_TYPE_LEVEL): Likewise.
        * decl.c (decls_match): Call comp_template_parms, rather than
        * decl.c (decls_match): Call comp_template_parms, rather than
        expanding it inline.
        expanding it inline.
        (duplicate_decls): If two template declarations are being merged,
        (duplicate_decls): If two template declarations are being merged,
        then their TEMPLATE_INFOs should be merged as well.
        then their TEMPLATE_INFOs should be merged as well.
        (grokfndecl): Save template-id information when declaring a friend
        (grokfndecl): Save template-id information when declaring a friend
        with explicit template arguments.  Pass arguments to
        with explicit template arguments.  Pass arguments to
        check_explicit_specialization via correct convention; at some
        check_explicit_specialization via correct convention; at some
        point check_explicit_specialization changed, but these call-sites
        point check_explicit_specialization changed, but these call-sites
        did not.
        did not.
        (grokdeclarator): Tidy up slightly.
        (grokdeclarator): Tidy up slightly.
        * decl2.c (check_classfn): Tidy up slightly.  Don't assume that
        * decl2.c (check_classfn): Tidy up slightly.  Don't assume that
        two template functions with the same DECL_ASSEMBLER_NAME the same,
        two template functions with the same DECL_ASSEMBLER_NAME the same,
        since the names are not yet mangled.
        since the names are not yet mangled.
        * error.c (dump_decl): Use TEMPLATE_PARM_INDEX instead of
        * error.c (dump_decl): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        TEMPLATE_CONST_PARM.
        (dump_expr): Likewise.  Use the TEMPLATE_PARM_DECL to get at the
        (dump_expr): Likewise.  Use the TEMPLATE_PARM_DECL to get at the
        decl for a non-type parameter, rather than printing `'.
        decl for a non-type parameter, rather than printing `'.
        * friend.c (is_friend): Handle TEMPLATE_DECL friends.
        * friend.c (is_friend): Handle TEMPLATE_DECL friends.
        (do_friend): Deal with template friends.
        (do_friend): Deal with template friends.
        * lex.c (do_pending_inlines): Call
        * lex.c (do_pending_inlines): Call
        maybe_begin_member_template_processing, rather than
        maybe_begin_member_template_processing, rather than
        conditionally calling begin_member_template_processing.
        conditionally calling begin_member_template_processing.
        (process_next_inline): Likewise.  Call
        (process_next_inline): Likewise.  Call
        maybe_end_member_template_processing, rather than
        maybe_end_member_template_processing, rather than
        conditionally calling end_member_template_processing.
        conditionally calling end_member_template_processing.
        (do_pending_defargs): Likewise.
        (do_pending_defargs): Likewise.
        (do_identifier): Use TEMPLATE_PARM_INDEX instead of
        (do_identifier): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        TEMPLATE_CONST_PARM.
        * method.c (build_mangled_template_parm_index): New function.
        * method.c (build_mangled_template_parm_index): New function.
        (build_overload_value): Use it.
        (build_overload_value): Use it.
        (build_overload_name): Likewise.
        (build_overload_name): Likewise.
        * pt.c (finish_member_template_decl): Allow friend declarations.
        * pt.c (finish_member_template_decl): Allow friend declarations.
        (template_class_depth): New function.
        (template_class_depth): New function.
        (is_member_template): Rename, and modify, to become...
        (is_member_template): Rename, and modify, to become...
        (is_member_or_friend_template): New function.
        (is_member_or_friend_template): New function.
        (end_member_template_processing): Rename, and modify, to become...
        (end_member_template_processing): Rename, and modify, to become...
        (maybe_end_member_template_processing).
        (maybe_end_member_template_processing).
        (build_template_parm_index): New function.
        (build_template_parm_index): New function.
        (reduce_template_parm_level): New function.
        (reduce_template_parm_level): New function.
        (process_template_parm): Modify to use build_template_parm_index.
        (process_template_parm): Modify to use build_template_parm_index.
        (push_template_decl): Deal with friend templates.
        (push_template_decl): Deal with friend templates.
        (uses_template_parms): Use TEMPLATE_PARM_INDEX instead of
        (uses_template_parms): Use TEMPLATE_PARM_INDEX instead of
        TEMPLATE_CONST_PARM.
        TEMPLATE_CONST_PARM.
        (tsubst_friend_function): New function.
        (tsubst_friend_function): New function.
        (instantiate_class_template): Generate the DECL_FRIENDLIST
        (instantiate_class_template): Generate the DECL_FRIENDLIST
        for a new instantiation by using tsubst_friend_function rather
        for a new instantiation by using tsubst_friend_function rather
        than just tsubst.
        than just tsubst.
        (tsubst): Don't tsubst into a type which is a TEMPLATE_DECL.
        (tsubst): Don't tsubst into a type which is a TEMPLATE_DECL.
        Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM, and the
        Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM, and the
        appropriate new macros.  Use reduce_template_parm_level to
        appropriate new macros.  Use reduce_template_parm_level to
        generate lower-level template parameters.  Handle tsubst'ing into
        generate lower-level template parameters.  Handle tsubst'ing into
        TEMPLATE_DECLS that declare TEMPLATE_TEMPLATE_PARMS.  Don't forget
        TEMPLATE_DECLS that declare TEMPLATE_TEMPLATE_PARMS.  Don't forget
        to tsubst the DECL_CONTEXT and DECL_CLASS_CONTEXT of newly created
        to tsubst the DECL_CONTEXT and DECL_CLASS_CONTEXT of newly created
        templates.  Similarly for the template parameters for a new
        templates.  Similarly for the template parameters for a new
        template.
        template.
        (tsubst_copy): Tidy up slightly.  Use TEMPLATE_PARM_INDEX instead
        (tsubst_copy): Tidy up slightly.  Use TEMPLATE_PARM_INDEX instead
        of TEMPLATE_CONST_PARM.  Handle TYPE_DECLs by tsubsting into them.
        of TEMPLATE_CONST_PARM.  Handle TYPE_DECLs by tsubsting into them.
        (unify): Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM.
        (unify): Use TEMPLATE_PARM_INDEX instead of TEMPLATE_CONST_PARM.
        (get_bindings): Call add_to_template_args if necessary.
        (get_bindings): Call add_to_template_args if necessary.
        (instantiate_decl): Handle instantiations of friend templates.
        (instantiate_decl): Handle instantiations of friend templates.
        * search.c (lookup_field_1): Don't treat the TYPE_FIELDS of a
        * search.c (lookup_field_1): Don't treat the TYPE_FIELDS of a
        TEMPLATE_TYPE_PARM as a list of fields; it's not!
        TEMPLATE_TYPE_PARM as a list of fields; it's not!
        * spew.c (yylex): Do a little manual constant propagation to
        * spew.c (yylex): Do a little manual constant propagation to
        clarify the code.
        clarify the code.
Sun Feb 22 19:53:29 1998  Jeffrey A Law  (law@cygnus.com)
Sun Feb 22 19:53:29 1998  Jeffrey A Law  (law@cygnus.com)
        * error.c: Include sys/types.h.
        * error.c: Include sys/types.h.
Thu Feb 19 14:49:09 1998  Jeffrey A Law  (law@cygnus.com)
Thu Feb 19 14:49:09 1998  Jeffrey A Law  (law@cygnus.com)
        * method.c (build_mangled_name): Start CPP directives in column zero.
        * method.c (build_mangled_name): Start CPP directives in column zero.
Thu Feb 19 10:36:48 1998  Jason Merrill  
Thu Feb 19 10:36:48 1998  Jason Merrill  
        * typeck2.c (process_init_constructor): Sorry about non-trivial
        * typeck2.c (process_init_constructor): Sorry about non-trivial
        labeled initializers.
        labeled initializers.
        * parse.y (initlist): Re-enable labeled initializers.
        * parse.y (initlist): Re-enable labeled initializers.
Thu Feb 19 10:15:55 1998  Kriang Lerdsuwanakij  
Thu Feb 19 10:15:55 1998  Kriang Lerdsuwanakij  
        * pt.c (coerce_template_parms): Add a new parameter, is_tmpl_parm,
        * pt.c (coerce_template_parms): Add a new parameter, is_tmpl_parm,
        all callers changed.  Rely on the new parameter instead of arg
        all callers changed.  Rely on the new parameter instead of arg
        being a TREE_LIST when determine whether we are working inside
        being a TREE_LIST when determine whether we are working inside
        template template parameter.  Clean up is_type test.
        template template parameter.  Clean up is_type test.
Thu Feb 19 10:04:12 1998  Jason Merrill  
Thu Feb 19 10:04:12 1998  Jason Merrill  
        * cvt.c (cp_convert_to_pointer): Preserve TREE_CONSTANT.
        * cvt.c (cp_convert_to_pointer): Preserve TREE_CONSTANT.
        * typeck2.c (initializer_constant_valid_p): Allow conversions
        * typeck2.c (initializer_constant_valid_p): Allow conversions
        between pointers and references.
        between pointers and references.
1998-02-19  Brendan Kehoe  
1998-02-19  Brendan Kehoe  
        * typeck.c (build_unary_op): Only warn about incr/decr a pointer
        * typeck.c (build_unary_op): Only warn about incr/decr a pointer
        if pedantic || warn_pointer_arith.
        if pedantic || warn_pointer_arith.
Thu Feb 19 09:37:21 1998  Kriang Lerdsuwanakij  
Thu Feb 19 09:37:21 1998  Kriang Lerdsuwanakij  
        * pt.c (unify): Handle TEMPLATE_DECL.
        * pt.c (unify): Handle TEMPLATE_DECL.
1998-02-18  Brendan Kehoe  
1998-02-18  Brendan Kehoe  
        * cp-tree.h (strip_attrs): Remove decl.
        * cp-tree.h (strip_attrs): Remove decl.
1998-02-18  Doug Evans  
1998-02-18  Doug Evans  
        * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
        * decl.c (duplicate_decls): Call merge_machine_decl_attributes.
        Update olddecl's attributes too.
        Update olddecl's attributes too.
        (strip_attrs): Remove function.
        (strip_attrs): Remove function.
        * typeck.c (common_type): Call merge_machine_type_attributes.
        * typeck.c (common_type): Call merge_machine_type_attributes.
Tue Feb 17 14:07:52 1998  Mark Mitchell  
Tue Feb 17 14:07:52 1998  Mark Mitchell  
        * parse.y (initdcl0_innards): New grammar symbol.
        * parse.y (initdcl0_innards): New grammar symbol.
        (nomods_initdecls, nomods_initdcl0): Change type from itype to
        (nomods_initdecls, nomods_initdcl0): Change type from itype to
        none, since the resulting value is never used.
        none, since the resulting value is never used.
        (parse_decl): New function.
        (parse_decl): New function.
        (datadef): Remove redundant actions.
        (datadef): Remove redundant actions.
        (initdcl0, notype_initdcl0, nomods_initdcl0): Use initdcl0_innards.
        (initdcl0, notype_initdcl0, nomods_initdcl0): Use initdcl0_innards.
        * parse.c: Regenerated.
        * parse.c: Regenerated.
Tue Feb 17 11:54:16 1998  Jason Merrill  
Tue Feb 17 11:54:16 1998  Jason Merrill  
        * parse.y (simple_stmt): Use getdecls() to check for decl.
        * parse.y (simple_stmt): Use getdecls() to check for decl.
Sat Feb 14 11:50:51 1998  Manfred Hollstein  
Sat Feb 14 11:50:51 1998  Manfred Hollstein  
        * Make-lang.in (DEMANGLER_INSTALL_NAME, DEMANGLER_CROSS_NAME): New
        * Make-lang.in (DEMANGLER_INSTALL_NAME, DEMANGLER_CROSS_NAME): New
        macros.
        macros.
        (c++.install-common): Install c++filt properly as native or as cross
        (c++.install-common): Install c++filt properly as native or as cross
        variant.
        variant.
        (c++.uninstall): Add c++filt.
        (c++.uninstall): Add c++filt.
Fri Feb 13 14:55:37 1998  Jason Merrill  
Fri Feb 13 14:55:37 1998  Jason Merrill  
        * call.c (standard_conversion): Fix multi-level ptr conversions.
        * call.c (standard_conversion): Fix multi-level ptr conversions.
Fri Feb 13 14:06:22 1998  Mike Stump  
Fri Feb 13 14:06:22 1998  Mike Stump  
        * init.c (build_new): Propagate error_mark_node up.
        * init.c (build_new): Propagate error_mark_node up.
Fri Feb 13 13:24:32 1998  Jason Merrill  
Fri Feb 13 13:24:32 1998  Jason Merrill  
        * parse.y (simple_stmt): If the condition isn't a declaration,
        * parse.y (simple_stmt): If the condition isn't a declaration,
        start the controlled block after the test.
        start the controlled block after the test.
Fri Feb 13 02:26:10 1998  Andreas Schwab  
Fri Feb 13 02:26:10 1998  Andreas Schwab  
        * call.c (build_over_call): Convert builtin abs, labs and fabs to
        * call.c (build_over_call): Convert builtin abs, labs and fabs to
        tree-codes.
        tree-codes.
        * decl.c (init_decl_processing): Re-enable abs, labs and fabs as
        * decl.c (init_decl_processing): Re-enable abs, labs and fabs as
        builtins.
        builtins.
Fri Feb 13 01:36:42 1998  Jason Merrill  
Fri Feb 13 01:36:42 1998  Jason Merrill  
        * call.c (standard_conversion): A BASE_CONV replaces an RVALUE_CONV.
        * call.c (standard_conversion): A BASE_CONV replaces an RVALUE_CONV.
Fri Feb 13 00:21:59 1998  Jason Merrill  
Fri Feb 13 00:21:59 1998  Jason Merrill  
        * cp-tree.h: Add access_protected_virtual_node.
        * cp-tree.h: Add access_protected_virtual_node.
        * class.c (init_class_processing): Initialize it.
        * class.c (init_class_processing): Initialize it.
        * decl.c (xref_basetypes): Use it.
        * decl.c (xref_basetypes): Use it.
        * parse.y (base_class_access_list): Likewise.
        * parse.y (base_class_access_list): Likewise.
        * Make-lang.in (DEMANGLER_PROG): Add $(exeext).
        * Make-lang.in (DEMANGLER_PROG): Add $(exeext).
        (c++.install-common): Install c++filt.
        (c++.install-common): Install c++filt.
Thu Feb 12 12:46:51 1998  Benjamin Kosnik  
Thu Feb 12 12:46:51 1998  Benjamin Kosnik  
        * decl.c (shadow_tag): Give error for typedef-ing built-in types.
        * decl.c (shadow_tag): Give error for typedef-ing built-in types.
Wed Feb 11 23:28:05 1998  Mark Mitchell  
Wed Feb 11 23:28:05 1998  Mark Mitchell  
        * call.c (reference_binding): Use comptypes when comparing
        * call.c (reference_binding): Use comptypes when comparing
        TYPE_MAIN_VARIANTS to handle non-canonical array/index types.
        TYPE_MAIN_VARIANTS to handle non-canonical array/index types.
Wed Feb 11 16:42:04 1998  Mark Mitchell  
Wed Feb 11 16:42:04 1998  Mark Mitchell  
        * tree.c (is_overloaded_fn): Use really_overloaded_fn.
        * tree.c (is_overloaded_fn): Use really_overloaded_fn.
        (really_overloaded_fn): Move check here from is_overloaded_fn.
        (really_overloaded_fn): Move check here from is_overloaded_fn.
        (get_first_fn): Use really_overloaded_fn and is_overloaded_fn.
        (get_first_fn): Use really_overloaded_fn and is_overloaded_fn.
Wed Feb 11 15:54:18 1998  Mark Mitchell  
Wed Feb 11 15:54:18 1998  Mark Mitchell  
        * typeck.c (build_ptrmemfunc): Type-check pointer-to-member
        * typeck.c (build_ptrmemfunc): Type-check pointer-to-member
        conversions.
        conversions.
Mon Feb  9 22:23:31 1998  Mark Mitchell  
Mon Feb  9 22:23:31 1998  Mark Mitchell  
        * cp-tree.h (push_template_decl): Return the decl passed in, or an
        * cp-tree.h (push_template_decl): Return the decl passed in, or an
        equivalent duplicate.
        equivalent duplicate.
        * decl.c (pushtag): Use the return value from push_template_decl.
        * decl.c (pushtag): Use the return value from push_template_decl.
        (duplicate_decls): When duplicating a template declaration, merge
        (duplicate_decls): When duplicating a template declaration, merge
        the DECL_TEMPLATE_RESULTs as well.
        the DECL_TEMPLATE_RESULTs as well.
        (make_implicit_typename): Don't try to dive into typename types to
        (make_implicit_typename): Don't try to dive into typename types to
        find a context for making a new implicit typename.
        find a context for making a new implicit typename.
        (start_decl): Use the return value from push_template_decl.
        (start_decl): Use the return value from push_template_decl.
        (grokdeclarator): Complain about declarations list `const operator
        (grokdeclarator): Complain about declarations list `const operator
        int'.  Since we don't correctly handle in-class initializations of
        int'.  Since we don't correctly handle in-class initializations of
        non-static data members, complain about this (now illegal)
        non-static data members, complain about this (now illegal)
        practice.  Issue an error for initializations of non-const statics
        practice.  Issue an error for initializations of non-const statics
        since that is illegal as well, and since we don't handle that case
        since that is illegal as well, and since we don't handle that case
        correctly either.
        correctly either.
        (start_function): Use the return value from push_template_decl.
        (start_function): Use the return value from push_template_decl.
        (start_method): Likewise.
        (start_method): Likewise.
        * decl2.c (grokfield): Likewise.  Since the change to
        * decl2.c (grokfield): Likewise.  Since the change to
        grokdeclarator ensures that all initialized fields are in fact
        grokdeclarator ensures that all initialized fields are in fact
        static, remove a redundant test for TREE_PUBLIC.
        static, remove a redundant test for TREE_PUBLIC.
        * parse.y (initlist): Disable labeled initializers since they do
        * parse.y (initlist): Disable labeled initializers since they do
        not work as per the documentation, and since they do not use the
        not work as per the documentation, and since they do not use the
        same syntax as the C front end.
        same syntax as the C front end.
        * pt.c (push_template_decl): Return the decl passed in, or an
        * pt.c (push_template_decl): Return the decl passed in, or an
        equivalent duplicate.
        equivalent duplicate.
        (lookup_template_class): When searching in a nested context,
        (lookup_template_class): When searching in a nested context,
        use the right arguments.
        use the right arguments.
        (uses_template_parms): Handle the DECL_INITIAL for a CONST_DECL.
        (uses_template_parms): Handle the DECL_INITIAL for a CONST_DECL.
        * typeck.c (build_component_ref): Assign the correct type to the
        * typeck.c (build_component_ref): Assign the correct type to the
        result of build_vfn_ref.
        result of build_vfn_ref.
Tue Feb 10 23:56:46 1998  Jason Merrill  
Tue Feb 10 23:56:46 1998  Jason Merrill  
        * pt.c (convert_nontype_argument): Fix typo.
        * pt.c (convert_nontype_argument): Fix typo.
        (check_explicit_specialization): Allow old-style specialization
        (check_explicit_specialization): Allow old-style specialization
        of class template members.
        of class template members.
Tue Feb 10 20:36:52 1998  Jason Merrill  
Tue Feb 10 20:36:52 1998  Jason Merrill  
                          Manfred Hollstein  
                          Manfred Hollstein  
        * decl.c (grokdeclarator): Use DECL_USE_TEMPLATE instead
        * decl.c (grokdeclarator): Use DECL_USE_TEMPLATE instead
        when deciding to override DECL_ASSEMBLER_NAME.
        when deciding to override DECL_ASSEMBLER_NAME.
Tue Feb 10 15:30:55 1998  Andrew MacLeod  
Tue Feb 10 15:30:55 1998  Andrew MacLeod  
        * decl2.c (lang_f_options): Add -fsquangle to option processing list.
        * decl2.c (lang_f_options): Add -fsquangle to option processing list.
        * cp-tree.h (flag_do_squangling): Add declaration.
        * cp-tree.h (flag_do_squangling): Add declaration.
        * lang-options.h: Add -fsquangle and -fno-squangle.
        * lang-options.h: Add -fsquangle and -fno-squangle.
        * method.c: Add macros and static variables for squangling.
        * method.c: Add macros and static variables for squangling.
        (build_overload_name): Rename to build_mangled_name, add logic for B
        (build_overload_name): Rename to build_mangled_name, add logic for B
        compression, and split into process_modifiers and
        compression, and split into process_modifiers and
        process_overload_item.
        process_overload_item.
        (process_modifiers): New function, to handle constant, reference,
        (process_modifiers): New function, to handle constant, reference,
        and pointer types.
        and pointer types.
        (process_overload_item): New function, handles issue of type codes.
        (process_overload_item): New function, handles issue of type codes.
        (build_overload_name): New function, start squangling and call
        (build_overload_name): New function, start squangling and call
        build_mangled_name.
        build_mangled_name.
        (ALLOCATE_TYPEVEC, DEALLOCATE_TYPEVEC): Remove macro and expand inline.
        (ALLOCATE_TYPEVEC, DEALLOCATE_TYPEVEC): Remove macro and expand inline.
        (start_squangling): New function to initialize squangling structs.
        (start_squangling): New function to initialize squangling structs.
        (end_squangling): New function to destroy squangling structs.
        (end_squangling): New function to destroy squangling structs.
        (nrepeats): Rename variable to Nrepeats.
        (nrepeats): Rename variable to Nrepeats.
        (issue_nrepeats): New function for issuing 'n' type repeats.
        (issue_nrepeats): New function for issuing 'n' type repeats.
        (check_ktype): New function to check for type K name compression.
        (check_ktype): New function to check for type K name compression.
        (build_overload_nested_name): Add a check for 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
        (build_qualified_name): Add a check for K name compression and don't
        use DECL_ASSEMBLER_NAME when squangling is on.
        use DECL_ASSEMBLER_NAME when squangling is on.
        (check_btype): New function, checks for B type compression.
        (check_btype): New function, checks for B type compression.
        (build_static_name, build_decl_overload_real): Initiate squangling.
        (build_static_name, build_decl_overload_real): Initiate squangling.
        (build_typename_overload, build_overload_with_type): Initiate
        (build_typename_overload, build_overload_with_type): Initiate
        squangling
        squangling
Sun Feb  8 23:47:38 1998  scott snyder  
Sun Feb  8 23:47:38 1998  scott snyder  
        * method.c (make_thunk): Avoid name buffer overflow.
        * method.c (make_thunk): Avoid name buffer overflow.
Sat Feb  7 16:48:54 1998  Jason Merrill  
Sat Feb  7 16:48:54 1998  Jason Merrill  
        * pt.c (instantiate_decl): Call cp_finish_decl for vars even if we
        * pt.c (instantiate_decl): Call cp_finish_decl for vars even if we
        don't define them yet.
        don't define them yet.
        * parse.y (nomods_initdcl0): Add constructor_declarator case.
        * parse.y (nomods_initdcl0): Add constructor_declarator case.
Fri Feb  6 21:32:25 1998  Richard Kenner  
Fri Feb  6 21:32:25 1998  Richard Kenner  
        * config-lang.in (diff_excludes): Use basename only.
        * config-lang.in (diff_excludes): Use basename only.
Thu Feb  5 19:10:40 1998  Jason Merrill  
Thu Feb  5 19:10:40 1998  Jason Merrill  
        * tinfo2.cc: Add tinfo for signed char.
        * tinfo2.cc: Add tinfo for signed char.
Thu Feb  5 14:38:23 1998  Mike Stump  
Thu Feb  5 14:38:23 1998  Mike Stump  
        * search.c (compute_access): Handle protected constructors in derived
        * search.c (compute_access): Handle protected constructors in derived
        classes as accessible.
        classes as accessible.
Wed Feb  4 01:26:49 1998  Jason Merrill  
Wed Feb  4 01:26:49 1998  Jason Merrill  
        * expr.c (cplus_expand_expr, PCC_STATIC_STRUCT_RETURN code):
        * expr.c (cplus_expand_expr, PCC_STATIC_STRUCT_RETURN code):
        Call convert_from_reference sooner.
        Call convert_from_reference sooner.
Tue Feb  3 23:50:52 1998  Mark Mitchell  
Tue Feb  3 23:50:52 1998  Mark Mitchell  
        * cvt.c (ocp_convert): Obtain the constant values from constant
        * cvt.c (ocp_convert): Obtain the constant values from constant
        decls even if the destination type is the same as the type of the
        decls even if the destination type is the same as the type of the
        decl.
        decl.
        * decl2.c (finish_file): Make sure that static inlines with
        * decl2.c (finish_file): Make sure that static inlines with
        definitions are not marked DECL_EXTERNAL before returning.
        definitions are not marked DECL_EXTERNAL before returning.
Tue Feb  3 22:43:42 1998  Jason Merrill  
Tue Feb  3 22:43:42 1998  Jason Merrill  
        * decl.c: Lose arg_looking_for_template.
        * decl.c: Lose arg_looking_for_template.
        (lookup_name_real): Likewise.
        (lookup_name_real): Likewise.
        * parse.y: Lose processing_template_arg, template_arg1.
        * parse.y: Lose processing_template_arg, template_arg1.
        (primary): Likewise.
        (primary): Likewise.
        * spew.c (yylex): Set lastiddecl for PTYPENAMEs, too.
        * spew.c (yylex): Set lastiddecl for PTYPENAMEs, too.
Tue Feb  3 22:04:01 1998  Kriang Lerdsuwanakij  
Tue Feb  3 22:04:01 1998  Kriang Lerdsuwanakij  
        * error.c (dump_decl): Fix type of default arguments for template
        * error.c (dump_decl): Fix type of default arguments for template
        template parameters and nontype template parameters.
        template parameters and nontype template parameters.
        * parse.y (template_parm): Handle invalid default template
        * parse.y (template_parm): Handle invalid default template
        template arguments here.
        template arguments here.
        * parse.y (template_parm): Use template_arg instead of PTYPENAME
        * parse.y (template_parm): Use template_arg instead of PTYPENAME
        for default template template argument.
        for default template template argument.
        * pt.c (coerce_template_parms): Merge default template argument
        * pt.c (coerce_template_parms): Merge default template argument
        codes.  Can treat RECORD_TYPE as template name if it is implicitly
        codes.  Can treat RECORD_TYPE as template name if it is implicitly
        created.  Fix argument index in error message.
        created.  Fix argument index in error message.
        * typeck.c (comptypes): Merge template argument comparison codes in
        * typeck.c (comptypes): Merge template argument comparison codes in
        TEMPLATE_TEMPLATE_PARM and RECORD_TYPE.
        TEMPLATE_TEMPLATE_PARM and RECORD_TYPE.
Tue Jan  6 01:42:44 1998  Mumit Khan  
Tue Jan  6 01:42:44 1998  Mumit Khan  
        * lex.c (file_name_nondirectory): Also check for '/'.
        * lex.c (file_name_nondirectory): Also check for '/'.
Mon Feb  2 11:24:22 1998  Mark Mitchell  
Mon Feb  2 11:24:22 1998  Mark Mitchell  
        * parse.y (primary): Deal with statement-expressions in
        * parse.y (primary): Deal with statement-expressions in
        templates.
        templates.
        * pt.c (tsubst_copy): Handle BIND_EXPR.
        * pt.c (tsubst_copy): Handle BIND_EXPR.
        * tree.c (mapcar): Likewise.
        * tree.c (mapcar): Likewise.
        * call.c (add_template_candidate_real): Pass extra parameter to
        * call.c (add_template_candidate_real): Pass extra parameter to
        fn_type_unification.
        fn_type_unification.
        * cp-tree.h (fn_type_unification): Add parameter.
        * cp-tree.h (fn_type_unification): Add parameter.
        * pt.c (fn_type_unification): Add additional parameter to deal with
        * pt.c (fn_type_unification): Add additional parameter to deal with
        static member functions.
        static member functions.
        (get_bindings): Deal with static member functions.
        (get_bindings): Deal with static member functions.
        * cp-tree.h (DECL_NONSTATIC_MEMBER_FUNCTION_P): New macro.
        * cp-tree.h (DECL_NONSTATIC_MEMBER_FUNCTION_P): New macro.
        (revert_static_member_fn): Declare.
        (revert_static_member_fn): Declare.
        * decl.c (revert_static_member_fn): Remove declaration.  Change
        * decl.c (revert_static_member_fn): Remove declaration.  Change
        linkage from internal to external.
        linkage from internal to external.
        (cp_finish_decl): Deal with virtual functions in classes local to
        (cp_finish_decl): Deal with virtual functions in classes local to
        template functions.
        template functions.
        * decl2.c (finish_file): Don't forget to emit increment/decrement
        * decl2.c (finish_file): Don't forget to emit increment/decrement
        expressions in initializers for file-scope variables.
        expressions in initializers for file-scope variables.
        * parse.y (typename_sub2): If the typename doesn't names a
        * parse.y (typename_sub2): If the typename doesn't names a
        template, rather than a type, issue an error message.
        template, rather than a type, issue an error message.
        * pt.c (check_explicit_specialization): Handle specializations of
        * pt.c (check_explicit_specialization): Handle specializations of
        static member functions.
        static member functions.
        (coerce_template_parms): Handle offset references to lists of
        (coerce_template_parms): Handle offset references to lists of
        member functions.
        member functions.
        * search.c (note_debug_info_needed): Don't crash when handed a
        * search.c (note_debug_info_needed): Don't crash when handed a
        type which is being defined.
        type which is being defined.
        * typeck.c (complete_type): Don't crash when handed NULL_TREE;
        * typeck.c (complete_type): Don't crash when handed NULL_TREE;
        that can happen with some illegal code.
        that can happen with some illegal code.
Mon Feb  2 00:57:38 1998  Kaveh R. Ghazi  
Mon Feb  2 00:57:38 1998  Kaveh R. Ghazi  
        * call.c (user_harshness): Initialize `code' to 0.
        * call.c (user_harshness): Initialize `code' to 0.
        (build_method_call): Initialize `candidates', `cp' and `len' to 0.
        (build_method_call): Initialize `candidates', `cp' and `len' to 0.
        (null_ptr_cst_p): Add parentheses around && within ||.
        (null_ptr_cst_p): Add parentheses around && within ||.
        (standard_conversion): Likewise.
        (standard_conversion): Likewise.
        (z_candidate): Likewise.
        (z_candidate): Likewise.
        (build_user_type_conversion_1): Initialize `args' to NULL_TREE.
        (build_user_type_conversion_1): Initialize `args' to NULL_TREE.
        (build_object_call): Likewise for `mem_args'.
        (build_object_call): Likewise for `mem_args'.
        (build_new_op): Likewise for `mem_arglist'.  Add `return' from
        (build_new_op): Likewise for `mem_arglist'.  Add `return' from
        default case in enumeration switch.
        default case in enumeration switch.
        * class.c (build_vtable_entry): Add explicit braces to avoid
        * class.c (build_vtable_entry): Add explicit braces to avoid
        ambiguous `else'.
        ambiguous `else'.
        (build_class_init_list): Likewise.
        (build_class_init_list): Likewise.
        (finish_struct_1): Initialize `width' to 0.
        (finish_struct_1): Initialize `width' to 0.
        (instantiate_type): Initialize `name' to NULL_TREE.  Add
        (instantiate_type): Initialize `name' to NULL_TREE.  Add
        explicit braces to avoid ambiguous `else'.
        explicit braces to avoid ambiguous `else'.
        * cvt.c (convert_to_aggr): Add explicit braces to avoid ambiguous
        * cvt.c (convert_to_aggr): Add explicit braces to avoid ambiguous
        `else'.
        `else'.
        * decl.c (grok_reference_init): Eliminate unused parameter, all
        * decl.c (grok_reference_init): Eliminate unused parameter, all
        callers changed.
        callers changed.
        (record_builtin_type): Initialize `tdecl' to NULL_TREE.
        (record_builtin_type): Initialize `tdecl' to NULL_TREE.
        (init_decl_processing): Initialize `vb_off_identifier' to NULL_TREE.
        (init_decl_processing): Initialize `vb_off_identifier' to NULL_TREE.
        (cp_finish_decl): Initialize `ttype' to NULL_TREE.
        (cp_finish_decl): Initialize `ttype' to NULL_TREE.
        (grokdeclarator): Add parentheses around && within ||.  Add
        (grokdeclarator): Add parentheses around && within ||.  Add
        explicit braces to avoid ambiguous `else'.
        explicit braces to avoid ambiguous `else'.
        (grokparms): Initialize `type' to NULL_TREE.
        (grokparms): Initialize `type' to NULL_TREE.
        (xref_tag): Remove unused label `just_return'.
        (xref_tag): Remove unused label `just_return'.
        (finish_enum): Initialize `minnode' and `maxnode' to NULL_TREE.
        (finish_enum): Initialize `minnode' and `maxnode' to NULL_TREE.
        (finish_function): Initialize `cond' and `thenclause' to NULL_TREE.
        (finish_function): Initialize `cond' and `thenclause' to NULL_TREE.
        (hack_incomplete_structures): Add parentheses around assignment
        (hack_incomplete_structures): Add parentheses around assignment
        used as truth value.
        used as truth value.
        * decl2.c (coerce_delete_type): Hide definition of `e3'.
        * decl2.c (coerce_delete_type): Hide definition of `e3'.
        * error.c: Include .
        * error.c: Include .
        (dump_expr): Change the type of `i' to size_t.  Remove unused
        (dump_expr): Change the type of `i' to size_t.  Remove unused
        label `error'.
        label `error'.
        * except.c (init_exception_processing): Remove unused variable `d'.
        * except.c (init_exception_processing): Remove unused variable `d'.
        (expand_throw): Likewise for `label'.
        (expand_throw): Likewise for `label'.
        * friend.c (add_friends): Add explicit braces to avoid ambiguous
        * friend.c (add_friends): Add explicit braces to avoid ambiguous
        `else'.
        `else'.
        * init.c (sort_member_init): Initialize `last_field' to NULL_TREE.
        * init.c (sort_member_init): Initialize `last_field' to NULL_TREE.
        (sort_base_init): Likewise for `binfo'.
        (sort_base_init): Likewise for `binfo'.
        (expand_member_init): Likewise for `rval'.
        (expand_member_init): Likewise for `rval'.
        (build_member_call): Add parentheses around assignment used as
        (build_member_call): Add parentheses around assignment used as
        truth value.
        truth value.
        (build_offset_ref): Add explicit braces to avoid ambiguous `else'.
        (build_offset_ref): Add explicit braces to avoid ambiguous `else'.
        (build_new): Initialize `nelts' to NULL_TREE.  Initialize
        (build_new): Initialize `nelts' to NULL_TREE.  Initialize
        `old_immediate_size_expand' to 0.
        `old_immediate_size_expand' to 0.
        (build_new_1): Initialize `nelts' and `alloc_node' to NULL_TREE.
        (build_new_1): Initialize `nelts' and `alloc_node' to NULL_TREE.
        (build_vec_delete_1): Remove unused variable `block'.
        (build_vec_delete_1): Remove unused variable `block'.
        (expand_vec_init): Initialize `itype' to NULL_TREE.
        (expand_vec_init): Initialize `itype' to NULL_TREE.
        * lex.c: Include  if we don't have .  Protect
        * lex.c: Include  if we don't have .  Protect
        declaration of `index' and `rindex' with autoconf macros.
        declaration of `index' and `rindex' with autoconf macros.
        (reinit_parse_for_expr): Remove unused variables
        (reinit_parse_for_expr): Remove unused variables
        `look_for_semicolon' and `look_for_lbrac'.
        `look_for_semicolon' and `look_for_lbrac'.
        (cons_up_default_function): Initialize `args' to NULL_TREE.
        (cons_up_default_function): Initialize `args' to NULL_TREE.
        (readescape): Initialize `firstdig' to 0.
        (readescape): Initialize `firstdig' to 0.
        (real_yylex): Add parentheses around assignment used as truth value.
        (real_yylex): Add parentheses around assignment used as truth value.
        * method.c: Include  if we don't have .
        * method.c: Include  if we don't have .
        Protect declaration of `index' with autoconf macro.
        Protect declaration of `index' with autoconf macro.
        * parse.y (primary): Add explicit braces to avoid ambiguous `else'.
        * parse.y (primary): Add explicit braces to avoid ambiguous `else'.
        Initialize `type' to NULL_TREE.
        Initialize `type' to NULL_TREE.
        (structsp): Remove unused variable `id'.
        (structsp): Remove unused variable `id'.
        * pt.c (coerce_template_parms): Add explicit braces to avoid
        * pt.c (coerce_template_parms): Add explicit braces to avoid
        ambiguous `else'.
        ambiguous `else'.
        (lookup_template_class): Initialize `template' to NULL_TREE.
        (lookup_template_class): Initialize `template' to NULL_TREE.
        (instantiate_class_template): Remove unused variable `name' and `e'.
        (instantiate_class_template): Remove unused variable `name' and `e'.
        (tsubst): Likewise for `i'.  Initialize `last' to NULL_TREE.
        (tsubst): Likewise for `i'.  Initialize `last' to NULL_TREE.
        (do_poplevel): Initialize `saved_warn_unused' to 0.
        (do_poplevel): Initialize `saved_warn_unused' to 0.
        (type_unification): Remove unused varable `parm'.
        (type_unification): Remove unused varable `parm'.
        (unify): Likewise for `j'.
        (unify): Likewise for `j'.
        * repo.c (init_repo): Add parentheses around assignment used as
        * repo.c (init_repo): Add parentheses around assignment used as
        truth value.
        truth value.
        (finish_repo): Remove unused varable `p'.
        (finish_repo): Remove unused varable `p'.
        * search.c (get_binfo): Initialize `type' to NULL_TREE.
        * search.c (get_binfo): Initialize `type' to NULL_TREE.
        (get_base_distance): Likewise.
        (get_base_distance): Likewise.
        (lookup_field): Initialize `rval_binfo_h', `type', `basetype_path'
        (lookup_field): Initialize `rval_binfo_h', `type', `basetype_path'
        and `new_v' to NULL_TREE.
        and `new_v' to NULL_TREE.
        (lookup_fnfields): Likewise for `rval_binfo_h'.
        (lookup_fnfields): Likewise for `rval_binfo_h'.
        (breadth_first_search): Add parentheses around assignment used as
        (breadth_first_search): Add parentheses around assignment used as
        truth value.
        truth value.
        (get_template_base): Initialize `type' to NULL_TREE.
        (get_template_base): Initialize `type' to NULL_TREE.
        * sig.c (append_signature_fields): Initialize `last_mfptr' to
        * sig.c (append_signature_fields): Initialize `last_mfptr' to
        NULL_TREE.
        NULL_TREE.
        (build_signature_table_constructor): Likewise for
        (build_signature_table_constructor): Likewise for
        `last_rhs_field', `pfn' and `vt_off'.
        `last_rhs_field', `pfn' and `vt_off'.
        (build_sigtable): Likewise for `init'.
        (build_sigtable): Likewise for `init'.
        * tree.c (break_out_calls): Initialize `t2' to NULL_TREE.
        * tree.c (break_out_calls): Initialize `t2' to NULL_TREE.
        (propagate_binfo_offsets): Likewise for `delta'.
        (propagate_binfo_offsets): Likewise for `delta'.
        (hash_tree_cons): Initialize hashcode to 0.
        (hash_tree_cons): Initialize hashcode to 0.
        (can_free): Likewise for `size'.
        (can_free): Likewise for `size'.
        (cp_tree_equal): Add explicit braces to avoid ambiguous `else'.
        (cp_tree_equal): Add explicit braces to avoid ambiguous `else'.
        * typeck.c (convert_sequence): Hide prototype.
        * typeck.c (convert_sequence): Hide prototype.
        (common_type): Add explicit braces to avoid ambiguous `else'.
        (common_type): Add explicit braces to avoid ambiguous `else'.
        (comp_target_types): Likewise.
        (comp_target_types): Likewise.
        (build_x_function_call): Initialize `ctypeptr' to NULL_TREE.
        (build_x_function_call): Initialize `ctypeptr' to NULL_TREE.
        (build_function_call_real): Add explicit braces to avoid ambiguous
        (build_function_call_real): Add explicit braces to avoid ambiguous
        `else'.
        `else'.
        (convert_arguments): Initialize `called_thing' to 0.
        (convert_arguments): Initialize `called_thing' to 0.
        (convert_for_initialization): Initialize `savew' and `savee' to 0.
        (convert_for_initialization): Initialize `savew' and `savee' to 0.
        * typeck2.c (incomplete_type_error): Initialize `errmsg' to 0.
        * typeck2.c (incomplete_type_error): Initialize `errmsg' to 0.
        (digest_init): Initialize `old_tail_contents' to NULL_TREE.
        (digest_init): Initialize `old_tail_contents' to NULL_TREE.
        (build_x_arrow): Likewise for `last_rval'.
        (build_x_arrow): Likewise for `last_rval'.
        * xref.c (GNU_xref_decl): Initialize `cls' to 0.
        * xref.c (GNU_xref_decl): Initialize `cls' to 0.
Sun Feb  1 12:45:34 1998  J"orn Rennecke  
Sun Feb  1 12:45:34 1998  J"orn Rennecke  
        * decl.c (init_decl_processing): Use set_sizetype.
        * decl.c (init_decl_processing): Use set_sizetype.
        * decl2.c (sizetype): Don't declare.
        * decl2.c (sizetype): Don't declare.
        * typeck.c (c_sizeof): Convert result of *_DIV_EXPR to sizetype.
        * typeck.c (c_sizeof): Convert result of *_DIV_EXPR to sizetype.
        (c_sizeof_nowarn, build_binary_op_nodefault): Likewise.
        (c_sizeof_nowarn, build_binary_op_nodefault): Likewise.
        (build_component_addr, unary_complex_lvalue): Likewise.
        (build_component_addr, unary_complex_lvalue): Likewise.
        * rtti.c (expand_class_desc): Likewise.
        * rtti.c (expand_class_desc): Likewise.
        * class.c (get_vfield_offset): Likewise.
        * class.c (get_vfield_offset): Likewise.
Thu Jan 29 10:39:30 1998  Mark Mitchell  
Thu Jan 29 10:39:30 1998  Mark Mitchell  
        * pt.c (convert_nontype_argument): Move check for is_overloaded_fn
        * pt.c (convert_nontype_argument): Move check for is_overloaded_fn
        early to avoid bogus error.  Handle overloaded function
        early to avoid bogus error.  Handle overloaded function
        names provided as template arguments correctly.
        names provided as template arguments correctly.
        (coerce_template_parms): Don't mishandle overloaded functions when
        (coerce_template_parms): Don't mishandle overloaded functions when
        dealing with template template parameters.
        dealing with template template parameters.
        (lookup_template_class): Issue an error message, rather than
        (lookup_template_class): Issue an error message, rather than
        crashing, when the TYPE_DECL provided is not a template type.
        crashing, when the TYPE_DECL provided is not a template type.
Wed Jan 28 23:14:44 1998  Jason Merrill  
Wed Jan 28 23:14:44 1998  Jason Merrill  
        * class.c (instantiate_type): Don't just return a known type if
        * class.c (instantiate_type): Don't just return a known type if
        it's wrong.
        it's wrong.
Wed Jan 28 11:04:07 1998  Mark Mitchell  
Wed Jan 28 11:04:07 1998  Mark Mitchell  
        * class.c (instantiate_type): Remove handling of FUNCTION_DECL
        * class.c (instantiate_type): Remove handling of FUNCTION_DECL
        since that code could never be reached.
        since that code could never be reached.
        * error.c (dump_decl): Avoid aborting in the midst of printing an
        * error.c (dump_decl): Avoid aborting in the midst of printing an
        error message about an illegal template declaration.
        error message about an illegal template declaration.
        * parse.y (structsp): Print an error message, rather than crashing,
        * parse.y (structsp): Print an error message, rather than crashing,
        when a class-head does not name a class.
        when a class-head does not name a class.
        * pt.c (convert_nontype_argument):  Allow REAL_TYPE and COMPLEX_TYPE
        * pt.c (convert_nontype_argument):  Allow REAL_TYPE and COMPLEX_TYPE
        template arguments as a g++ extension.
        template arguments as a g++ extension.
        * cp-tree.def (ALIGNOF_EXPR): New tree code.
        * cp-tree.def (ALIGNOF_EXPR): New tree code.
        * decl2.c (grok_alignof): If processing_template_decl, just store
        * decl2.c (grok_alignof): If processing_template_decl, just store
        the expression.
        the expression.
        * typeck.c (c_alignof): Likewise.
        * typeck.c (c_alignof): Likewise.
        * decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR.
        * decl2.c (build_expr_from_tree): Handle ALIGNOF_EXPR.
        * error.c (dump_expr): Likewise.
        * error.c (dump_expr): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * tree.c (cp_tree_equal): Likewise.
        * tree.c (cp_tree_equal): Likewise.
        * pt.c (uses_template_parms): Correctly determine whether or not a
        * pt.c (uses_template_parms): Correctly determine whether or not a
        SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant
        SIZEOF_EXPR/ALIGNOF_EXPR uses template parameters so that constant
        folding can be done.
        folding can be done.
        * cp-tree.h (grok_enum_decls): Remove type parameter.
        * cp-tree.h (grok_enum_decls): Remove type parameter.
        * decl.c (grok_enum_decls): Likewise.
        * decl.c (grok_enum_decls): Likewise.
        * decl2.c (grok_x_components): Call grok_enum_decls
        * decl2.c (grok_x_components): Call grok_enum_decls
        unconditionally, since it will do nothing if there is no
        unconditionally, since it will do nothing if there is no
        current_local_enum.  Use the new calling sequence.
        current_local_enum.  Use the new calling sequence.
        * pt.c (tsubst_enum): Use the new calling sequence for
        * pt.c (tsubst_enum): Use the new calling sequence for
        grok_enum_decls.
        grok_enum_decls.
        * decl.c (start_function): Make member functions of local classes
        * decl.c (start_function): Make member functions of local classes
        in extern inline functions have comdat linkage here...
        in extern inline functions have comdat linkage here...
        (grokdeclarator): Rather than here.
        (grokdeclarator): Rather than here.
Wed Jan 28 10:55:47 1998  Jason Merrill  
Wed Jan 28 10:55:47 1998  Jason Merrill  
        * pt.c (convert_nontype_argument): Use decl_constant_value.
        * pt.c (convert_nontype_argument): Use decl_constant_value.
Tue Jan 27 16:42:21 1998  Mark Mitchell  
Tue Jan 27 16:42:21 1998  Mark Mitchell  
        * call.c (add_template_candidate_real): New function.
        * call.c (add_template_candidate_real): New function.
        (add_template_candidate): Use it.
        (add_template_candidate): Use it.
        (add_template_conv_candidate): Likewise.
        (add_template_conv_candidate): Likewise.
        (joust): Pass extra argument to more_specialized.
        (joust): Pass extra argument to more_specialized.
        * class.c (instantiate_type): Handle a single FUNCTION_DECL.
        * class.c (instantiate_type): Handle a single FUNCTION_DECL.
        (is_local_class): Remove.
        (is_local_class): Remove.
        (finish_struct): Check TI_PENDING_SPECIALIZATION_FLAG.
        (finish_struct): Check TI_PENDING_SPECIALIZATION_FLAG.
        * cp-tree.h (is_local_class): Remove.
        * cp-tree.h (is_local_class): Remove.
        (perform_array_to_pointer_conversion): Likewise.
        (perform_array_to_pointer_conversion): Likewise.
        (finish_member_template_decl): Add.
        (finish_member_template_decl): Add.
        (check_explicit_specialization): Return a tree, not an int.
        (check_explicit_specialization): Return a tree, not an int.
        (more_specialized): Take additional argument.
        (more_specialized): Take additional argument.
        (get_bindings): Likewise.
        (get_bindings): Likewise.
        (TI_PENDING_SPECIALIZATION_FLAG): New macro.
        (TI_PENDING_SPECIALIZATION_FLAG): New macro.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
        * cvt.c (perform_qualification_conversions): Use comp_ptr_ttypes.
        (perform_array_to_pointer_conversion): Remove.
        (perform_array_to_pointer_conversion): Remove.
        * decl.c (saved_scope): Add processing_specialization,
        * decl.c (saved_scope): Add processing_specialization,
        processing_explicit_instantiation fields.
        processing_explicit_instantiation fields.
        (maybe_push_to_top_level): Save them.
        (maybe_push_to_top_level): Save them.
        (pop_from_top_level): Restore them.
        (pop_from_top_level): Restore them.
        (grokfndecl): Use new return value from
        (grokfndecl): Use new return value from
        check_explicit_specialization.
        check_explicit_specialization.
        (start_decl): Don't check flag_guiding_decls before pushing
        (start_decl): Don't check flag_guiding_decls before pushing
        decls.
        decls.
        (cp_finish_decl): Remove previous (bogus) change.
        (cp_finish_decl): Remove previous (bogus) change.
        (grok_declarator): Use decl_function_context rather than
        (grok_declarator): Use decl_function_context rather than
        is_local_class.
        is_local_class.
        * decl2.c (finish_file): Pass extra argument to get_bindings.
        * decl2.c (finish_file): Pass extra argument to get_bindings.
        (build_expr_from_tree): Let build_x_component_ref check
        (build_expr_from_tree): Let build_x_component_ref check
        validity of arguments rather than doing it here.
        validity of arguments rather than doing it here.
        * lex.c (cons_up_default_function): Remove code fooling with
        * lex.c (cons_up_default_function): Remove code fooling with
        processing_specialization, processing_explicit_instantiation
        processing_specialization, processing_explicit_instantiation
        flags, as that is now done in {maybe_push_top,pop_from}_top_level.
        flags, as that is now done in {maybe_push_top,pop_from}_top_level.
        * method.c (build_overload_identifier): Mangle local classes in
        * method.c (build_overload_identifier): Mangle local classes in
        template functions correctly.
        template functions correctly.
        * parse.y (finish_member_template_decl): Move to pt.c.
        * parse.y (finish_member_template_decl): Move to pt.c.
        * pt.c (finish_member_template_decl): Moved here from parse.y.
        * pt.c (finish_member_template_decl): Moved here from parse.y.
        (print_candidates): New function.
        (print_candidates): New function.
        (determine_specialization): Change interface.  Properly look for
        (determine_specialization): Change interface.  Properly look for
        most specialized versions of template candidates.
        most specialized versions of template candidates.
        (check_explicit_specialization): Fully process explicit
        (check_explicit_specialization): Fully process explicit
        instantiations.
        instantiations.
        (push_template_decl): Avoid looking at CLASSTYPE fields in
        (push_template_decl): Avoid looking at CLASSTYPE fields in
        FUNCTION_DECLS.
        FUNCTION_DECLS.
        (determine_overloaded_function): Remove.
        (determine_overloaded_function): Remove.
        (convert_nontype_argument): Change name from
        (convert_nontype_argument): Change name from
        convert_nontype_parameter.  Use determine_overloaded_function
        convert_nontype_parameter.  Use determine_overloaded_function
        instead of instantiate_type.
        instead of instantiate_type.
        (mangle_class_name_for_template): Handle type contexts as well as
        (mangle_class_name_for_template): Handle type contexts as well as
        function contexts.
        function contexts.
        (classtype_mangled_name): Likewise.
        (classtype_mangled_name): Likewise.
        (lookup_template_class): Likewise.
        (lookup_template_class): Likewise.
        (tsubst): Likewise.
        (tsubst): Likewise.
        (more_specialized): Take explicit template arguments as a
        (more_specialized): Take explicit template arguments as a
        parameter.
        parameter.
        (most_specialized): Likewise.
        (most_specialized): Likewise.
        (get_bindings): Likewise.  Check that return types match before
        (get_bindings): Likewise.  Check that return types match before
        proclaiming a function a match.
        proclaiming a function a match.
        (do_decl_instantiation): Remove code searching for function to
        (do_decl_instantiation): Remove code searching for function to
        instantiate; that is now done in check_explicit_specialization.
        instantiate; that is now done in check_explicit_specialization.
        (add_maybe_template): Pass extra argument to get_bindings.
        (add_maybe_template): Pass extra argument to get_bindings.
        * tree.c (really_overloaded_fn): Use is_overloaded_fn to simplify
        * tree.c (really_overloaded_fn): Use is_overloaded_fn to simplify
        implementation.
        implementation.
        * typeck.c (build_component_ref): Check for invalid arguments.
        * typeck.c (build_component_ref): Check for invalid arguments.
Tue Jan 27 01:44:02 1998  Jason Merrill  
Tue Jan 27 01:44:02 1998  Jason Merrill  
        * expr.c (cplus_expand_expr, AGGR_INIT_EXPR): Don't check that
        * expr.c (cplus_expand_expr, AGGR_INIT_EXPR): Don't check that
        return_target and call_target are equivalent.
        return_target and call_target are equivalent.
        * pt.c (type_unification_real): Just accept function parms that
        * pt.c (type_unification_real): Just accept function parms that
        don't use any template parms.
        don't use any template parms.
Sun Jan 25 03:30:00 1998  Jason Merrill  
Sun Jan 25 03:30:00 1998  Jason Merrill  
        * decl.c (cp_finish_decl): When bailing on a comdat variable, also
        * decl.c (cp_finish_decl): When bailing on a comdat variable, also
        unset DECL_NOT_REALLY_EXTERN.
        unset DECL_NOT_REALLY_EXTERN.
        * parse.y (typename_sub*): Fix std::.
        * parse.y (typename_sub*): Fix std::.
Sat Jan 24 12:13:54 1998  Jason Merrill  
Sat Jan 24 12:13:54 1998  Jason Merrill  
        * error.c (dump_decl): Fix type default template args.
        * error.c (dump_decl): Fix type default template args.
        (dump_type): Hand TEMPLATE_DECL off to dump_decl.
        (dump_type): Hand TEMPLATE_DECL off to dump_decl.
Fri Jan 23 18:34:37 1998  Mumit Khan  
Fri Jan 23 18:34:37 1998  Mumit Khan  
        * lex.c (DIR_SEPARATOR): Define to be '/' if not already defined.
        * lex.c (DIR_SEPARATOR): Define to be '/' if not already defined.
        (file_name_nondirectory): Use.
        (file_name_nondirectory): Use.
Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  
Wed Jan 21 10:29:57 1998  Kriang Lerdsuwanakij  
        * pt.c (coerce_template_parms): Don't access elements of ARGLIST
        * pt.c (coerce_template_parms): Don't access elements of ARGLIST
        that are not really present.  Substitute default arguments in
        that are not really present.  Substitute default arguments in
        template template arguments.  Correctly convert TEMPLATE_DECL to
        template template arguments.  Correctly convert TEMPLATE_DECL to
        TEMPLATE_TEMPLATE_PARM.
        TEMPLATE_TEMPLATE_PARM.
        (comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM
        (comp_template_args): TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM
        are no longer treated specially here.
        are no longer treated specially here.
        * parse.y (template_template_parm): Fix copy error.
        * parse.y (template_template_parm): Fix copy error.
        * decl.c (grokdeclarator): Warn about missing `typename' for nested
        * decl.c (grokdeclarator): Warn about missing `typename' for nested
        type created from template template parameters.
        type created from template template parameters.
        * parse.y (bad_parm): Likewise
        * parse.y (bad_parm): Likewise
        * class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
        * class.c (finish_struct): Handle TEMPLATE_TEMPLATE_PARM.
        (push_nested_class): Likewise.
        (push_nested_class): Likewise.
        * cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
        * cp-tree.def (TEMPLATE_TEMPLATE_PARM): New tree code.
        * cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
        * cp-tree.h (DECL_TEMPLATE_TEMPLATE_PARM_P): New macro.
        (copy_template_template_parm): Declare.
        (copy_template_template_parm): Declare.
        * decl.c (arg_looking_for_template): New variable.
        * decl.c (arg_looking_for_template): New variable.
        (lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
        (lookup_name_real): Handle TEMPLATE_TEMPLATE_PARM.
        Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
        Try to return TEMPLATE_DECL or TEMPLATE_TEMPLATE_PARM
        node if arg_looking_for_template is nonzero.
        node if arg_looking_for_template is nonzero.
        (pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
        (pushdecl): Handle TEMPLATE_TEMPLATE_PARM.
        (grok_op_properties, xref_tag, xref_basetypes): Likewise.
        (grok_op_properties, xref_tag, xref_basetypes): Likewise.
        (grokdeclarator): Handle TEMPLATE_DECL.
        (grokdeclarator): Handle TEMPLATE_DECL.
        * decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
        * decl2.c (constructor_name_full): Handle TEMPLATE_TEMPLATE_PARM.
        * error.c (dump_type): Add TEMPLATE_DECL and 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_type_prefix, dump_type_suffix): Handle TEMPLATE_TEMPLATE_PARM.
        (dump_decl): Handle unnamed template type parameters.
        (dump_decl): Handle unnamed template type parameters.
        Handle template template parameters.
        Handle template template parameters.
        (dump_function_name): Handle template template parameters.
        (dump_function_name): Handle template template parameters.
        * init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef):
        * init.c (is_aggr_typedef, is_aggr_type, get_aggr_from_typedef):
        Handle TEMPLATE_TEMPLATE_PARM.
        Handle TEMPLATE_TEMPLATE_PARM.
        * method.c (build_template_template_parm_names): New function.
        * method.c (build_template_template_parm_names): New function.
        (build_template_parm_names): Handle TEMPLATE_DECL.
        (build_template_parm_names): Handle TEMPLATE_DECL.
        (build_overload_nested_name, build_overload_name):
        (build_overload_nested_name, build_overload_name):
        Handle TEMPLATE_TEMPLATE_PARM.
        Handle TEMPLATE_TEMPLATE_PARM.
        * parse.y (maybe_identifier): New nonterminal.
        * parse.y (maybe_identifier): New nonterminal.
        (template_type_parm): Use it.
        (template_type_parm): Use it.
        (template_template_parm, template_arg1): New nonterminal.
        (template_template_parm, template_arg1): New nonterminal.
        (template_parm): Add template_template_parm rules.
        (template_parm): Add template_template_parm rules.
        (template_arg): Set processing_template_arg.
        (template_arg): Set processing_template_arg.
        (template_arg1): Rules moved from template_arg.
        (template_arg1): Rules moved from template_arg.
        (primary, nonnested_type): Set arg_looking_for_template if we are
        (primary, nonnested_type): Set arg_looking_for_template if we are
        processing template arguments.
        processing template arguments.
        * pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
        * pt.c (begin_member_template_processing): Handle TEMPLATE_DECL.
        (process_template_parm): Handle template template parameters.
        (process_template_parm): Handle template template parameters.
        (coerce_template_parms, comp_template_args): Likewise.
        (coerce_template_parms, comp_template_args): Likewise.
        (mangle_class_name_for_template, lookup_template_class): Likewise.
        (mangle_class_name_for_template, lookup_template_class): Likewise.
        (uses_template_parms): Handle TEMPLATE_DECL and
        (uses_template_parms): Handle TEMPLATE_DECL and
        TEMPLATE_TEMPLATE_PARM.
        TEMPLATE_TEMPLATE_PARM.
        (current_template_args): Handle TEMPLATE_DECL.
        (current_template_args): Handle TEMPLATE_DECL.
        (tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
        (tsubst, tsubst_copy, unify): Handle TEMPLATE_TEMPLATE_PARM.
        * search.c (dfs_walk, dfs_record_inheritance):
        * search.c (dfs_walk, dfs_record_inheritance):
        Handle TEMPLATE_TEMPLATE_PARM.
        Handle TEMPLATE_TEMPLATE_PARM.
        * tree.c (copy_template_template_parm): New function.
        * tree.c (copy_template_template_parm): New function.
        (mapcar): Handle TEMPLATE_TEMPLATE_PARM.
        (mapcar): Handle TEMPLATE_TEMPLATE_PARM.
        * typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.
        * typeck.c (comptypes): Handle TEMPLATE_TEMPLATE_PARM.
Mon Jan 19 22:40:03 1998  Mark Mitchell  
Mon Jan 19 22:40:03 1998  Mark Mitchell  
        * decl.c (start_decl): Don't allow duplicate definitions of static
        * decl.c (start_decl): Don't allow duplicate definitions of static
        data members.
        data members.
        * call.c (build_user_type_conversion_1): Handle user-defined
        * call.c (build_user_type_conversion_1): Handle user-defined
        template conversion operators correctly.
        template conversion operators correctly.
        * decl2.c (build_expr_from_tree): Issue an error message if the
        * decl2.c (build_expr_from_tree): Issue an error message if the
        object in a COMPONENT_REF is a TEMPLATE_DECL.
        object in a COMPONENT_REF is a TEMPLATE_DECL.
        * typeck.c (incomplete_type_error): Handle TEMPLATE_TYPE_PARMs.
        * typeck.c (incomplete_type_error): Handle TEMPLATE_TYPE_PARMs.
        * class.c (is_local_class): New function.
        * class.c (is_local_class): New function.
        * cp-tree.h (is_local_class): Declare it.
        * cp-tree.h (is_local_class): Declare it.
        (last_tree): Likewise.
        (last_tree): Likewise.
        (begin_tree): Likewise.
        (begin_tree): Likewise.
        (end_tree): Likewise.
        (end_tree): Likewise.
        (lookup_template_class): Change prototype.
        (lookup_template_class): Change prototype.
        * decl.c (cp_finish_decl): Check for NULL where necessary.
        * decl.c (cp_finish_decl): Check for NULL where necessary.
        Consider FUNCTION_DECLS to declare objects with top-level binding,
        Consider FUNCTION_DECLS to declare objects with top-level binding,
        when calling make_decl_rtl.
        when calling make_decl_rtl.
        (grokdeclarator): Give members of local classes internal linkage.
        (grokdeclarator): Give members of local classes internal linkage.
        (start_function): Remove declaration of last_tree.
        (start_function): Remove declaration of last_tree.
        (finish_function): Set flag_keep_inline_functions around call to
        (finish_function): Set flag_keep_inline_functions around call to
        rest_of_compilation if we are processing a member function in a
        rest_of_compilation if we are processing a member function in a
        local class.
        local class.
        (start_method): Call push_template_decl for member functions of
        (start_method): Call push_template_decl for member functions of
        local classes in template functions.
        local classes in template functions.
        * decl2.c (import_export_decl): Don't give external linkage to
        * decl2.c (import_export_decl): Don't give external linkage to
        instantiations of templates with internal linkage.
        instantiations of templates with internal linkage.
        * parse.y (last_tree): Remove declaration.
        * parse.y (last_tree): Remove declaration.
        (template_type): Pass extra parameter to lookup_template_class.
        (template_type): Pass extra parameter to lookup_template_class.
        (self_template_type): Likewise.
        (self_template_type): Likewise.
        (structsp): Move call to reset_specialization into left_curly.
        (structsp): Move call to reset_specialization into left_curly.
        (left_curly): Call reset_specialization, and begin_tree.
        (left_curly): Call reset_specialization, and begin_tree.
        * pt.c (saved_trees): New variable.
        * pt.c (saved_trees): New variable.
        (mangle_class_name_for_template): Change prototype.  Use
        (mangle_class_name_for_template): Change prototype.  Use
        additional function context to name local classes in templates
        additional function context to name local classes in templates
        correctly.
        correctly.
        (classtype_mangled_name): Pass the context.
        (classtype_mangled_name): Pass the context.
        (push_template_decl): Handle local classes and templates, and
        (push_template_decl): Handle local classes and templates, and
        member functions for such classes.
        member functions for such classes.
        (convert_nontype_parameter): Fix handling of pointer-to-member
        (convert_nontype_parameter): Fix handling of pointer-to-member
        constants.
        constants.
        (lookup_template_class): Handle local classes in templates.
        (lookup_template_class): Handle local classes in templates.
        (tsubst): Likewise.  Don't assume that template instantiations
        (tsubst): Likewise.  Don't assume that template instantiations
        have external linkage; pay attention to the template declaration.
        have external linkage; pay attention to the template declaration.
        (mark_decl_instantiated): Likewise.
        (mark_decl_instantiated): Likewise.
        (begin_tree): New function.
        (begin_tree): New function.
        (end_tree): Likewise.
        (end_tree): Likewise.
        * decl.c (xref_basetypes): Don't call complete_type for basetypes
        * decl.c (xref_basetypes): Don't call complete_type for basetypes
        that involve template parameters; that can lead to infinite
        that involve template parameters; that can lead to infinite
        recursion unnecessarily.
        recursion unnecessarily.
        * pt.c (register_specialization): Do not register specializations
        * pt.c (register_specialization): Do not register specializations
        that aren't ready to be registered yet.
        that aren't ready to be registered yet.
        (check_explicit_specialization): Handle explicit specialization of
        (check_explicit_specialization): Handle explicit specialization of
        constructors and destructors.
        constructors and destructors.
        (build_template_decl): New function.
        (build_template_decl): New function.
        (push_template_delc): Handle out-of-class specializations of
        (push_template_delc): Handle out-of-class specializations of
        member templates.
        member templates.
        * pt.c (check_explicit_specialization): Set up the template
        * pt.c (check_explicit_specialization): Set up the template
        information before registering the specialization.
        information before registering the specialization.
        (coerce_template_parms): Fix thinko.
        (coerce_template_parms): Fix thinko.
        (tsubst): Handle specializations of member templates correctly.
        (tsubst): Handle specializations of member templates correctly.
        * class.c (finish_struct_methods): Remove calls to
        * class.c (finish_struct_methods): Remove calls to
        check_explicit_specialization from here.
        check_explicit_specialization from here.
        (finish_struct): And insert them here.
        (finish_struct): And insert them here.
        * cp-tree.h (perform_qualification_conversions): New function.
        * cp-tree.h (perform_qualification_conversions): New function.
        (perform_array_to_pointer_conversion): Likewise.
        (perform_array_to_pointer_conversion): Likewise.
        (begin_explicit_instantiation): Likewise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (determine_specialization): Renamed from
        (determine_specialization): Renamed from
        determine_explicit_specialization.
        determine_explicit_specialization.
        (comp_template_parms): New function.
        (comp_template_parms): New function.
        (processing_explicit_instantiation): New variable.
        (processing_explicit_instantiation): New variable.
        * cvt.c (perform_qualification_conversions): New function.
        * cvt.c (perform_qualification_conversions): New function.
        (perform_array_to_pointer_conversion): Likewise.
        (perform_array_to_pointer_conversion): Likewise.
        * decl.c (duplicate_decls): Don't consider template functions
        * decl.c (duplicate_decls): Don't consider template functions
        alike unless they have the same parameters.  Refine handling of
        alike unless they have the same parameters.  Refine handling of
        instantiation/specialization mismatches.
        instantiation/specialization mismatches.
        (start_decl): Don't call pushdecl for template specializations,
        (start_decl): Don't call pushdecl for template specializations,
        since they don't affect overloading.
        since they don't affect overloading.
        (start_function): Likewise.
        (start_function): Likewise.
        (grokfndecl): Call check_explicit_specialization a little later.
        (grokfndecl): Call check_explicit_specialization a little later.
        Don't call duplicate_decls for memberm template specializations.
        Don't call duplicate_decls for memberm template specializations.
        (grokdeclarator): Don't update template_count for classes that are
        (grokdeclarator): Don't update template_count for classes that are
        themselves specializations.  Remove use of `2' as parameter to
        themselves specializations.  Remove use of `2' as parameter to
        grokfndecl since that value isn't used.
        grokfndecl since that value isn't used.
        * lex.c (cons_up_default_function): Save and restore
        * lex.c (cons_up_default_function): Save and restore
        processing_explicit_instantiation around calls to grokfield.
        processing_explicit_instantiation around calls to grokfield.
        * parse.y (finish_member_template_decl): New function.
        * parse.y (finish_member_template_decl): New function.
        (component_decl_1): Use it.
        (component_decl_1): Use it.
        (fn.def2): Likewise.
        (fn.def2): Likewise.
        (template_arg_list_opt): New nonterminal.
        (template_arg_list_opt): New nonterminal.
        (template_type): Use it.
        (template_type): Use it.
        (self_template_type): Likewise.
        (self_template_type): Likewise.
        (template_id): Likewise.
        (template_id): Likewise.
        (object_template_id): Likewise.
        (object_template_id): Likewise.
        (notype_template_declarator): Likwise.
        (notype_template_declarator): Likwise.
        (begin_explicit_instantiation): Likewise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (explicit_instantiation): Use them.
        (explicit_instantiation): Use them.
        * pt.c (coerce_template_parms): Add parameters.
        * pt.c (coerce_template_parms): Add parameters.
        (processing_explicit_instantiation): New variable.
        (processing_explicit_instantiation): New variable.
        (convert_nontype_parameter): New function.
        (convert_nontype_parameter): New function.
        (determine_overloaded_function): Likewise.
        (determine_overloaded_function): Likewise.
        (begin_explicit_instantiation): Likewise.
        (begin_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (end_explicit_instantiation): Likewise.
        (retrieve_specialization): Likewise.
        (retrieve_specialization): Likewise.
        (register_specialization): Likewise.
        (register_specialization): Likewise.
        (processing_explicit_specialization): Removed.
        (processing_explicit_specialization): Removed.
        (determine_specialization): Handle specializations of member
        (determine_specialization): Handle specializations of member
        functions of template class instantiations.
        functions of template class instantiations.
        (check_explicit_specialization): Refine to conform to standard.
        (check_explicit_specialization): Refine to conform to standard.
        (comp_template_parms): New function.
        (comp_template_parms): New function.
        (coerce_template_parms): Call convert_nontype_parameter.
        (coerce_template_parms): Call convert_nontype_parameter.
        (tsubst): Refine handling of member templates.  Use
        (tsubst): Refine handling of member templates.  Use
        register_specialization.
        register_specialization.
        (instantiate_template): Use retrieve_specialization.
        (instantiate_template): Use retrieve_specialization.
        (do_decl_instantiation): Likewise.
        (do_decl_instantiation): Likewise.
        (instantiate_decl): Likewise.
        (instantiate_decl): Likewise.
        (type_unification): Improve handling of explicit template
        (type_unification): Improve handling of explicit template
        arguments.
        arguments.
        * tree.c (mapcar): Return error_mark_node, rather than aborting,
        * tree.c (mapcar): Return error_mark_node, rather than aborting,
        on VAR_DECLS, FUNCTION_DECLS, and CONST_DECLS.
        on VAR_DECLS, FUNCTION_DECLS, and CONST_DECLS.
        * typeck.c (build_unary_op): Call determine_specialization, rather
        * typeck.c (build_unary_op): Call determine_specialization, rather
        than determine_explicit_specialization.
        than determine_explicit_specialization.
Mon Jan 19 13:18:51 1998  Jason Merrill  
Mon Jan 19 13:18:51 1998  Jason Merrill  
        * cvt.c (build_up_reference): A TARGET_EXPR has side effects.
        * cvt.c (build_up_reference): A TARGET_EXPR has side effects.
Fri Jan 16 11:40:50 1998  Bruno Haible  
Fri Jan 16 11:40:50 1998  Bruno Haible  
        * error.c (dump_decl): For enum tags, output the tag, not its value.
        * error.c (dump_decl): For enum tags, output the tag, not its value.
1998-01-13  Brendan Kehoe  
1998-01-13  Brendan Kehoe  
        * decl.c (init_decl_processing): Only call init_rtti_processing
        * decl.c (init_decl_processing): Only call init_rtti_processing
        FLAG_RTTI is set.
        FLAG_RTTI is set.
Mon Jan 12 01:35:18 1998  Jason Merrill  
Mon Jan 12 01:35:18 1998  Jason Merrill  
        * init.c (build_new_1): Split out from build_new.
        * init.c (build_new_1): Split out from build_new.
        (build_new): Just return a NEW_EXPR.
        (build_new): Just return a NEW_EXPR.
        * expr.c (cplus_expand_expr): Handle NEW_EXPR.
        * expr.c (cplus_expand_expr): Handle NEW_EXPR.
        * decl2.c (get_temp_regvar): Tweak.
        * decl2.c (get_temp_regvar): Tweak.
        * cp-tree.h (TREE_CALLS_NEW): Comment out.
        * cp-tree.h (TREE_CALLS_NEW): Comment out.
        * class.c (resolves_to_fixed_type_p): Remove use.
        * class.c (resolves_to_fixed_type_p): Remove use.
        * method.c (build_opfncall): Likewise.
        * method.c (build_opfncall): Likewise.
        * call.c (build_new_op): Likewise.
        * call.c (build_new_op): Likewise.
Wed Jan  7 23:47:13 1998  Jason Merrill  
Wed Jan  7 23:47:13 1998  Jason Merrill  
        * exception.cc (__eh_alloc, __eh_free): New fns.
        * exception.cc (__eh_alloc, __eh_free): New fns.
        (__cp_push_exception, __cp_pop_exception): Use them.
        (__cp_push_exception, __cp_pop_exception): Use them.
        (__uncatch_exception): Call terminate here if no exception.
        (__uncatch_exception): Call terminate here if no exception.
        * except.c (build_terminate_handler): New fn.
        * except.c (build_terminate_handler): New fn.
        (expand_start_catch_block): Use it.
        (expand_start_catch_block): Use it.
        (expand_exception_blocks): Likewise.
        (expand_exception_blocks): Likewise.
        (alloc_eh_object): New fn.
        (alloc_eh_object): New fn.
        (expand_throw): Use it.  Protect exception init with terminate.
        (expand_throw): Use it.  Protect exception init with terminate.
        * typeck.c (build_modify_expr): Remove code that ignores trivial
        * typeck.c (build_modify_expr): Remove code that ignores trivial
        methods.
        methods.


Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
notice and this notice are preserved.
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.