OSDN Git Service

91th Cygnus<->FSF merge
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Apr 1997 22:39:53 +0000 (22:39 +0000)
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Apr 1997 22:39:53 +0000 (22:39 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@13971 138bc75d-0d04-0410-961f-82ee72b054a4

18 files changed:
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/cvt.c
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/except.c
gcc/cp/exception.cc
gcc/cp/init.c
gcc/cp/lang-options.h
gcc/cp/method.c
gcc/cp/pt.c
gcc/cp/spew.c
gcc/cp/tinfo2.cc
gcc/cp/tree.c
gcc/cp/typeck.c

index d945770..2f9b6e2 100644 (file)
@@ -1,7 +1,100 @@
+Wed Apr 23 14:43:06 1997  Mike Stump  <mrs@cygnus.com>
+
+       * init.c (init_decl_processing): Add supoprt for setjmp/longjmp based
+       exception handling.
+       * except.c (init_exception_processing): Likewise.
+       (expand_end_catch_block): Likewise.
+       (expand_exception_blocks): Likewise.
+       (expand_throw): Likewise.
+       * exception.cc (__default_terminate): Likewise.
+
+       * init.c (perform_member_init): Use new method of expr level
+       cleanups, instead of cleanups_this_call and friends.
+       (emit_base_init): Likewise.
+       (expand_aggr_vbase_init_1): Likewise.
+       (expand_vec_init): Likewise.
+       * decl.c (cp_finish_decl): Likewise.
+       (expand_static_init): Likewise.
+       (store_parm_decls): Likewise.
+       (cplus_expand_expr_stmt): Likewise.
+       * decl2.c (finish_file): Likewise.
+       
+       * Make-lang.in (exception.o): Ok to compile with -O now.
+
+       * decl.c (maybe_build_cleanup_1): We no longer have to unsave, as
+       we know it will be done later by the backend.
+
+       * decl2.c (lang_f_options): Remove support for short temps.
+       * lang-options.h: Likewise.
+       
+Wed Apr 23 04:12:06 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * tree.c (varargs_function_p): New fn.
+       * method.c (emit_thunk): Replace broken generic code with code to
+       generate a heavyweight thunk function.
+
+Tue Apr 22 02:45:18 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * pt.c (process_template_parm): pedwarn about floating-point parms.
+
+       * decl.c (grokdeclarator): inline no longer implies static.
+
+       * spew.c (yylex): Always return the TYPE_DECL if we got a scope.
+
+Mon Apr 21 15:42:27 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * class.c (check_for_override): The signature of an overriding
+       function is not changed.
+
+       * call.c (build_over_call): Move setting of conv into the loop.
+
+Sun Apr 20 16:24:29 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (build_user_type_conversion_1): Really ignore rvalue
+       conversions when looking for a REFERENCE_TYPE.
+
+       * cvt.c (build_up_reference): Eviscerate, use build_unary_op.
+       * cp-tree.h (TREE_REFERENCE_EXPR): #if 0.
+       * typeck.c (decay_conversion): Don't set TREE_REFERENCE_EXPR.
+       (build_unary_op): Likewise.
+       * call.c (build_over_call): See through a CONVERT_EXPR around the
+       ADDR_EXPR for on a temporary.
+       * typeck.c (c_expand_return): See through a CONVERT_EXPR around
+       the ADDR_EXPR for a local variable.
+
+Fri Apr 18 12:11:33 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (build_user_type_conversion_1): If we're trying to
+       convert to a REFERENCE_TYPE, only consider lvalue conversions.
+       (build_new_function_call): Print candidates.
+       (implicit_conversion): Try a temp binding if the lvalue conv is BAD.
+       (reference_binding): Binding a temporary of a reference-related type
+       is BAD.
+
+Thu Apr 17 14:37:22 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
+
+       * inc/typeinfo (type_info::before): Add cv-qualifier-seq.
+       * tinfo2.cc (type_info::before): Likewise.
+
+Mon Apr 14 12:38:17 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (implicit_conversion): Oops.
+
+Fri Apr 11 02:18:30 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (implicit_conversion): Try to find a reference conversion
+       before binding a const reference to a temporary.
+
+Wed Apr  2 12:51:36 1997  Mike Stump  <mrs@cygnus.com>
+
+       * exception.cc (__default_unexpected): Call terminate by default,
+       so that if the user overrides terminate, the correct function will
+       be called.
+       
 Wed Mar 19 14:14:45 1997  Mike Stump  <mrs@cygnus.com>
 
        * parse.y (left_curly): Avoid trying to use any fields of
 Wed Mar 19 14:14:45 1997  Mike Stump  <mrs@cygnus.com>
 
        * parse.y (left_curly): Avoid trying to use any fields of
-       error_mark_node, as there aren't any.
+       error_mark_node, as there aren't any.
 
 Thu Mar 13 16:33:22 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Mar 13 16:33:22 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -10,7 +103,7 @@ Thu Mar 13 16:33:22 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 Wed Mar 12 13:55:10 1997  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>
 
 
 Wed Mar 12 13:55:10 1997  Hans-Peter Nilsson  <Hans-Peter.Nilsson@axis.se>
 
-        * call.c (add_template_candidate): Initialize the variable "dummy".
+       * call.c (add_template_candidate): Initialize the variable "dummy".
 
 Mon Mar 10 15:13:14 1997  Brendan Kehoe  <brendan@canuck.cygnus.com>
 
 
 Mon Mar 10 15:13:14 1997  Brendan Kehoe  <brendan@canuck.cygnus.com>
 
@@ -156,7 +249,7 @@ Mon Mar  3 12:14:54 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Sun Mar  2 11:04:43 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_scoped_method_call): Complain if the scope isn't a
 Sun Mar  2 11:04:43 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_scoped_method_call): Complain if the scope isn't a
-       base.
+       base.
 
 Wed Feb 26 11:31:06 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Wed Feb 26 11:31:06 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -183,11 +276,11 @@ Mon Feb 24 15:00:12 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_field_call): Don't look for [cd]tor_identifier.
        * decl2.c (delete_sanity): Remove meaningless use of
 
        * call.c (build_field_call): Don't look for [cd]tor_identifier.
        * decl2.c (delete_sanity): Remove meaningless use of
-       LOOKUP_HAS_IN_CHARGE.
+       LOOKUP_HAS_IN_CHARGE.
        * decl.c (finish_function): Use build_scoped_method_call instead
        * decl.c (finish_function): Use build_scoped_method_call instead
-       of build_delete for running vbase dtors.
+       of build_delete for running vbase dtors.
        * init.c (build_delete): Call overload resolution code instead of
        * init.c (build_delete): Call overload resolution code instead of
-       duplicating it badly.
+       duplicating it badly.
 
 Thu Feb 20 15:12:15 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Feb 20 15:12:15 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -222,8 +315,8 @@ Fri Feb 14 16:57:05 1997  Mike Stump  <mrs@cygnus.com>
 Tue Feb 11 13:50:48 1997  Mike Stump  <mrs@cygnus.com>
 
        * new1.cc: Include a declaration for malloc, to avoid warning, and
 Tue Feb 11 13:50:48 1997  Mike Stump  <mrs@cygnus.com>
 
        * new1.cc: Include a declaration for malloc, to avoid warning, and
-       avoid lossing on systems that require one (ones that define malloc
-       in xm.h).
+       avoid lossing on systems that require one (ones that define malloc
+       in xm.h).
 
 Mon Feb 10 22:51:13 1997  Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
 
 
 Mon Feb 10 22:51:13 1997  Bruno Haible <bruno@linuix.mathematik.uni-karlsruhe.de>
 
@@ -237,7 +330,7 @@ Mon Feb 10 22:51:13 1997  Bruno Haible      <bruno@linuix.mathematik.uni-karlsruhe.de
 Fri Feb  7 15:43:34 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (xref_basetypes): Allow a base class that depends on
 Fri Feb  7 15:43:34 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (xref_basetypes): Allow a base class that depends on
-       template parms to be incomplete.
+       template parms to be incomplete.
 
        * decl2.c (build_expr_from_tree): Support typeid(type).
        * rtti.c (get_typeid): Support templates.
 
        * decl2.c (build_expr_from_tree): Support typeid(type).
        * rtti.c (get_typeid): Support templates.
@@ -253,8 +346,8 @@ Tue Feb  4 11:28:24 1997  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Feb  3 18:41:12 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst, case FUNCTION_DECL): Lose obsolete code that
 Mon Feb  3 18:41:12 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst, case FUNCTION_DECL): Lose obsolete code that
-       smashes together template and non-template decls of the same
-       signature.
+       smashes together template and non-template decls of the same
+       signature.
 
 Thu Jan 30 19:18:00 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Jan 30 19:18:00 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -320,8 +413,8 @@ Tue Jan 28 15:25:09 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Mon Jan 27 19:21:29 1997  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_throw): Don't expand the cleanup tree here,
 Mon Jan 27 19:21:29 1997  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_throw): Don't expand the cleanup tree here,
-       since we are not going to write the rtl out.  Fixes problem with
-       -g -O on SPARC.
+       since we are not going to write the rtl out.  Fixes problem with
+       -g -O on SPARC.
 
 Mon Jan 27 16:24:35 1997  Sean McNeil  <sean@mcneil.com>
 
 
 Mon Jan 27 16:24:35 1997  Sean McNeil  <sean@mcneil.com>
 
@@ -348,12 +441,12 @@ Sat Jan 25 08:50:03 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Fri Jan 24 17:52:54 1997  Mike Stump  <mrs@cygnus.com>
 
        * decl.c (duplicate_decls): pedwarn mismatched exception
 Fri Jan 24 17:52:54 1997  Mike Stump  <mrs@cygnus.com>
 
        * decl.c (duplicate_decls): pedwarn mismatched exception
-       specifications.
+       specifications.
 
 Thu Jan 23 18:18:54 1997  Mike Stump  <mrs@cygnus.com>
 
        * call.c (build_new_method_call): Don't display the invisible
 
 Thu Jan 23 18:18:54 1997  Mike Stump  <mrs@cygnus.com>
 
        * call.c (build_new_method_call): Don't display the invisible
-       argument for controlling virtual bases.
+       argument for controlling virtual bases.
 
 Thu Jan 23 16:48:10 1997  Mike Stump  <mrs@cygnus.com>
 
 
 Thu Jan 23 16:48:10 1997  Mike Stump  <mrs@cygnus.com>
 
@@ -372,25 +465,25 @@ Thu Jan 23 16:39:06 1997  Jason Merrill  <jason@yorick.cygnus.com>
        * lex.c (cons_up_default_function): Fix return type of synth op=.
 
        * init.c (emit_base_init): Add warnings for uninitialized members
        * lex.c (cons_up_default_function): Fix return type of synth op=.
 
        * init.c (emit_base_init): Add warnings for uninitialized members
-       and bases.
+       and bases.
 
        * decl.c (xref_basetypes): Add warning for non-polymorphic type
 
        * decl.c (xref_basetypes): Add warning for non-polymorphic type
-       with destructor used as base type.
+       with destructor used as base type.
 
        * decl.c (grok_op_properties): Add warning for op= returning void.
        * typeck.c (c_expand_return): Add warning for op= returning anything
        other than *this.
 
        * class.c (finish_struct_1): Add warning for class with pointers
 
        * decl.c (grok_op_properties): Add warning for op= returning void.
        * typeck.c (c_expand_return): Add warning for op= returning anything
        other than *this.
 
        * class.c (finish_struct_1): Add warning for class with pointers
-       but not copy ctor or copy op=.
+       but not copy ctor or copy op=.
 
        * cp-tree.h (TI_PENDING_TEMPLATE_FLAG): New macro.
        * pt.c (add_pending_template): Use it instead of LANG_FLAG_0.
        (instantiate_template): If -fexternal-templates, add this
 
        * cp-tree.h (TI_PENDING_TEMPLATE_FLAG): New macro.
        * pt.c (add_pending_template): Use it instead of LANG_FLAG_0.
        (instantiate_template): If -fexternal-templates, add this
-       instantiation to pending_templates.
+       instantiation to pending_templates.
 
        * decl2.c (copy_assignment_arg_p): Disable old hack to support
 
        * decl2.c (copy_assignment_arg_p): Disable old hack to support
-       Booch components.
+       Booch components.
 
 Tue Jan 21 18:32:04 1997  Mike Stump  <mrs@cygnus.com>
 
 
 Tue Jan 21 18:32:04 1997  Mike Stump  <mrs@cygnus.com>
 
@@ -399,7 +492,7 @@ Tue Jan 21 18:32:04 1997  Mike Stump  <mrs@cygnus.com>
 Mon Jan 20 17:59:51 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (standard_conversion): Handle getting references.  Tack
 Mon Jan 20 17:59:51 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (standard_conversion): Handle getting references.  Tack
-       on RVALUE_CONV here.  Do it for non-class types, too.
+       on RVALUE_CONV here.  Do it for non-class types, too.
        (reference_binding): Pass references to standard_conversion.
        (implicit_conversion): Likewise.
        (add_builtin_candidate): Disable one ?: kludge.
        (reference_binding): Pass references to standard_conversion.
        (implicit_conversion): Likewise.
        (add_builtin_candidate): Disable one ?: kludge.
@@ -415,10 +508,10 @@ Mon Jan 20 14:53:13 1997  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Mon Jan 20 14:43:49 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (finish_function): Also zero out DECL_INCOMING_RTL for
 Mon Jan 20 14:43:49 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (finish_function): Also zero out DECL_INCOMING_RTL for
-       the arguments.
+       the arguments.
 
        * error.c (dump_expr, TEMPLATE_CONST_PARM): Don't require
 
        * error.c (dump_expr, TEMPLATE_CONST_PARM): Don't require
-       current_template_parms.
+       current_template_parms.
 
 Fri Jan 17 10:25:42 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Fri Jan 17 10:25:42 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -476,17 +569,17 @@ Wed Jan  8 13:09:54 1997  Jason Merrill  <jason@yorick.cygnus.com>
        the correct order.
 
        * pt.c (instantiate_class_template): Don't initialize
        the correct order.
 
        * pt.c (instantiate_class_template): Don't initialize
-       BINFO_BASETYPES until the vector is filled out.
+       BINFO_BASETYPES until the vector is filled out.
        (unify): Don't abort on conflicting bindings, just fail.
        (instantiate_decl): Do push_tinst_level before any tsubsting.
 
        * method.c (build_overload_value): Handle getting a
        (unify): Don't abort on conflicting bindings, just fail.
        (instantiate_decl): Do push_tinst_level before any tsubsting.
 
        * method.c (build_overload_value): Handle getting a
-       TEMPLATE_CONST_PARM for a pointer.
+       TEMPLATE_CONST_PARM for a pointer.
 
 Tue Jan  7 14:00:58 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * init.c (expand_member_init): Don't give 'not a base' error for
 
 Tue Jan  7 14:00:58 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * init.c (expand_member_init): Don't give 'not a base' error for
-       templates.
+       templates.
 
        * pt.c (instantiate_decl): Call import_export_decl later.
 
 
        * pt.c (instantiate_decl): Call import_export_decl later.
 
@@ -511,7 +604,7 @@ Tue Dec 31 20:25:50 1996  Mike Stump  <mrs@cygnus.com>
 Tue Dec 31 15:16:56 1996  Mike Stump  <mrs@cygnus.com>
 
        * init.c (perform_member_init): Make sure the partial EH cleanups
 Tue Dec 31 15:16:56 1996  Mike Stump  <mrs@cygnus.com>
 
        * init.c (perform_member_init): Make sure the partial EH cleanups
-       live on the function_obstack.
+       live on the function_obstack.
 
 Fri Dec 27 10:31:40 1996  Paul Eggert  <eggert@twinsun.com>
 
 
 Fri Dec 27 10:31:40 1996  Paul Eggert  <eggert@twinsun.com>
 
@@ -590,8 +683,8 @@ Thu Dec  5 02:11:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Tue Dec  3 23:18:37 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (grok_x_components): Remove synthesized methods from
 Tue Dec  3 23:18:37 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (grok_x_components): Remove synthesized methods from
-       TYPE_METHODS of an anonymous union, complain about member
-       functions.
+       TYPE_METHODS of an anonymous union, complain about member
+       functions.
        * decl.c (shadow_tag): Wipe out memory of synthesized methods in
        anonymous unions.
        (finish_function): Just clear the DECL_RTL of our arguments.
        * decl.c (shadow_tag): Wipe out memory of synthesized methods in
        anonymous unions.
        (finish_function): Just clear the DECL_RTL of our arguments.
@@ -606,7 +699,7 @@ Fri Nov 29 21:54:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Wed Nov 27 14:47:15 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (build_component_ref): Don't die if COMPONENT isn't a
 Wed Nov 27 14:47:15 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (build_component_ref): Don't die if COMPONENT isn't a
-       IDENTIFIER_NODE.
+       IDENTIFIER_NODE.
 
 Wed Nov 27 16:05:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
 
 Wed Nov 27 16:05:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
@@ -646,9 +739,9 @@ Thu Nov 21 16:30:24 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Wed Nov 20 18:47:31 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * g++.c (main): Make sure arglist has a final NULL entry.  Add
 Wed Nov 20 18:47:31 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * g++.c (main): Make sure arglist has a final NULL entry.  Add
-       PEXECUTE_LAST to the flags passed to pexecute, as otherwise
-       stdin/stdout of the invoked program are redirected to
-       nowheresville.
+       PEXECUTE_LAST to the flags passed to pexecute, as otherwise
+       stdin/stdout of the invoked program are redirected to
+       nowheresville.
 
 Tue Nov 19 16:12:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Tue Nov 19 16:12:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -673,7 +766,7 @@ Mon Nov 18 17:05:26 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Nov 18 16:10:43 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Avoid thinking a POINTER_TYPE
 Mon Nov 18 16:10:43 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Avoid thinking a POINTER_TYPE
-       (METHOD_TYPE) is a TYPE_PTRMEMFUNC_P.
+       (METHOD_TYPE) is a TYPE_PTRMEMFUNC_P.
 
 Thu Nov 14 23:18:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Nov 14 23:18:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -682,7 +775,7 @@ Thu Nov 14 23:18:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * decl2.c (finish_vtable_vardecl): Likewise.
        * decl.c (pushtag, finish_enum): Likewise.
        * lex.c (check_newline): Use debug_* instead of calling *out
        * decl2.c (finish_vtable_vardecl): Likewise.
        * decl.c (pushtag, finish_enum): Likewise.
        * lex.c (check_newline): Use debug_* instead of calling *out
-       functions directly.
+       functions directly.
 
 Thu Nov 14 15:21:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Thu Nov 14 15:21:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -692,12 +785,12 @@ Thu Nov 14 15:21:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Wed Nov 13 12:32:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): A class has a non-trivial copy
 Wed Nov 13 12:32:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): A class has a non-trivial copy
-       constructor if it has virtual functions.
+       constructor if it has virtual functions.
 
        * cvt.c (cp_convert): Always call a constructor.
 
        * call.c (reference_binding): Still tack on a REF_BIND
 
        * cvt.c (cp_convert): Always call a constructor.
 
        * call.c (reference_binding): Still tack on a REF_BIND
-       for bad conversions.
+       for bad conversions.
        (build_user_type_conversion_1): Propagate ICS_BAD_FLAG.
 
        * typeck.c (convert_arguments): Pass LOOKUP_ONLYCONVERTING.
        (build_user_type_conversion_1): Propagate ICS_BAD_FLAG.
 
        * typeck.c (convert_arguments): Pass LOOKUP_ONLYCONVERTING.
@@ -820,14 +913,14 @@ Fri Nov  8 17:38:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * search.c (note_debug_info_needed): Don't do anything if we're in a 
        template.
        * method.c (synthesize_method): For non-local classes,
        * search.c (note_debug_info_needed): Don't do anything if we're in a 
        template.
        * method.c (synthesize_method): For non-local classes,
-       push_to_top_level first.
+       push_to_top_level first.
 
 Fri Nov  8 11:52:28 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (get_delta_difference): Add no_error parameter.
        (build_ptrmemfunc): Call get_delta_difference with no_error set;
 
 Fri Nov  8 11:52:28 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (get_delta_difference): Add no_error parameter.
        (build_ptrmemfunc): Call get_delta_difference with no_error set;
-       we don't want error messages when converting unrelated
-       pointer-to-member functions.
+       we don't want error messages when converting unrelated
+       pointer-to-member functions.
 
 Thu Nov  7 11:16:24 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Thu Nov  7 11:16:24 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -837,7 +930,7 @@ Thu Nov  7 11:16:24 1996  Mike Stump  <mrs@cygnus.com>
 Tue Nov  5 17:12:05 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Move code for conversions from
 Tue Nov  5 17:12:05 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Move code for conversions from
-       (::*)() to void* or (*)() up a bit, so that we can convert from
+       (::*)() to void* or (*)() up a bit, so that we can convert from
        METHOD_TYPEs as well.
 
 Tue Nov  5 14:54:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
        METHOD_TYPEs as well.
 
 Tue Nov  5 14:54:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
@@ -870,7 +963,7 @@ Fri Nov  1 08:53:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h (DIRECT_BIND): Change from INDIRECT_BIND.
        * decl.c (grok_reference_init): Pass DIRECT_BIND.
        * cvt.c (build_up_reference): Don't mark 'this' addressable.  Use
        * cp-tree.h (DIRECT_BIND): Change from INDIRECT_BIND.
        * decl.c (grok_reference_init): Pass DIRECT_BIND.
        * cvt.c (build_up_reference): Don't mark 'this' addressable.  Use
-       DIRECT_BIND.
+       DIRECT_BIND.
        * call.c (convert_like): Don't pass INDIRECT_BIND.
        * typeck.c (convert_arguments): Likewise.
        * typeck.c (mark_addressable): Allow &this if flag_this_is_variable.
        * call.c (convert_like): Don't pass INDIRECT_BIND.
        * typeck.c (convert_arguments): Likewise.
        * typeck.c (mark_addressable): Allow &this if flag_this_is_variable.
@@ -878,7 +971,7 @@ Fri Nov  1 08:53:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Oct 31 17:08:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (mark_addressable): Support TARGET_EXPR, unify with
 Thu Oct 31 17:08:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (mark_addressable): Support TARGET_EXPR, unify with
-       similar code in build_up_ref.
+       similar code in build_up_ref.
        * cvt.c (build_up_reference): Drastically simplify.
 
 Mon Oct 28 12:45:05 1996  Jeffrey A Law  (law@cygnus.com)
        * cvt.c (build_up_reference): Drastically simplify.
 
 Mon Oct 28 12:45:05 1996  Jeffrey A Law  (law@cygnus.com)
@@ -886,8 +979,8 @@ Mon Oct 28 12:45:05 1996  Jeffrey A Law  (law@cygnus.com)
        * typeck.c (signed_or_unsigned_type): If the given type already
        as the correct signedness, then just return it.
 
        * typeck.c (signed_or_unsigned_type): If the given type already
        as the correct signedness, then just return it.
 
-        * typeck.c ({un,}signed_type): If can't do anything, call
-        signed_or_unsigned_type.
+       * typeck.c ({un,}signed_type): If can't do anything, call
+       signed_or_unsigned_type.
 
 Thu Oct 24 14:21:59 1996  Bob Manson  <manson@charmed.cygnus.com>
 
 
 Thu Oct 24 14:21:59 1996  Bob Manson  <manson@charmed.cygnus.com>
 
@@ -897,7 +990,7 @@ Thu Oct 24 14:21:59 1996  Bob Manson  <manson@charmed.cygnus.com>
 Wed Oct 23 00:43:10 1996  Jason Merrill  <jason@gerbil.cygnus.com>
 
        * class.c (finish_struct_1): Avoid empty structs by adding a field
 Wed Oct 23 00:43:10 1996  Jason Merrill  <jason@gerbil.cygnus.com>
 
        * class.c (finish_struct_1): Avoid empty structs by adding a field
-       so layout_type gets the mode right.
+       so layout_type gets the mode right.
 
        * typeck.c (c_expand_return): Drastically simplify.
 
 
        * typeck.c (c_expand_return): Drastically simplify.
 
@@ -912,32 +1005,32 @@ Fri Oct 18 16:03:48 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Oct 17 11:31:59 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (convert_to_pointer_force): Add code to support pointer to
 Thu Oct 17 11:31:59 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (convert_to_pointer_force): Add code to support pointer to
-       member function to pointer to function conversions.
+       member function to pointer to function conversions.
        * init.c (resolve_offset_ref): Add code to allow faked up objects,
        * init.c (resolve_offset_ref): Add code to allow faked up objects,
-       ignoring them if they are not used, and giving an error, if they
-       are needed.
+       ignoring them if they are not used, and giving an error, if they
+       are needed.
        * typeck.c (get_member_function_from_ptrfunc): Fold e1 to improve
        * typeck.c (get_member_function_from_ptrfunc): Fold e1 to improve
-       code, and so that we can give an error, if we needed an object,
-       and one was not provided.
+       code, and so that we can give an error, if we needed an object,
+       and one was not provided.
        (build_c_cast): Don't call default_conversion when we want to
        (build_c_cast): Don't call default_conversion when we want to
-       convert to pointer to function from a METHOD_TYPE.
+       convert to pointer to function from a METHOD_TYPE.
 
 Mon Oct 14 00:28:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * Make-lang.in (cplib2.ready): Fix logic.
 
        * decl.c (shadow_tag): Only complain about non-artificial function
 
 Mon Oct 14 00:28:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * Make-lang.in (cplib2.ready): Fix logic.
 
        * decl.c (shadow_tag): Only complain about non-artificial function
-       members.
+       members.
 
        * class.c (finish_struct_1): Add synthesized methods to TYPE_METHODS.
 
 Fri Oct 11 16:12:40 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * expr.c (cplus_expand_expr): Pre-tweak call_target like
 
        * class.c (finish_struct_1): Add synthesized methods to TYPE_METHODS.
 
 Fri Oct 11 16:12:40 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * expr.c (cplus_expand_expr): Pre-tweak call_target like
-       expand_inline_function would.
+       expand_inline_function would.
 
        * pt.c (mark_decl_instantiated): If extern_p, call
 
        * pt.c (mark_decl_instantiated): If extern_p, call
-       mark_inline_for_output.
+       mark_inline_for_output.
 
 Thu Oct 10 15:58:08 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Thu Oct 10 15:58:08 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -950,8 +1043,8 @@ Thu Oct 10 15:58:08 1996  Mike Stump  <mrs@cygnus.com>
 Tue Oct  8 12:43:51 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (tsubst): If the function decl isn't a member of this
 Tue Oct  8 12:43:51 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (tsubst): If the function decl isn't a member of this
-       template, return a copy of the decl (including copying the
-       lang-specific part) so we don't hose ourselves later.
+       template, return a copy of the decl (including copying the
+       lang-specific part) so we don't hose ourselves later.
 
 Thu Oct  3 16:24:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Oct  3 16:24:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -970,9 +1063,9 @@ Wed Oct  2 21:58:01 1996  Bob Manson  <manson@charmed.cygnus.com>
 Mon Sep 30 13:38:24 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c, cp-tree.h, cvt.c, decl.c, decl2.c, gxx.gperf, hash.h,
 Mon Sep 30 13:38:24 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c, cp-tree.h, cvt.c, decl.c, decl2.c, gxx.gperf, hash.h,
-       lex.c, method.c, parse.y, typeck.c, typeck2.c: Remove
-       warn_traditional and warn_strict_prototypes; remove ancient
-       'overload' code; remove references to flag_traditional.
+       lex.c, method.c, parse.y, typeck.c, typeck2.c: Remove
+       warn_traditional and warn_strict_prototypes; remove ancient
+       'overload' code; remove references to flag_traditional.
 
 Mon Sep 30 12:58:40 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Mon Sep 30 12:58:40 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -986,12 +1079,12 @@ Sun Sep 29 03:12:01 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * Make-lang.in (cplib2.txt): Also depend on the headers.
 
        * rtti.c (get_tinfo_var): Don't assume that POINTER_SIZE ==
        * Make-lang.in (cplib2.txt): Also depend on the headers.
 
        * rtti.c (get_tinfo_var): Don't assume that POINTER_SIZE ==
-       INT_TYPE_SIZE.
+       INT_TYPE_SIZE.
        (expand_class_desc): Use USItype for offset field.
        * tinfo.h (struct __class_type_info): Likewise.
 
        * method.c (build_overload_int): TYPE_PRECISION should be applied
        (expand_class_desc): Use USItype for offset field.
        * tinfo.h (struct __class_type_info): Likewise.
 
        * method.c (build_overload_int): TYPE_PRECISION should be applied
-       to types.
+       to types.
 
 Sat Sep 28 14:44:50 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Sat Sep 28 14:44:50 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1016,7 +1109,7 @@ Fri Sep 27 13:14:05 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Fri Sep 27 03:00:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (lookup_name_real): Don't try to look up anything in a
 Fri Sep 27 03:00:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (lookup_name_real): Don't try to look up anything in a
-       TYPENAME_TYPE.
+       TYPENAME_TYPE.
 
        * tinfo2.cc (__throw_type_match_rtti): Oops.
 
 
        * tinfo2.cc (__throw_type_match_rtti): Oops.
 
@@ -1027,7 +1120,7 @@ Thu Sep 26 22:11:05 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Thu Sep 26 10:59:00 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Pass tinfo fns rather than
 Thu Sep 26 10:59:00 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Pass tinfo fns rather than
-       calling them.
+       calling them.
        (get_tinfo_fn_dynamic): Extracted from build_typeid.
        * tinfo2.cc (__dynamic_cast): Adjust.
        
        (get_tinfo_fn_dynamic): Extracted from build_typeid.
        * tinfo2.cc (__dynamic_cast): Adjust.
        
@@ -1070,11 +1163,11 @@ Tue Sep 24 18:18:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
        for cv-quals.
 
        * Remove .h from standard C++ headers, add new.h, move into inc
        for cv-quals.
 
        * Remove .h from standard C++ headers, add new.h, move into inc
-       subdirectory.
+       subdirectory.
 
        * exception*: Remove pointer from object, constructors.  Add
 
        * exception*: Remove pointer from object, constructors.  Add
-       default exception::what that uses type_info::name.  Add
-       __throw_bad_typeid.
+       default exception::what that uses type_info::name.  Add
+       __throw_bad_typeid.
 
        * init.c (build_new): Don't add a cookie to new (void *) T[2].
 
 
        * init.c (build_new): Don't add a cookie to new (void *) T[2].
 
@@ -1105,7 +1198,7 @@ Mon Sep 23 01:18:50 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Sun Sep 22 05:31:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * lex.c (do_identifier): Don't do deferred lookup in a template
 Sun Sep 22 05:31:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * lex.c (do_identifier): Don't do deferred lookup in a template
-       header.
+       header.
 
        * typeck2.c (store_init_value): Oops.
 
 
        * typeck2.c (store_init_value): Oops.
 
@@ -1129,7 +1222,7 @@ Sat Sep 21 19:17:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Sep 19 16:41:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (begin_template_parm_list): Increment
 Thu Sep 19 16:41:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (begin_template_parm_list): Increment
-       processing_template_decl here.
+       processing_template_decl here.
        (end_template_parm_list): Not here.
        (process_template_parm): No need to add 1 to it now.
        * *.c: Use processing_template_decl instead of current_template_parms
        (end_template_parm_list): Not here.
        (process_template_parm): No need to add 1 to it now.
        * *.c: Use processing_template_decl instead of current_template_parms
@@ -1148,7 +1241,7 @@ Wed Sep 18 13:30:20 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Wed Sep 18 04:24:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (make_thunk): Call comdat_linkage before setting the
 Wed Sep 18 04:24:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (make_thunk): Call comdat_linkage before setting the
-       TREE_CODE.
+       TREE_CODE.
 
        * decl2.c (comdat_linkage): Use make_decl_one_only.
        (import_export_decl): Likewise.
 
        * decl2.c (comdat_linkage): Use make_decl_one_only.
        (import_export_decl): Likewise.
@@ -1160,19 +1253,19 @@ Sat Sep 14 08:34:41 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * decl2.c (grokfield): Tighten checking for access decls.
 
        * decl.c (make_typename_type): Resolve references to
        * decl2.c (grokfield): Tighten checking for access decls.
 
        * decl.c (make_typename_type): Resolve references to
-       current_class_type.  Set CLASSTYPE_GOT_SEMICOLON.
+       current_class_type.  Set CLASSTYPE_GOT_SEMICOLON.
        (lookup_name_real): Types that depend on a template parameter get
        (lookup_name_real): Types that depend on a template parameter get
-       an implicit 'typename' unless they're in the current scope.
+       an implicit 'typename' unless they're in the current scope.
        (start_decl_1): We don't care about incomplete types that depend
        (start_decl_1): We don't care about incomplete types that depend
-       on a template parm.
+       on a template parm.
        (grokdeclarator): Resolve 'typename's in the type specifier that
        (grokdeclarator): Resolve 'typename's in the type specifier that
-       refer to members of the current scope.
+       refer to members of the current scope.
 
        * call.c (build_over_call): Remove 'inline called before
 
        * call.c (build_over_call): Remove 'inline called before
-       definition' diagnostic.
+       definition' diagnostic.
        (build_method_call): Likewise.
        * decl.c (duplicate_decls): Downgrade 'used before declared
        (build_method_call): Likewise.
        * decl.c (duplicate_decls): Downgrade 'used before declared
-       inline' to a warning, only with -Winline.
+       inline' to a warning, only with -Winline.
 
 Fri Sep 13 17:31:40 1996  Stan Shebs  <shebs@andros.cygnus.com>
 
 
 Fri Sep 13 17:31:40 1996  Stan Shebs  <shebs@andros.cygnus.com>
 
@@ -1191,7 +1284,7 @@ Wed Sep 11 22:14:44 1996  Mike Stump  <mrs@cygnus.com>
 Wed Sep 11 22:10:48 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_start_catch_block): Add a pushlevel so that -g
 Wed Sep 11 22:10:48 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_start_catch_block): Add a pushlevel so that -g
-       works on hppa and SPARC.
+       works on hppa and SPARC.
 
 Wed Sep 11 10:18:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Wed Sep 11 10:18:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -1221,7 +1314,7 @@ Sun Sep  8 16:06:57 1996  Gerald Baumgartner  <gb@cs.purdue.edu>
 Thu Sep  5 16:51:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_c_cast): Don't tack a non_lvalue_expr onto a
 Thu Sep  5 16:51:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_c_cast): Don't tack a non_lvalue_expr onto a
-       target_expr.
+       target_expr.
 
 Thu Sep  5 10:05:38 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Thu Sep  5 10:05:38 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -1239,18 +1332,18 @@ Wed Sep  4 17:16:09 1996  Bob Manson  <manson@charmed.cygnus.com>
 Wed Sep  4 12:14:36 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_exception_blocks): Always make sure USE and
 Wed Sep  4 12:14:36 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_exception_blocks): Always make sure USE and
-       CLOBBER insns that came at the end still do, the backend relies
-       upon this.
+       CLOBBER insns that came at the end still do, the backend relies
+       upon this.
 
 Wed Sep  4 07:44:48 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_over_call): We can only use a TARGET_EXPR of the
 
 Wed Sep  4 07:44:48 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_over_call): We can only use a TARGET_EXPR of the
-       right type.
+       right type.
 
 Tue Sep  3 19:26:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (convert_to_reference): Revert last change, don't complain
 
 Tue Sep  3 19:26:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (convert_to_reference): Revert last change, don't complain
-       about temp without target decl.
+       about temp without target decl.
 
 Tue Sep  3 10:22:56 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Tue Sep  3 10:22:56 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -1263,15 +1356,15 @@ Tue Sep  3 02:38:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Fri Aug 30 14:26:57 1996  Mike Stump  <mrs@cygnus.com>
 
        * pt.c (tsubst): And support template args inside the exception
 Fri Aug 30 14:26:57 1996  Mike Stump  <mrs@cygnus.com>
 
        * pt.c (tsubst): And support template args inside the exception
-       specification.
+       specification.
 
        * pt.c (tsubst): Add support for exception specifications in
 
        * pt.c (tsubst): Add support for exception specifications in
-       template functions.
+       template functions.
 
 Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>
 
        * cp-tree.def (DECL_STMT): Eliminate the throw spec field, only 3
 
 Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>
 
        * cp-tree.def (DECL_STMT): Eliminate the throw spec field, only 3
-       fields now.
+       fields now.
        * cp-tree.h (start_decl): Eliminate the throw spec parameter.
        (start_function): Likewise.
        (start_method): Likewise.
        * cp-tree.h (start_decl): Eliminate the throw spec parameter.
        (start_function): Likewise.
        (start_method): Likewise.
@@ -1281,30 +1374,30 @@ Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>
        * lex.c (set_quals_and_spec): Likewise.
        * decl.h (grokdeclarator): Eliminate the throw spec parameter.
        * decl.c (shadow_tag): Eliminate the throw spec parameter to
        * lex.c (set_quals_and_spec): Likewise.
        * decl.h (grokdeclarator): Eliminate the throw spec parameter.
        * decl.c (shadow_tag): Eliminate the throw spec parameter to
-       grokdeclarator.
+       grokdeclarator.
        (groktypename): Likewise.
        (start_decl): Eliminate the throw spec parameter.  Eliminate the
        (groktypename): Likewise.
        (start_decl): Eliminate the throw spec parameter.  Eliminate the
-       throw spec parameter to grokdeclarator.  Eliminate the throw spec
-       field in DECL_STMT.
+       throw spec parameter to grokdeclarator.  Eliminate the throw spec
+       field in DECL_STMT.
        (cp_finish_decl): Eliminate the throw spec field in DECL_STMT.
        (grokfndecl): Remove useless set of raises.
        (grokdeclarator): Eliminate the throw spec parameter.  Eliminate
        (cp_finish_decl): Eliminate the throw spec field in DECL_STMT.
        (grokfndecl): Remove useless set of raises.
        (grokdeclarator): Eliminate the throw spec parameter.  Eliminate
-       the throw spec parameter to start_decl.  Pull the throw spec out
-       of the call declarator.
+       the throw spec parameter to start_decl.  Pull the throw spec out
+       of the call declarator.
        (grokparms): Eliminate the throw spec parameter to grokdeclarator.
        (start_function): Eliminate the throw spec parameter.  Eliminate
        (grokparms): Eliminate the throw spec parameter to grokdeclarator.
        (start_function): Eliminate the throw spec parameter.  Eliminate
-       the throw spec parameter to grokdeclarator.
+       the throw spec parameter to grokdeclarator.
        (start_method): Likewise.
        * decl2.c (grokfield): Likewise.
        (grokbitfield): Eliminate the throw spec parameter to grokdeclarator.
        (grokoptypename): Likewise.
        (finish_file): Eliminate the throw spec parameter to
        (start_method): Likewise.
        * decl2.c (grokfield): Likewise.
        (grokbitfield): Eliminate the throw spec parameter to grokdeclarator.
        (grokoptypename): Likewise.
        (finish_file): Eliminate the throw spec parameter to
-       start_function.  Add throw spec to make_call_declarator.
+       start_function.  Add throw spec to make_call_declarator.
        * except.c (init_exception_processing): Add throw spec to
        * except.c (init_exception_processing): Add throw spec to
-       make_call_declarator.  Eliminate the throw spec parameter to
-       start_decl.
+       make_call_declarator.  Eliminate the throw spec parameter to
+       start_decl.
        (expand_start_catch_block): Eliminate the throw spec parameter to
        (expand_start_catch_block): Eliminate the throw spec parameter to
-       grokdeclarator.
+       grokdeclarator.
        (expand_builtin_throw): Add throw spec to make_call_declarator.
        Eliminate the throw spec parameter to start_function.
        (start_anon_func): Likewise.
        (expand_builtin_throw): Add throw spec to make_call_declarator.
        Eliminate the throw spec parameter to start_function.
        (start_anon_func): Likewise.
@@ -1313,20 +1406,20 @@ Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>
        (cons_up_default_function): Add throw spec to make_call_declarator.
        Eliminate the throw spec parameter to grokfield.
        * method.c (synthesize_method): Eliminate the throw spec parameter
        (cons_up_default_function): Add throw spec to make_call_declarator.
        Eliminate the throw spec parameter to grokfield.
        * method.c (synthesize_method): Eliminate the throw spec parameter
-       to start_function.
+       to start_function.
        * pt.c (process_template_parm): Eliminate the throw spec parameter
        * pt.c (process_template_parm): Eliminate the throw spec parameter
-       to grokdeclarator.
+       to grokdeclarator.
        (tsubst): Add throw spec to make_call_declarator.
        (tsubst_expr): Eliminate the throw spec parameter to start_decl.
        (do_function_instantiation): Eliminate the throw spec parameter to
        (tsubst): Add throw spec to make_call_declarator.
        (tsubst_expr): Eliminate the throw spec parameter to start_decl.
        (do_function_instantiation): Eliminate the throw spec parameter to
-       grokdeclarator.  Eliminate the throw spec parameter to
-       start_function.
+       grokdeclarator.  Eliminate the throw spec parameter to
+       start_function.
        * rtti.c (synthesize_tinfo_fn): Eliminate the throw spec parameter
        * rtti.c (synthesize_tinfo_fn): Eliminate the throw spec parameter
-       to start_function.
+       to start_function.
        * parse.y (datadef): Remove non-winning optimization.
        (decl): Likewise.
        (fndef): Remove ambiguous error productions uncovered by grammer
        * parse.y (datadef): Remove non-winning optimization.
        (decl): Likewise.
        (fndef): Remove ambiguous error productions uncovered by grammer
-       fixing.
+       fixing.
        (constructor_declarator): Add exception_specification_opt here.
        (component_constructor_declarator): Likewise.
        (direct_after_type_declarator): Likewise.
        (constructor_declarator): Add exception_specification_opt here.
        (component_constructor_declarator): Likewise.
        (direct_after_type_declarator): Likewise.
@@ -1348,10 +1441,10 @@ Fri Aug 30 10:01:55 1996  Mike Stump  <mrs@cygnus.com>
 Wed Aug 28 01:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_over_call): Also use an INIT_EXPR when
 Wed Aug 28 01:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_over_call): Also use an INIT_EXPR when
-       initializing anything from an rvalue.
+       initializing anything from an rvalue.
 
        * call.c (build_over_call): Call stabilize_reference when building
 
        * call.c (build_over_call): Call stabilize_reference when building
-       an INIT_EXPR instead of calling the copy ctor.
+       an INIT_EXPR instead of calling the copy ctor.
 
        * call.c (joust): Extend the previous change to all comparisons.
 
 
        * call.c (joust): Extend the previous change to all comparisons.
 
@@ -1363,10 +1456,10 @@ Wed Aug 28 01:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * typeck.c (build_static_cast): Implement.
        * tree.c (build_cplus_new): Handle getting a TARGET_EXPR.
        * decl.c (grokparms): Use can_convert_arg instead of
        * typeck.c (build_static_cast): Implement.
        * tree.c (build_cplus_new): Handle getting a TARGET_EXPR.
        * decl.c (grokparms): Use can_convert_arg instead of
-       implicit_conversion directly.
+       implicit_conversion directly.
        (copy_args_p): New fn.
        * cvt.c (convert_to_reference): Don't complain about temp with
        (copy_args_p): New fn.
        * cvt.c (convert_to_reference): Don't complain about temp with
-       static_cast.
+       static_cast.
        (build_up_reference): Handle TARGET_EXPRs.
        * call.c (build_over_call): Elide unnecessary temps.
        (can_convert*): Use new overloading code.
        (build_up_reference): Handle TARGET_EXPRs.
        * call.c (build_over_call): Elide unnecessary temps.
        (can_convert*): Use new overloading code.
@@ -1378,7 +1471,7 @@ Tue Aug 27 13:12:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * typeck.c (build_reinterpret_cast): Implement.
 
        * call.c (add_builtin_candidate): Use TYPE_PTROB_P instead of
        * typeck.c (build_reinterpret_cast): Implement.
 
        * call.c (add_builtin_candidate): Use TYPE_PTROB_P instead of
-       ptr_complete_ob.
+       ptr_complete_ob.
        (joust): If we're comparing a function to a builtin and the worst
        conversion for the builtin is worse than the worst conversion for the
        function, take the function.
        (joust): If we're comparing a function to a builtin and the worst
        conversion for the builtin is worse than the worst conversion for the
        function, take the function.
@@ -1390,8 +1483,8 @@ Tue Aug 27 13:12:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Tue Aug 27 13:14:58 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Don't try to dereference exprtype
 Tue Aug 27 13:14:58 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Don't try to dereference exprtype
-       too early. Make sure we explode if exprtype turns out to be a
-       NULL_TREE when it shouldn't be.
+       too early. Make sure we explode if exprtype turns out to be a
+       NULL_TREE when it shouldn't be.
 
 Tue Aug 27 10:56:21 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Tue Aug 27 10:56:21 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -1418,13 +1511,13 @@ Mon Aug 26 17:00:33 1996  Mike Stump  <mrs@cygnus.com>
        * hash.h: Rebuild.
        
        * lex.c (make_pointer_declarator): Change type_quals into
        * hash.h: Rebuild.
        
        * lex.c (make_pointer_declarator): Change type_quals into
-       cv_qualifiers.
+       cv_qualifiers.
        (make_reference_declarator): Likewise.
        
 Thu Aug 22 01:09:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (start_function): Only check interface_* for templates
        (make_reference_declarator): Likewise.
        
 Thu Aug 22 01:09:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (start_function): Only check interface_* for templates
-       with flag_alt_external_templates.
+       with flag_alt_external_templates.
 
        * call.c (build_new_op): Check for comparison of different enum types.
        (build_over_call): Fix arg # output.
 
        * call.c (build_new_op): Check for comparison of different enum types.
        (build_over_call): Fix arg # output.
@@ -1440,7 +1533,7 @@ Wed Aug 21 00:13:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * tree.c (error_type): Dont print reference-to-array.
 
        * typeck.c (convert_for_assignment): Don't say contravariance for
        * tree.c (error_type): Dont print reference-to-array.
 
        * typeck.c (convert_for_assignment): Don't say contravariance for
-       removing const.
+       removing const.
 
 Tue Aug 20 13:23:00 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Tue Aug 20 13:23:00 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1457,7 +1550,7 @@ Tue Aug 20 13:23:00 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * call.c (build_new_method_call): Check for erroneous args.
 
        * pt.c (instantiate_class_template): Propagate
        * call.c (build_new_method_call): Check for erroneous args.
 
        * pt.c (instantiate_class_template): Propagate
-       TYPE_USES_MULTIPLE_INHERITANCE.
+       TYPE_USES_MULTIPLE_INHERITANCE.
 
 Tue Aug 20 13:09:57 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Tue Aug 20 13:09:57 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -1517,12 +1610,12 @@ Thu Aug 15 17:27:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Aug 15 17:09:54 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (do_unwind): Mark %i7 as used on the SPARC so we can
 Thu Aug 15 17:09:54 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (do_unwind): Mark %i7 as used on the SPARC so we can
-       optimize.
+       optimize.
 
 Thu Aug 15 01:36:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Ignore #pragma interface for tinfo
 
 Thu Aug 15 01:36:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Ignore #pragma interface for tinfo
-       fns of classes without virtual functions.
+       fns of classes without virtual functions.
 
        * call.c (add_function_candidate): Handle `this' specially.
        (compare_ics): Likewise.
 
        * call.c (add_function_candidate): Handle `this' specially.
        (compare_ics): Likewise.
@@ -1557,7 +1650,7 @@ Sun Aug 11 15:20:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (shadow_tag): Call push_template_decl for partial specializations.
        * parse.y: Likewise.
        * cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Replaces
        (shadow_tag): Call push_template_decl for partial specializations.
        * parse.y: Likewise.
        * cp-tree.h (DECL_TEMPLATE_SPECIALIZATIONS): Replaces
-       DECL_TEMPLATE_MEMBERS.
+       DECL_TEMPLATE_MEMBERS.
        * call.c (print_z_candidates): Reduce duplication.
 
 Fri Aug  9 14:36:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * call.c (print_z_candidates): Reduce duplication.
 
 Fri Aug  9 14:36:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
@@ -1580,12 +1673,12 @@ Thu Aug  8 17:04:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (build_over_call): Or here.
        * typeck.c (build_function_call_real): Or here.
        * tree.c (bot_manip): Call mark_used on functions used in default
        (build_over_call): Or here.
        * typeck.c (build_function_call_real): Or here.
        * tree.c (bot_manip): Call mark_used on functions used in default
-       args.
+       args.
 
 Thu Aug  8 17:48:16 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
        * decl2.c (import_export_vtable): Delete code that disabled vtable
 
 Thu Aug  8 17:48:16 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
        * decl2.c (import_export_vtable): Delete code that disabled vtable
-       heuristic on systems with ASM_OUTPUT_EXTERNAL.
+       heuristic on systems with ASM_OUTPUT_EXTERNAL.
 
 Wed Aug  7 12:44:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Wed Aug  7 12:44:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1593,16 +1686,16 @@ Wed Aug  7 12:44:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
        better.
 
        * decl.c (finish_function): Set the DECL_CONTEXT of the result to
        better.
 
        * decl.c (finish_function): Set the DECL_CONTEXT of the result to
-       the function, not its outer block.
+       the function, not its outer block.
 
        * call.c (build_field_call): Pass fields on to build_opfncall
 
        * call.c (build_field_call): Pass fields on to build_opfncall
-       regardless of TYPE_OVERLOADS_CALL_EXPR.
+       regardless of TYPE_OVERLOADS_CALL_EXPR.
        (build_method_call): Pass on to build_new_method_call sooner.
 
        * typeck.c (build_ptrmemfunc): Just return what instantiate_type
        gives us.
        * class.c (instantiate_type): Don't put a POINTER_TYPE to
        (build_method_call): Pass on to build_new_method_call sooner.
 
        * typeck.c (build_ptrmemfunc): Just return what instantiate_type
        gives us.
        * class.c (instantiate_type): Don't put a POINTER_TYPE to
-       METHOD_TYPE on an expression.  Also make a copy of rhs instead of
+       METHOD_TYPE on an expression.  Also make a copy of rhs instead of
        modifying it.
 
 Tue Aug  6 12:58:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
        modifying it.
 
 Tue Aug  6 12:58:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
@@ -1635,8 +1728,8 @@ Mon Aug  5 17:17:06 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Aug  5 17:07:47 1996  Mike Stump  <mrs@cygnus.com>
 
        * method.c (build_overload_name): Put bug fix into code but leave
 Mon Aug  5 17:07:47 1996  Mike Stump  <mrs@cygnus.com>
 
        * method.c (build_overload_name): Put bug fix into code but leave
-       disabled for now so we can be bug compatible with older releases
-       that do repeats incorrectly.  In the future, we can enable it.
+       disabled for now so we can be bug compatible with older releases
+       that do repeats incorrectly.  In the future, we can enable it.
 
 Mon Aug  5 13:46:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Aug  5 13:46:28 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1656,7 +1749,7 @@ Sun Aug  4 15:29:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cvt.c (build_up_reference): Propagate INDIRECT_BIND to 
        recursive calls.
        * typeck.c (complete_type): Propagate
        * cvt.c (build_up_reference): Propagate INDIRECT_BIND to 
        recursive calls.
        * typeck.c (complete_type): Propagate
-       TYPE_NEEDS_{CONSTRUCTING,DESTRUCTOR}.
+       TYPE_NEEDS_{CONSTRUCTING,DESTRUCTOR}.
 
 Sat Aug  3 14:05:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Sat Aug  3 14:05:07 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1695,7 +1788,7 @@ Fri Aug  2 01:26:59 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * hash.h: Regenerate.
        * lex.h: Add RID_NULL.
        * lex.c (init_lex): Create null_pointer_node here, stick it in
        * hash.h: Regenerate.
        * lex.h: Add RID_NULL.
        * lex.c (init_lex): Create null_pointer_node here, stick it in
-       RID_NULL.
+       RID_NULL.
        * decl.c (init_decl_processing): Still set its type here.
        * cvt.c (cp_convert_to_pointer): Don't produce null_pointer_node.
        (convert_to_pointer_force): Likewise.
        * decl.c (init_decl_processing): Still set its type here.
        * cvt.c (cp_convert_to_pointer): Don't produce null_pointer_node.
        (convert_to_pointer_force): Likewise.
@@ -1714,14 +1807,14 @@ Fri Aug  2 01:26:59 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (build_over_call): Here.
 
        * cvt.c (build_new_method_call): Don't complain about no match if
        (build_over_call): Here.
 
        * cvt.c (build_new_method_call): Don't complain about no match if
-       LOOKUP_SPECULATIVELY.
+       LOOKUP_SPECULATIVELY.
        (build_over_call): Fix 'this' for virtual fn.
        (build_new_method_call): Add diagnostic.
 
 Thu Aug  1 16:45:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (add_function_candidate): Expect 'this' and 'in_chrg' for
        (build_over_call): Fix 'this' for virtual fn.
        (build_new_method_call): Add diagnostic.
 
 Thu Aug  1 16:45:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (add_function_candidate): Expect 'this' and 'in_chrg' for
-       constructors to be passed in.
+       constructors to be passed in.
        (build_over_call): Likewise.
        (build_user_type_conversion_1): Pass them in.
        (convert_like): Likewise.
        (build_over_call): Likewise.
        (build_user_type_conversion_1): Pass them in.
        (convert_like): Likewise.
@@ -1735,13 +1828,13 @@ Thu Aug  1 16:45:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Aug  1 16:06:14 1996  Mike Stump  <mrs@cygnus.com>
 
        * lex.c (do_identifier): Don't use %O on IDENTIFIER_OPNAME_Ps, use
 Thu Aug  1 16:06:14 1996  Mike Stump  <mrs@cygnus.com>
 
        * lex.c (do_identifier): Don't use %O on IDENTIFIER_OPNAME_Ps, use
-       %D instead.
+       %D instead.
 
 Thu Aug  1 15:24:02 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_throw): Use maybe_build_cleanup_and_delete
 
 Thu Aug  1 15:24:02 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (expand_throw): Use maybe_build_cleanup_and_delete
-       instead of just maybe_build_cleanup so that we deallocate the
-       thrown object.
+       instead of just maybe_build_cleanup so that we deallocate the
+       thrown object.
 
 Thu Aug  1 15:18:00 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Thu Aug  1 15:18:00 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -1751,23 +1844,23 @@ Thu Aug  1 15:18:00 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Thu Aug  1 11:53:51 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (instantiate_class_template): Call complete_type. Also, if
 Thu Aug  1 11:53:51 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (instantiate_class_template): Call complete_type. Also, if
-       we're at the end of the file and we just instantiated a template
-       class with a vtable, call finish_prevtable_vardecl.
+       we're at the end of the file and we just instantiated a template
+       class with a vtable, call finish_prevtable_vardecl.
 
        * error.c (dump_decl): Don't explode (or explode more gracefully
 
        * error.c (dump_decl): Don't explode (or explode more gracefully
-       as appropriate) if the object being dumped has a null type.
+       as appropriate) if the object being dumped has a null type.
        (dump_expr): Likewise.
 
        * search.c (build_mi_matrix): Ensure that mi_size is large enough,
        (dump_expr): Likewise.
 
        * search.c (build_mi_matrix): Ensure that mi_size is large enough,
-       by counting the number of nodes that we'll need before allocating
-       the array.
+       by counting the number of nodes that we'll need before allocating
+       the array.
        (lookup_fnfields): Fix comment.
        (breadth_first_search): Fix comment.
 
 Wed Jul 31 09:57:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Propagate TYPE_PACKED and
        (lookup_fnfields): Fix comment.
        (breadth_first_search): Fix comment.
 
 Wed Jul 31 09:57:05 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Propagate TYPE_PACKED and
-       TYPE_ALIGN.
+       TYPE_ALIGN.
        * class.c (finish_struct): Call cplus_decl_attributes here.
        (finish_struct_1): Not here.
        * cp-tree.h: Adjust.
        * class.c (finish_struct): Call cplus_decl_attributes here.
        (finish_struct_1): Not here.
        * cp-tree.h: Adjust.
@@ -1787,10 +1880,10 @@ Tue Jul 30 13:06:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (build_over_call): Call require_complete_type.
 
        * decl.c (start_function): Statics are static even in a #pragma
        (build_over_call): Call require_complete_type.
 
        * decl.c (start_function): Statics are static even in a #pragma
-       interface file.
+       interface file.
 
        * decl2.c (import_export_vtable): Disable vtable heuristic on
 
        * decl2.c (import_export_vtable): Disable vtable heuristic on
-       systems with ASM_OUTPUT_EXTERNAL.
+       systems with ASM_OUTPUT_EXTERNAL.
 
        * cvt.c (compare_ics): Fix comparison of PMEM_CONV and BASE_CONV.
        (standard_conversion): No std conv to enum type.
 
        * cvt.c (compare_ics): Fix comparison of PMEM_CONV and BASE_CONV.
        (standard_conversion): No std conv to enum type.
@@ -1799,7 +1892,7 @@ Tue Jul 30 13:06:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
        for ptm's.
 
        * cvt.c (reference_binding): Bind directly to a base subobject of
        for ptm's.
 
        * cvt.c (reference_binding): Bind directly to a base subobject of
-       a class rvalue.
+       a class rvalue.
 
        * cvt.c (build_new_op): Enforce access control.
 
 
        * cvt.c (build_new_op): Enforce access control.
 
@@ -1815,18 +1908,18 @@ Tue Jul 30 09:22:53 1996  Bob Manson  <manson@charmed.cygnus.com>
 Mon Jul 29 15:48:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (build_builtin_candidate): Stick a dummy conversion in if
 Mon Jul 29 15:48:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (build_builtin_candidate): Stick a dummy conversion in if
-       it failed.
+       it failed.
 
        * cvt.c (build_user_type_conversion_1): Handle overloaded
 
        * cvt.c (build_user_type_conversion_1): Handle overloaded
-       conversion ops.
+       conversion ops.
 
        * cvt.c (add_builtin_candidates): Don't consider type conversion
 
        * cvt.c (add_builtin_candidates): Don't consider type conversion
-       operators for the first parameter of operator=.
+       operators for the first parameter of operator=.
 
 Mon Jul 29 15:33:55 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (complete_type): Only call layout_type if we're not
 
 Mon Jul 29 15:33:55 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (complete_type): Only call layout_type if we're not
-       expanding a template.
+       expanding a template.
 
 Mon Jul 29 14:40:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Jul 29 14:40:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -1847,7 +1940,7 @@ Mon Jul 29 14:40:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Jul 29 12:05:40 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (build_modify_expr): Always attempt to build a call to
 Mon Jul 29 12:05:40 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * typeck.c (build_modify_expr): Always attempt to build a call to
-       the assignment operator, even if we're using a default one.
+       the assignment operator, even if we're using a default one.
        (convert_for_initialization): Call complete_type.
 
 Mon Jul 29 11:25:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (convert_for_initialization): Call complete_type.
 
 Mon Jul 29 11:25:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
@@ -1882,16 +1975,16 @@ Fri Jul 26 01:07:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Jul 25 09:33:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (complete_type): Call layout_type rather than building
 Thu Jul 25 09:33:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (complete_type): Call layout_type rather than building
-       a new array type.
+       a new array type.
 
        * cvt.c (add_builtin_candidate): Pointer arithmetic candidates
 
        * cvt.c (add_builtin_candidate): Pointer arithmetic candidates
-       only use ptrdiff_t.
+       only use ptrdiff_t.
 
 Wed Jul 24 12:45:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c: Always compile the new overloading code (but don't use it).
        (implicit_conversion): Add a BASE_CONV when converting to
 
 Wed Jul 24 12:45:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c: Always compile the new overloading code (but don't use it).
        (implicit_conversion): Add a BASE_CONV when converting to
-       the same class type.
+       the same class type.
        (convert_like): Handle BASE_CONV.
 
 Tue Jul 23 12:46:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (convert_like): Handle BASE_CONV.
 
 Tue Jul 23 12:46:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
@@ -1901,7 +1994,7 @@ Tue Jul 23 12:46:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        NEW_OVER changes:
        * typeck.c (build_x_function_call): Try an operator function
 
        NEW_OVER changes:
        * typeck.c (build_x_function_call): Try an operator function
-       whenever we call an object of class type.
+       whenever we call an object of class type.
        * method.c (build_opfncall): Pass CALL_EXPRs through.
        * cvt.c (implicit_conversion): Do const-ref case first.
        (add_conv_candidate, build_object_call, op_error): New fns.
        * method.c (build_opfncall): Pass CALL_EXPRs through.
        * cvt.c (implicit_conversion): Do const-ref case first.
        (add_conv_candidate, build_object_call, op_error): New fns.
@@ -1931,7 +2024,7 @@ Mon Jul 22 12:18:54 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        NEW_OVER changes:
        * cvt.c (convert_to_reference): Don't use convert_from_refeence on
 
        NEW_OVER changes:
        * cvt.c (convert_to_reference): Don't use convert_from_refeence on
-       result of build_type_conversion.
+       result of build_type_conversion.
        (cp_convert): Only call build_method_call for ctors if
        build_type_conversion failed.
        (ptr_complete_ob): New function.
        (cp_convert): Only call build_method_call for ctors if
        build_type_conversion failed.
        (ptr_complete_ob): New function.
@@ -2005,20 +2098,20 @@ Wed Jul 10 19:36:37 1996  Mike Stump  <mrs@cygnus.com>
 Wed Jul 10 18:20:11 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl.c (grokdeclarator): Check for overflow when evaluating an
 Wed Jul 10 18:20:11 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl.c (grokdeclarator): Check for overflow when evaluating an
-       array dimension.
+       array dimension.
 
 Wed Jul 10 17:26:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (cp_convert): Don't check for ambiguity with constructor
 
 Wed Jul 10 17:26:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (cp_convert): Don't check for ambiguity with constructor
-       if NEW_OVER.
+       if NEW_OVER.
 
        * typeck.c (build_x_function_call): Pass function overload
 
        * typeck.c (build_x_function_call): Pass function overload
-       questions to new overloading code if NEW_OVER.
+       questions to new overloading code if NEW_OVER.
        * init.c (expand_aggr_init_1): Only check for type conversion ops
        * init.c (expand_aggr_init_1): Only check for type conversion ops
-       if we're doing copy-initialization (i.e. LOOKUP_ONLYCONVERTING).
-       Don't check for ambiguity with constructor if NEW_OVER.
+       if we're doing copy-initialization (i.e. LOOKUP_ONLYCONVERTING).
+       Don't check for ambiguity with constructor if NEW_OVER.
        * cvt.c (convert_to_reference): Dereference the result of a type
        * cvt.c (convert_to_reference): Dereference the result of a type
-       conversion operator.
+       conversion operator.
        (build_conv): Propagate ICS_USER_FLAG.
        (implicit_conversion): Call instantiate_type.
        Pass LOOKUP_ONLYCONVERTING instead of LOOKUP_NORMAL.
        (build_conv): Propagate ICS_USER_FLAG.
        (implicit_conversion): Call instantiate_type.
        Pass LOOKUP_ONLYCONVERTING instead of LOOKUP_NORMAL.
@@ -2039,7 +2132,7 @@ Wed Jul 10 17:26:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Tue Jul  9 17:48:48 1996  Mike Stump  <mrs@cygnus.com>
 
        * decl.c (lookup_name_real): If we find mem in obj when parsing
 Tue Jul  9 17:48:48 1996  Mike Stump  <mrs@cygnus.com>
 
        * decl.c (lookup_name_real): If we find mem in obj when parsing
-       `obj->mem', make sure we return the right value.
+       `obj->mem', make sure we return the right value.
 
 Tue Jul  9 16:11:28 1996  Bob Manson  <manson@charmed.cygnus.com>
 
 
 Tue Jul  9 16:11:28 1996  Bob Manson  <manson@charmed.cygnus.com>
 
@@ -2052,7 +2145,7 @@ Tue Jul  9 12:46:34 1996  Mike Stump  <mrs@cygnus.com>
 Mon Jul  8 16:42:31 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * init.c (expand_aggr_init_1): Don't check type conversions if
 Mon Jul  8 16:42:31 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * init.c (expand_aggr_init_1): Don't check type conversions if
-       NEW_OVER.
+       NEW_OVER.
 
        * cvt.c (z_candidate): Put back template field.
        (add_function_candidate): Set it.
 
        * cvt.c (z_candidate): Put back template field.
        (add_function_candidate): Set it.
@@ -2068,7 +2161,7 @@ Mon Jul  8 16:18:56 1996  Bob Manson  <manson@charmed.cygnus.com>
        * call.c (compute_conversion_costs): Call complete_type.
 
        * tree.c (vec_binfo_member): Use comptypes instead of comparing
        * call.c (compute_conversion_costs): Call complete_type.
 
        * tree.c (vec_binfo_member): Use comptypes instead of comparing
-       pointers, so we can handle template parameters.
+       pointers, so we can handle template parameters.
 
 Fri Jul  5 16:51:53 1996  Bob Manson  <manson@charmed.cygnus.com>
 
 
 Fri Jul  5 16:51:53 1996  Bob Manson  <manson@charmed.cygnus.com>
 
@@ -2095,7 +2188,7 @@ Mon Jul  1 22:58:18 1996  Bob Manson  <manson@charmed.cygnus.com>
        * decl.c: Add signed_size_zero_node.
        (init_decl_processing): Build it.
        * class.c (prepare_fresh_vtable): Use it instead of size_zero_node
        * decl.c: Add signed_size_zero_node.
        (init_decl_processing): Build it.
        * class.c (prepare_fresh_vtable): Use it instead of size_zero_node
-       when we're trying to make a negative delta.
+       when we're trying to make a negative delta.
 
 Mon Jul  1 17:56:19 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Mon Jul  1 17:56:19 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -2119,9 +2212,9 @@ Mon Jul  1 17:56:19 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Sat Jun 29 14:05:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Move user-defined type conversion
 Sat Jun 29 14:05:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * cvt.c (cp_convert_to_pointer): Move user-defined type conversion
-       handling to before extraction of TYPE_PTRMEMFUNC_FN_TYPE.
+       handling to before extraction of TYPE_PTRMEMFUNC_FN_TYPE.
        (convert_to_reference): Use build_type_conversion to convert to
        (convert_to_reference): Use build_type_conversion to convert to
-       the reference type directly.
+       the reference type directly.
        (standard_conversion): Fix void* case, non-conversions.
        (reference_binding): Fix expr == 0 case, non-conversions.
        (convert_like): Support REF_BIND.
        (standard_conversion): Fix void* case, non-conversions.
        (reference_binding): Fix expr == 0 case, non-conversions.
        (convert_like): Support REF_BIND.
@@ -2140,7 +2233,7 @@ Thu Jun 27 15:18:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * pt.c (instantiate_class_template): Call repo_template_used.
 
        * search.c (lookup_conversions): Only lookup conversions in
        * pt.c (instantiate_class_template): Call repo_template_used.
 
        * search.c (lookup_conversions): Only lookup conversions in
-       complete types.
+       complete types.
 
 Thu Jun 27 12:59:53 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Thu Jun 27 12:59:53 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -2156,7 +2249,7 @@ Wed Jun 26 18:29:47 1996  Bob Manson  <manson@charmed.cygnus.com>
 Mon Jun 24 17:17:32 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (start_anon_func): Make sure anonymous functions are
 Mon Jun 24 17:17:32 1996  Mike Stump  <mrs@cygnus.com>
 
        * except.c (start_anon_func): Make sure anonymous functions are
-       never external.
+       never external.
 
 Fri Jun 21 15:10:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Fri Jun 21 15:10:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2175,8 +2268,8 @@ Thu Jun 20 23:35:38 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Jun 20 14:08:40 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl2.c (grokbitfield): Handle constant decls appropriately.
 Thu Jun 20 14:08:40 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl2.c (grokbitfield): Handle constant decls appropriately.
-       Give an appropriate error message now instead of spewing core
-       later.
+       Give an appropriate error message now instead of spewing core
+       later.
 
 Thu Jun 20 13:01:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu Jun 20 13:01:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2190,7 +2283,7 @@ Wed Jun 19 11:37:04 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Tue Jun 18 10:02:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_decl): If at_eof, call import_export_decl
 Tue Jun 18 10:02:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_decl): If at_eof, call import_export_decl
-       regardless of DECL_INLINE.
+       regardless of DECL_INLINE.
 
        * typeck.c (mark_addressable): Set TREE_ADDRESSABLE on CONSTRUCTORs.
 
 
        * typeck.c (mark_addressable): Set TREE_ADDRESSABLE on CONSTRUCTORs.
 
@@ -2212,7 +2305,7 @@ Mon Jun 17 15:23:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Sun Jun 16 12:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Don't trust
 Sun Jun 16 12:33:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Don't trust
-       TREE_SYMBOL_REFERENCED for vtables of local classes.
+       TREE_SYMBOL_REFERENCED for vtables of local classes.
 
 Fri Jun 14 18:13:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Fri Jun 14 18:13:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2231,7 +2324,7 @@ Tue Jun 11 15:09:18 1996  Bob Manson  <manson@charmed.cygnus.com>
 Tue Jun 11 13:56:23 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Still emit static/weak/comdat
 Tue Jun 11 13:56:23 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Still emit static/weak/comdat
-       copies of inline template functions with -fno-implicit-templates.
+       copies of inline template functions with -fno-implicit-templates.
 
 Tue Jun 11 11:42:13 1996  Bob Manson  <manson@charmed.cygnus.com>
 
 
 Tue Jun 11 11:42:13 1996  Bob Manson  <manson@charmed.cygnus.com>
 
@@ -2241,33 +2334,33 @@ Tue Jun 11 11:42:13 1996  Bob Manson  <manson@charmed.cygnus.com>
 Fri Jun  7 15:30:10 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl.c (build_enumerator): Always copy the INTEGER_CST used to
 Fri Jun  7 15:30:10 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * decl.c (build_enumerator): Always copy the INTEGER_CST used to
-       initialize the enum, because we really and truly don't know where
-       it came from.
+       initialize the enum, because we really and truly don't know where
+       it came from.
        (start_enum): Don't copy integer_zero_node because
        (start_enum): Don't copy integer_zero_node because
-       build_enumerator will do it.
+       build_enumerator will do it.
 
 Fri Jun  7 11:11:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (finish_function): Do access control on base destructors.
 
        * pt.c (tsubst, case FUNCTION_DECL): Set up
 
 Fri Jun  7 11:11:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (finish_function): Do access control on base destructors.
 
        * pt.c (tsubst, case FUNCTION_DECL): Set up
-       IDENTIFIER_GLOBAL_VALUE for member functions so pushdecl doesn't
-       hose us.
+       IDENTIFIER_GLOBAL_VALUE for member functions so pushdecl doesn't
+       hose us.
 
 Fri Jun  7 10:37:33 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (build_up_reference): If we have already extended the
 
 Fri Jun  7 10:37:33 1996  Mike Stump  <mrs@cygnus.com>
 
        * cvt.c (build_up_reference): If we have already extended the
-       lifetime of the temporary, don't try it again.
+       lifetime of the temporary, don't try it again.
        * typeck.c (c_expand_return): Don't try and convert the return
        value twice when we want a reference, once is enough.
        
 Tue Jun  4 15:41:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst_expr, case DECL_STMT): Don't pass
        * typeck.c (c_expand_return): Don't try and convert the return
        value twice when we want a reference, once is enough.
        
 Tue Jun  4 15:41:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst_expr, case DECL_STMT): Don't pass
-       LOOKUP_ONLYCONVERTING at all for now.
+       LOOKUP_ONLYCONVERTING at all for now.
 
        * search.c (add_conversions): Put the conversion function in
 
        * search.c (add_conversions): Put the conversion function in
-       TREE_VALUE, the basetype in TREE_PURPOSE.
+       TREE_VALUE, the basetype in TREE_PURPOSE.
        * cvt.c (build_type_conversion): Adjust.
        * cvt.c (build_expr_type_conversion): Adjust.
        * call.c (user_harshness): Adjust.
        * cvt.c (build_type_conversion): Adjust.
        * cvt.c (build_expr_type_conversion): Adjust.
        * call.c (user_harshness): Adjust.
@@ -2275,7 +2368,7 @@ Tue Jun  4 15:41:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Jun  3 15:30:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (emit_thunk): Pretend this is a FUNCTION_DECL for the
 Mon Jun  3 15:30:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (emit_thunk): Pretend this is a FUNCTION_DECL for the
-       backend's benefit.
+       backend's benefit.
 
 Mon Jun 10 18:58:19 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Mon Jun 10 18:58:19 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -2294,7 +2387,7 @@ Fri May 31 14:56:13 1996  Mike Stump  <mrs@cygnus.com>
 Fri May 31 14:22:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_modify_expr): Don't use TREE_VALUE on a
 Fri May 31 14:22:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_modify_expr): Don't use TREE_VALUE on a
-       TARGET_EXPR.
+       TARGET_EXPR.
 
 Wed May 29 17:04:33 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Wed May 29 17:04:33 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -2324,27 +2417,27 @@ Thu May 23 16:40:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
        TYPE_HAS_ASSIGN_REF (basetype).
 
        * decl.c (grokfndecl): Diagnose user definition of
        TYPE_HAS_ASSIGN_REF (basetype).
 
        * decl.c (grokfndecl): Diagnose user definition of
-       implicitly-declared methods.
+       implicitly-declared methods.
 
 Thu May 23 12:13:08 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * method.c (do_build_copy_constructor): Add code to give
 
 Thu May 23 12:13:08 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * method.c (do_build_copy_constructor): Add code to give
-       meaningful error messages instead of crashing.
-       (do_build_assign_ref): Don't synthesize assignment operators for
-       classes containing reference or const members.
+       meaningful error messages instead of crashing.
+       (do_build_assign_ref): Don't synthesize assignment operators for
+       classes containing reference or const members.
 
        * class.c (struct base_info): Remove cant_synth_copy_ctor
        and cant_synth_asn_ref.
        (finish_base_struct): Remove the code that tries to conditionalize
 
        * class.c (struct base_info): Remove cant_synth_copy_ctor
        and cant_synth_asn_ref.
        (finish_base_struct): Remove the code that tries to conditionalize
-       synthesis of copy constructors & assignment operators based on
-       access permissions. Instead, let it fail when it tries to
-       synthesize the copy constructor. This will give meaningful error
-       messages instead of silently generating code to perform a bitcopy.
+       synthesis of copy constructors & assignment operators based on
+       access permissions. Instead, let it fail when it tries to
+       synthesize the copy constructor. This will give meaningful error
+       messages instead of silently generating code to perform a bitcopy.
 
 Wed May 22 11:45:19 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * lex.c (real_yylex): Remove old-n-crufty #if 0 code for
 
 Wed May 22 11:45:19 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * lex.c (real_yylex): Remove old-n-crufty #if 0 code for
-       determining types for constant values.
+       determining types for constant values.
 
        * decl.c (struct named_label_list): Use instead of stuffing
        random items into a TREE_LIST node.
 
        * decl.c (struct named_label_list): Use instead of stuffing
        random items into a TREE_LIST node.
@@ -2352,8 +2445,8 @@ Wed May 22 11:45:19 1996  Bob Manson  <manson@charmed.cygnus.com>
        (poplevel): Likewise.
        (lookup_label): Likewise.
        (define_label): Add an error message to tell the user the line
        (poplevel): Likewise.
        (lookup_label): Likewise.
        (define_label): Add an error message to tell the user the line
-       where the goto is located in addition to the destination of the
-       goto.
+       where the goto is located in addition to the destination of the
+       goto.
        (init_decl_processing): Use NULL instead of NULL_TREE to initialize
        named_label_uses.
        (finish_function): Likewise.
        (init_decl_processing): Use NULL instead of NULL_TREE to initialize
        named_label_uses.
        (finish_function): Likewise.
@@ -2368,22 +2461,22 @@ Wed May 22 09:33:23 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Tue May 21 11:21:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_method_call): Always convert 'this' to the
 Tue May 21 11:21:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (build_method_call): Always convert 'this' to the
-       appropriate type.
+       appropriate type.
 
        * search.c (add_conversions): Put the conversion function in
 
        * search.c (add_conversions): Put the conversion function in
-       TREE_VALUE, the type in TREE_PURPOSE.
+       TREE_VALUE, the type in TREE_PURPOSE.
        * cvt.c (build_type_conversion): Adjust.
        * call.c (user_harshness): Adjust.
 
        * method.c (emit_thunk): Call temporary_allocation and
        * cvt.c (build_type_conversion): Adjust.
        * call.c (user_harshness): Adjust.
 
        * method.c (emit_thunk): Call temporary_allocation and
-       permanent_allocation around the ASM_OUTPUT_MI_THUNK case, too.
+       permanent_allocation around the ASM_OUTPUT_MI_THUNK case, too.
 
        * tree.c (build_cplus_array_type): Handle tweaking of
 
        * tree.c (build_cplus_array_type): Handle tweaking of
-       TYPE_MAIN_VARIANT here.
+       TYPE_MAIN_VARIANT here.
        * typeck.c (common_type): Not here.
 
        * typeck.c (complete_type): Only try to complete an array type if
        * typeck.c (common_type): Not here.
 
        * typeck.c (complete_type): Only try to complete an array type if
-       it has a domain.
+       it has a domain.
 
 Mon May 20 14:55:59 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon May 20 14:55:59 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2393,7 +2486,7 @@ Mon May 20 14:55:59 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Fri May 17 16:41:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Re-set
 Fri May 17 16:41:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Re-set
-       CLASSTYPE_GOT_SEMICOLON after calling finish_struct_1.
+       CLASSTYPE_GOT_SEMICOLON after calling finish_struct_1.
 
 Fri May 17 14:56:55 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Fri May 17 14:56:55 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -2429,7 +2522,7 @@ Thu May 16 15:29:33 1996  Bob Manson  <manson@charmed.cygnus.com>
 Thu May 16 13:38:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Remove obsolete check for
 Thu May 16 13:38:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Remove obsolete check for
-       access declarations.
+       access declarations.
 
 Thu May 16 13:34:15 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Thu May 16 13:34:15 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -2516,7 +2609,7 @@ Fri May 10 11:09:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cvt.c (convert_fn_ptr): We don't use thunks for pmfs.
 
        * method.c (emit_thunk): Set flag_omit_frame_pointer in default
        * cvt.c (convert_fn_ptr): We don't use thunks for pmfs.
 
        * method.c (emit_thunk): Set flag_omit_frame_pointer in default
-       code.
+       code.
 
 Thu May  9 18:18:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Thu May  9 18:18:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2534,20 +2627,20 @@ Tue May  7 20:39:57 1996  Mike Stump  <mrs@cygnus.com>
 Mon May  6 01:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_file): Don't try to emit functions that haven't
 Mon May  6 01:23:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_file): Don't try to emit functions that haven't
-       been compiled.
+       been compiled.
 
 Fri May  3 09:30:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Oops.
 
        * decl.c (maybe_push_to_top_level): Do save previous_class_*.
 
 Fri May  3 09:30:13 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Oops.
 
        * decl.c (maybe_push_to_top_level): Do save previous_class_*.
-       Also store the bindings from previous_class_values.
+       Also store the bindings from previous_class_values.
        (pop_from_top_level): Restore them.
 
 Thu May  2 21:56:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Only write out vtable if its
        (pop_from_top_level): Restore them.
 
 Thu May  2 21:56:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_vtable_vardecl): Only write out vtable if its
-       symbol has been referenced.
+       symbol has been referenced.
        (finish_file): Re-join synthesis/vtable loop with inline emission
        loop, disable inlining when an inline is output.
 
        (finish_file): Re-join synthesis/vtable loop with inline emission
        loop, disable inlining when an inline is output.
 
@@ -2567,21 +2660,21 @@ Thu May  2 16:21:17 1996  Mike Stump  <mrs@cygnus.com>
 Thu May  2 11:26:41 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (maybe_push_to_top_level): Clear out class-level bindings
 Thu May  2 11:26:41 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (maybe_push_to_top_level): Clear out class-level bindings
-       cache.
+       cache.
 
 Wed May  1 11:26:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_file): Also use sentries for vars with
 
 Wed May  1 11:26:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (finish_file): Also use sentries for vars with
-       DECL_ONE_ONLY or DECL_WEAK set (should any such happen to be
-       created).
+       DECL_ONE_ONLY or DECL_WEAK set (should any such happen to be
+       created).
 
        * lex.c (handle_cp_pragma): Disable #pragma
 
        * lex.c (handle_cp_pragma): Disable #pragma
-       interface/implementation if SUPPORTS_ONE_ONLY > 1.
+       interface/implementation if SUPPORTS_ONE_ONLY > 1.
 
 Tue Apr 30 11:25:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (emit_thunk): Wrap default case in
 
 Tue Apr 30 11:25:46 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (emit_thunk): Wrap default case in
-       temporary/permanent_allocation.
+       temporary/permanent_allocation.
 
        * method.c (make_thunk): Use DECL_ONE_ONLY.
        (emit_thunk): Call assemble_end_function.
 
        * method.c (make_thunk): Use DECL_ONE_ONLY.
        (emit_thunk): Call assemble_end_function.
@@ -2601,10 +2694,10 @@ Mon Apr 29 14:32:47 1996  Mike Stump  <mrs@cygnus.com>
 Mon Apr 29 00:27:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (build_vtable_entry): Don't build thunks for abstract
 Mon Apr 29 00:27:53 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (build_vtable_entry): Don't build thunks for abstract
-       virtuals.
+       virtuals.
 
        * lex.c (real_yylex): Fix handling of __PRETTY_FUNCTION__ like C
 
        * lex.c (real_yylex): Fix handling of __PRETTY_FUNCTION__ like C
-       frontend.
+       frontend.
 
 Sat Apr 27 16:45:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Sat Apr 27 16:45:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2637,7 +2730,7 @@ Wed Apr 24 15:41:15 1996  Bob Manson  <manson@charmed.cygnus.com>
        definition of flagged_type_tree is found before it is used.
        * lex.c: Likewise.
        * parse.y: Added the ftype member to the type union, and changed a
        definition of flagged_type_tree is found before it is used.
        * lex.c: Likewise.
        * parse.y: Added the ftype member to the type union, and changed a
-       number of rules to use it instead of ttype. Added calls to
+       number of rules to use it instead of ttype. Added calls to
        check_for_new_type() as appropriate.
        * typeck2.c (check_for_new_type): New function for checking
        if a newly defined type appears in the specified tree.
        check_for_new_type() as appropriate.
        * typeck2.c (check_for_new_type): New function for checking
        if a newly defined type appears in the specified tree.
@@ -2669,21 +2762,21 @@ Tue Apr 23 10:52:56 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Apr 22 17:28:27 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Put static data member templates
 Mon Apr 22 17:28:27 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl2.c (import_export_decl): Put static data member templates
-       into common storage, or make them weak, depending on whether they
-       are dynamically or statically initialized.
+       into common storage, or make them weak, depending on whether they
+       are dynamically or statically initialized.
        (get_sentry): New function.
        (finish_file): Do import_export_decl for static data members before
        building the init/fini functions.  Don't init/fini a variable that's
        EXTERNAL.  Use a sentry for variables in common.  Fix mismatching
        push/pop_temp_slots.
        * decl.c (cp_finish_decl): If DECL_NOT_REALLY_EXTERN, do the
        (get_sentry): New function.
        (finish_file): Do import_export_decl for static data members before
        building the init/fini functions.  Don't init/fini a variable that's
        EXTERNAL.  Use a sentry for variables in common.  Fix mismatching
        push/pop_temp_slots.
        * decl.c (cp_finish_decl): If DECL_NOT_REALLY_EXTERN, do the
-       expand_static_init thang.
+       expand_static_init thang.
        * method.c (get_id_2): New function.
 
 Mon Apr 22 15:32:45 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * parse.y (empty_parms): Make sure we use C++-style prototypes
        * method.c (get_id_2): New function.
 
 Mon Apr 22 15:32:45 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * parse.y (empty_parms): Make sure we use C++-style prototypes
-       when we're declaring member functions.
+       when we're declaring member functions.
 
 Sun Apr 21 10:08:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Sun Apr 21 10:08:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2693,12 +2786,12 @@ Sun Apr 21 10:08:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Apr 18 08:56:54 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (make_typename_type): Handle getting a TYPE_DECL for a
 Thu Apr 18 08:56:54 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (make_typename_type): Handle getting a TYPE_DECL for a
-       name.
+       name.
        * parse.y (base_class.1): Allow 'typename foo::bar'.
 
        * lex.c (check_newline): Remove #pragma code that plays with the
        * parse.y (base_class.1): Allow 'typename foo::bar'.
 
        * lex.c (check_newline): Remove #pragma code that plays with the
-       input stream, since we now deal with tokens.  Clear nextchar when
-       we're done.
+       input stream, since we now deal with tokens.  Clear nextchar when
+       we're done.
        (handle_cp_pragma): Use real_yylex.
        (handle_sysv_pragma): Don't do skipline here.  Only call real_yylex
        in one place.
        (handle_cp_pragma): Use real_yylex.
        (handle_sysv_pragma): Don't do skipline here.  Only call real_yylex
        in one place.
@@ -2719,16 +2812,16 @@ Wed Apr 17 16:51:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Wed Apr 17 15:02:40 1996  Mike Stump  <mrs@cygnus.com>
 
        * typeck.c (build_reinterpret_cast): Handle pointer to member
 Wed Apr 17 15:02:40 1996  Mike Stump  <mrs@cygnus.com>
 
        * typeck.c (build_reinterpret_cast): Handle pointer to member
-       functions.
+       functions.
 
 Wed Apr 17 12:28:26 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
        * lex.c (handle_cp_pragma): New function, with decl, doing the cc1plus
 
 Wed Apr 17 12:28:26 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
        * lex.c (handle_cp_pragma): New function, with decl, doing the cc1plus
-       pragmas.
+       pragmas.
        (check_newline): Put the vtable/unit/implementation/interface pragma
        (check_newline): Put the vtable/unit/implementation/interface pragma
-       code into handle_cp_pragma, replacing it with a call.
+       code into handle_cp_pragma, replacing it with a call.
        (handle_sysv_pragma): Give int return type, and take FINPUT and TOKEN
        (handle_sysv_pragma): Give int return type, and take FINPUT and TOKEN
-       args.  Get the next token after handling the pragma token.
+       args.  Get the next token after handling the pragma token.
 
 Wed Apr 17 10:28:34 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Wed Apr 17 10:28:34 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2748,7 +2841,7 @@ Tue Apr 16 13:44:58 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * tree.def: Add VEC_INIT_EXPR.
        * expr.c (cplus_expand_expr): Handle it.
        * init.c (build_new): Use it instead of the RTL_EXPR nastiness and
        * tree.def: Add VEC_INIT_EXPR.
        * expr.c (cplus_expand_expr): Handle it.
        * init.c (build_new): Use it instead of the RTL_EXPR nastiness and
-       the extra file-scope symbol nastiness.
+       the extra file-scope symbol nastiness.
 
 Mon Apr 15 16:21:29 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Apr 15 16:21:29 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -2766,9 +2859,9 @@ Sun Apr 14 11:34:39 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Fri Apr 12 09:08:27 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * call.c (build_method_call): Remember the original basetype we
 Fri Apr 12 09:08:27 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * call.c (build_method_call): Remember the original basetype we
-       were called with. Give an error message instead of trying
-       (incorrectly) to call a non-static member function through a
-       non-inherited class.
+       were called with. Give an error message instead of trying
+       (incorrectly) to call a non-static member function through a
+       non-inherited class.
 
        * search.c (expand_upcast_fixups): Mark the new fixup as
        DECL_ARTIFICIAL.
 
        * search.c (expand_upcast_fixups): Mark the new fixup as
        DECL_ARTIFICIAL.
@@ -2845,23 +2938,23 @@ Tue Apr  9 14:20:57 1996  Mike Stump  <mrs@cygnus.com>
 Tue Apr  9 12:10:26 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Handle downcasting to X* given
 Tue Apr  9 12:10:26 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * rtti.c (build_dynamic_cast): Handle downcasting to X* given
-       other X subobjects in the most derived type.  Ack.
+       other X subobjects in the most derived type.  Ack.
 
        * rtti.c (build_dynamic_cast): No need to strip cv-quals here,
 
        * rtti.c (build_dynamic_cast): No need to strip cv-quals here,
-       get_typeid will do it for us.
+       get_typeid will do it for us.
        (get_typeid_1): Break out call-building for expand_*_desc to use.
        (get_typeid): Call it.
        (expand_*_desc): Likewise.
        * decl.c (init_decl_processing): Don't set TYPE_BUILT_IN on char *
        (get_typeid_1): Break out call-building for expand_*_desc to use.
        (get_typeid): Call it.
        (expand_*_desc): Likewise.
        * decl.c (init_decl_processing): Don't set TYPE_BUILT_IN on char *
-       and void *.
+       and void *.
        (init_decl_processing): Lose builtin_type_tdescs lossage.
        * decl2.c (finish_vtable_vardecl): Remove obsolete code.
 
 Mon Apr  8 17:23:23 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (tsubst): When calling set_nested_typename, use
        (init_decl_processing): Lose builtin_type_tdescs lossage.
        * decl2.c (finish_vtable_vardecl): Remove obsolete code.
 
 Mon Apr  8 17:23:23 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * pt.c (tsubst): When calling set_nested_typename, use
-       TYPE_NESTED_NAME (current_class_type) instead of
-       current_class_name.
+       TYPE_NESTED_NAME (current_class_type) instead of
+       current_class_name.
 
        * decl.c (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
 
        * decl.c (pushdecl): Likewise.
        (pushdecl_class_level): Likewise.
@@ -2883,12 +2976,12 @@ Sat Apr  6 13:56:27 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * rtti.c (synthesize_tinfo_fn): Handle enums and pmfs.
 
        * decl2.c (finish_file): Don't synthesize artificial functions
        * rtti.c (synthesize_tinfo_fn): Handle enums and pmfs.
 
        * decl2.c (finish_file): Don't synthesize artificial functions
-       that are external and not inline.
+       that are external and not inline.
 
        * rtti.c (get_tinfo_fn): If at_eof, call import_export_decl.
 
        * decl2.c (finish_file): Handle having new inlines added to
 
        * rtti.c (get_tinfo_fn): If at_eof, call import_export_decl.
 
        * decl2.c (finish_file): Handle having new inlines added to
-       saved_inlines by synthesis.
+       saved_inlines by synthesis.
 
        * rtti.c (get_bad_cast_node): Don't require <typeinfo>.
 
 
        * rtti.c (get_bad_cast_node): Don't require <typeinfo>.
 
@@ -2920,17 +3013,17 @@ Fri Apr  5 17:02:09 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h: Add decls.
 
        * method.c (hack_identifier): Also convert component_refs from
        * cp-tree.h: Add decls.
 
        * method.c (hack_identifier): Also convert component_refs from
-       references.
+       references.
 
        * lex.c (cons_up_default_function): Use the type, not the name, in
 
        * lex.c (cons_up_default_function): Use the type, not the name, in
-       declspecs.
+       declspecs.
 
        * decl2.c (import_export_vtable): Fix weak vtables.
 
 Fri Apr  5 13:30:17 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * search.c (get_base_distance_recursive): Fix access checks for
 
        * decl2.c (import_export_vtable): Fix weak vtables.
 
 Fri Apr  5 13:30:17 1996  Bob Manson  <manson@charmed.cygnus.com>
 
        * search.c (get_base_distance_recursive): Fix access checks for
-       protected bases.
+       protected bases.
 
 Fri Apr  5 11:02:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Fri Apr  5 11:02:06 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -2999,13 +3092,13 @@ Fri Mar 29 15:51:36 1996  Bob Manson  <manson@charmed.cygnus.com>
        needs_virtual_dtor with base_has_virtual.
 
        (finish_struct_1): Remove the old code that tried to make default
        needs_virtual_dtor with base_has_virtual.
 
        (finish_struct_1): Remove the old code that tried to make default
-       destructors virtual. Use base_has_virtual when checking if we need
-       to add a vtable entry for the rtti code.
+       destructors virtual. Use base_has_virtual when checking if we need
+       to add a vtable entry for the rtti code.
 
 Fri Mar 29 14:02:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (push_template_decl): Complain about template decl with
 
 Fri Mar 29 14:02:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (push_template_decl): Complain about template decl with
-       inappropriate declaration.
+       inappropriate declaration.
 
 Fri Mar 29 12:15:35 1996  Bob Manson  <manson@charmed.cygnus.com>
 
 
 Fri Mar 29 12:15:35 1996  Bob Manson  <manson@charmed.cygnus.com>
 
@@ -3027,7 +3120,7 @@ Thu Mar 28 16:41:39 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * decl.c (shadow_tag): Fix error about anon union with methods.
 
        * parse.y (self_reference): Only generate a self-reference if this
        * decl.c (shadow_tag): Fix error about anon union with methods.
 
        * parse.y (self_reference): Only generate a self-reference if this
-       is a non-template class.
+       is a non-template class.
        (opt.component_decl_list): Only use it if it was generated.
 
        * parse.y (component_decl_1): Use constructor_declarator.
        (opt.component_decl_list): Only use it if it was generated.
 
        * parse.y (component_decl_1): Use constructor_declarator.
@@ -3043,7 +3136,7 @@ Thu Mar 28 15:11:35 1996  Bob Manson  <manson@charmed.cygnus.com>
 Thu Mar 28 14:49:26 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (process_template_parm): Allow template type parms to be
 Thu Mar 28 14:49:26 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (process_template_parm): Allow template type parms to be
-       used as types for template const parms.
+       used as types for template const parms.
 
 Wed Mar 27 15:51:19 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Wed Mar 27 15:51:19 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -3053,7 +3146,7 @@ Wed Mar 27 15:51:19 1996  Mike Stump  <mrs@cygnus.com>
 Wed Mar 27 10:14:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (lookup_name_real): Be even more picky about the
 Wed Mar 27 10:14:30 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (lookup_name_real): Be even more picky about the
-       ambiguous lookup warning.
+       ambiguous lookup warning.
        (grokdeclarator): Tweak SCOPE_REF constructor declarators here.
        * parse.y (constructor_declarator): Rather than here.
 
        (grokdeclarator): Tweak SCOPE_REF constructor declarators here.
        * parse.y (constructor_declarator): Rather than here.
 
@@ -3075,7 +3168,7 @@ Tue Mar 26 13:41:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h: Adjust.
 
        * pt.c (do_function_instantiation): Separate handling of member
        * cp-tree.h: Adjust.
 
        * pt.c (do_function_instantiation): Separate handling of member
-       functions and non-member functions properly.
+       functions and non-member functions properly.
 
 Mon Mar 25 14:23:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Mar 25 14:23:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -3098,7 +3191,7 @@ Mon Mar 25 13:30:42 1996  Bob Manson  <manson@charmed.cygnus.com>
 Mon Mar 25 13:07:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (cp_finish_decl): Don't build cleanups for static
 Mon Mar 25 13:07:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (cp_finish_decl): Don't build cleanups for static
-       variables here.
+       variables here.
 
 Fri Mar 22 17:57:55 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Fri Mar 22 17:57:55 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -3112,19 +3205,19 @@ Fri Mar 22 17:57:55 1996  Mike Stump  <mrs@cygnus.com>
 Fri Mar 22 13:48:29 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grokdeclarator): Call bad_specifiers for typedefs.  Also
 Fri Mar 22 13:48:29 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grokdeclarator): Call bad_specifiers for typedefs.  Also
-       give an error if initialized.  Pedwarn about nested type with the
-       same name as its enclosing class.
+       give an error if initialized.  Pedwarn about nested type with the
+       same name as its enclosing class.
 
        * pt.c (tsubst, case TYPE_DECL): Set DECL_CONTEXT.
 
        * typeck.c (require_complete_type): Be sure to instantiate the
 
        * pt.c (tsubst, case TYPE_DECL): Set DECL_CONTEXT.
 
        * typeck.c (require_complete_type): Be sure to instantiate the
-       MAIN_VARIANT of the type.
+       MAIN_VARIANT of the type.
 
        * decl2.c (finish_file): Instantiate pending templates before
 
        * decl2.c (finish_file): Instantiate pending templates before
-       processing static constructors and destructors.
+       processing static constructors and destructors.
 
        * pt.c (instantiate_decl): Don't instantiate functions at toplevel
 
        * pt.c (instantiate_decl): Don't instantiate functions at toplevel
-       unless at_eof.
+       unless at_eof.
 
 Fri Mar 22 09:30:17 1996  Bob Manson  <manson@beauty.cygnus.com>
 
 
 Fri Mar 22 09:30:17 1996  Bob Manson  <manson@beauty.cygnus.com>
 
@@ -3137,10 +3230,10 @@ Fri Mar 22 09:30:17 1996  Bob Manson  <manson@beauty.cygnus.com>
 Wed Mar 20 14:51:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * parse.y (named_complex_class_head_sans_basetype): Don't crash on
 Wed Mar 20 14:51:55 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * parse.y (named_complex_class_head_sans_basetype): Don't crash on
-       definition of nonexistent nested type.
+       definition of nonexistent nested type.
 
        * error.c (dump_decl, case TYPE_DECL): Fix decision for whether or
 
        * error.c (dump_decl, case TYPE_DECL): Fix decision for whether or
-       not to say 'typedef'.
+       not to say 'typedef'.
 
 Wed Mar 20 00:11:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Wed Mar 20 00:11:47 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -3156,7 +3249,7 @@ Tue Mar 19 17:56:03 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * decl2.c (build_expr_from_tree): Likewise.
 
        * pt.c (mangle_class_name_for_template): Always allocate
        * decl2.c (build_expr_from_tree): Likewise.
 
        * pt.c (mangle_class_name_for_template): Always allocate
-       scratch_firstobj.
+       scratch_firstobj.
 
 Tue Mar 19 16:34:31 1996  Bob Manson  <manson@beauty.cygnus.com>
 
 
 Tue Mar 19 16:34:31 1996  Bob Manson  <manson@beauty.cygnus.com>
 
@@ -3166,8 +3259,8 @@ Tue Mar 19 16:34:31 1996  Bob Manson  <manson@beauty.cygnus.com>
 Tue Mar 19 16:00:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Don't bother setting up
 Tue Mar 19 16:00:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): Don't bother setting up
-       CLASSTYPE_TAGS explicitly, as the nested types will add
-       themselves.
+       CLASSTYPE_TAGS explicitly, as the nested types will add
+       themselves.
 
 Tue Mar 19 15:48:43 1996  Bob Manson  <manson@beauty.cygnus.com>
 
 
 Tue Mar 19 15:48:43 1996  Bob Manson  <manson@beauty.cygnus.com>
 
@@ -3179,19 +3272,19 @@ Tue Mar 19 15:48:43 1996  Bob Manson  <manson@beauty.cygnus.com>
 Tue Mar 19 09:21:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * lex.c (do_identifier): Only do name consistency check if we're
 Tue Mar 19 09:21:35 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * lex.c (do_identifier): Only do name consistency check if we're
-       parsing.
+       parsing.
 
        * pt.c (push_template_decl): Don't crash if we get a member defn
        that doesn't match.
 
        * decl.c (xref_tag_from_type): New function to do an xref without
 
        * pt.c (push_template_decl): Don't crash if we get a member defn
        that doesn't match.
 
        * decl.c (xref_tag_from_type): New function to do an xref without
-       always having to figure out code_type_node.
+       always having to figure out code_type_node.
        * cp-tree.h: Declare it.
        * pt.c (instantiate_class_template): Use it for friend classes.
        * cp-tree.h: Declare it.
        * pt.c (instantiate_class_template): Use it for friend classes.
-       (lookup_template_class): Use it.
+       (lookup_template_class): Use it.
 
        * typeck2.c (build_functional_cast): Pull out a single parm before
 
        * typeck2.c (build_functional_cast): Pull out a single parm before
-       passing it to build_c_cast.
+       passing it to build_c_cast.
 
 Tue Mar 19 09:07:15 1996  Bob Manson  <manson@beauty.cygnus.com>
 
 
 Tue Mar 19 09:07:15 1996  Bob Manson  <manson@beauty.cygnus.com>
 
@@ -3201,10 +3294,10 @@ Tue Mar 19 09:07:15 1996  Bob Manson  <manson@beauty.cygnus.com>
 Mon Mar 18 21:57:54 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_c_cast): Don't pull single TEMPLATE_DECL out of
 Mon Mar 18 21:57:54 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * typeck.c (build_c_cast): Don't pull single TEMPLATE_DECL out of
-       an overload list.
+       an overload list.
 
        * lex.c (cons_up_default_function): Really, now, interface hackery
 
        * lex.c (cons_up_default_function): Really, now, interface hackery
-       does not apply to synthesized methods.
+       does not apply to synthesized methods.
 
 Mon Mar 18 18:20:57 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Mon Mar 18 18:20:57 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -3275,7 +3368,7 @@ Mon Mar 18 13:19:03 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h: Update.
 
        * tree.c (min_tree_cons): Call copy_to_permanent for the purpose
        * cp-tree.h: Update.
 
        * tree.c (min_tree_cons): Call copy_to_permanent for the purpose
-       and value.
+       and value.
 
 Mon Mar 18 11:25:52 1996  Bob Manson  <manson@beauty.cygnus.com>
 
 
 Mon Mar 18 11:25:52 1996  Bob Manson  <manson@beauty.cygnus.com>
 
@@ -3290,15 +3383,15 @@ Mon Mar 18 10:11:46 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Fri Mar 15 11:03:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_decl): Only call import_export_decl if at_eof
 Fri Mar 15 11:03:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_decl): Only call import_export_decl if at_eof
-       and ! DECL_INLINE.
+       and ! DECL_INLINE.
 
        * decl.c (finish_function): Don't set nested based on
 
        * decl.c (finish_function): Don't set nested based on
-       hack_decl_function_context.
+       hack_decl_function_context.
        * parse.y (function_try_block): Check for nested function.
        (pending_inlines): Likewise.
 
        * decl2.c (build_expr_from_tree): If a unary op already has a
        * parse.y (function_try_block): Check for nested function.
        (pending_inlines): Likewise.
 
        * decl2.c (build_expr_from_tree): If a unary op already has a
-       type, just return it.
+       type, just return it.
 
        * decl2.c (finish_prevtable_vardecl): Use ADJUST_VTABLE_LINKAGE.
 
 
        * decl2.c (finish_prevtable_vardecl): Use ADJUST_VTABLE_LINKAGE.
 
@@ -3311,7 +3404,7 @@ Fri Mar 15 11:03:57 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h: Adjust return types.
 
        * class.c (delete_duplicate_fields_1): Don't complain about
        * cp-tree.h: Adjust return types.
 
        * class.c (delete_duplicate_fields_1): Don't complain about
-       duplicate nested types if they're the same type.
+       duplicate nested types if they're the same type.
        (finish_struct): Remove check for duplicate.
        * decl2.c (grokfield): Don't check for typedef of anonymous type.
 
        (finish_struct): Remove check for duplicate.
        * decl2.c (grokfield): Don't check for typedef of anonymous type.
 
@@ -3320,20 +3413,20 @@ Thu Mar 14 10:00:19 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * cp-tree.h: Lose SIGNATURE_GROKKING_TYPEDEF.
 
        * decl.c (grokdeclarator): Lose special handling of class-level
        * cp-tree.h: Lose SIGNATURE_GROKKING_TYPEDEF.
 
        * decl.c (grokdeclarator): Lose special handling of class-level
-       typedef.  Lose SIGNATURE_GROKKING_TYPEDEF.  Set
-       SIGNATURE_HAS_OPAQUE_TYPEDECLS later.
+       typedef.  Lose SIGNATURE_GROKKING_TYPEDEF.  Set
+       SIGNATURE_HAS_OPAQUE_TYPEDECLS later.
 
        * cvt.c (convert_pointer_to_real): Retain cv-quals in conversion.
 
        * pt.c (tsubst_copy): Strip cv-quals from destructor name types.
 
        * search.c (compute_access): Fix handling of anonymous union
 
        * cvt.c (convert_pointer_to_real): Retain cv-quals in conversion.
 
        * pt.c (tsubst_copy): Strip cv-quals from destructor name types.
 
        * search.c (compute_access): Fix handling of anonymous union
-       members.
+       members.
        * class.c (finish_struct_anon): Propagate TREE_{PRIVATE,PROTECTED}
        * class.c (finish_struct_anon): Propagate TREE_{PRIVATE,PROTECTED}
-       from anonymous unions to their members.
+       from anonymous unions to their members.
 
        * typeck.c (build_x_function_call): For static member functions,
 
        * typeck.c (build_x_function_call): For static member functions,
-       hand off to build_member_call.
+       hand off to build_member_call.
 
 Wed Mar 13 14:03:34 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Wed Mar 13 14:03:34 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -3347,14 +3440,14 @@ Tue Mar 12 14:36:02 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (expand_vec_init): Handle lists, use convert_for_initialization
 
        * typeck.c (convert_for_initialization): Pass LOOKUP_NO_CONVERSION
        (expand_vec_init): Handle lists, use convert_for_initialization
 
        * typeck.c (convert_for_initialization): Pass LOOKUP_NO_CONVERSION
-       when converting to an aggregate type.
+       when converting to an aggregate type.
        * cvt.c (cp_convert): Pass it through.
 
        * typeck.c (build_conditional_expr): Handle user-defined
        * cvt.c (cp_convert): Pass it through.
 
        * typeck.c (build_conditional_expr): Handle user-defined
-       conversions to slightly different types.
+       conversions to slightly different types.
 
        * decl.c (grokdeclarator): Force an array type in a parm to be
 
        * decl.c (grokdeclarator): Force an array type in a parm to be
-       permanent.
+       permanent.
 
        * decl2.c (do_using_directive): Sorry.
        (do_namespace_alias): Likewise.
 
        * decl2.c (do_using_directive): Sorry.
        (do_namespace_alias): Likewise.
@@ -3387,7 +3480,7 @@ Thu Mar  7 14:11:49 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * tree.c (cp_build_type_variant): Just return an error_mark_node.
        * decl.c (make_typename_type): Don't try to get the file and line
 
        * tree.c (cp_build_type_variant): Just return an error_mark_node.
        * decl.c (make_typename_type): Don't try to get the file and line
-       of an identifier.
+       of an identifier.
        * typeck.c (comptypes): Handle TYPENAME_TYPE.
 
 Wed Mar  6 18:47:50 1996  Per Bothner  <bothner@kalessin.cygnus.com>
        * typeck.c (comptypes): Handle TYPENAME_TYPE.
 
 Wed Mar  6 18:47:50 1996  Per Bothner  <bothner@kalessin.cygnus.com>
@@ -3398,7 +3491,7 @@ Wed Mar  6 18:47:50 1996  Per Bothner  <bothner@kalessin.cygnus.com>
 Wed Mar  6 09:57:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (build_overload_value): Use DECL_ASSEMBLER_NAME in
 Wed Mar  6 09:57:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (build_overload_value): Use DECL_ASSEMBLER_NAME in
-       referring to addresses of variables and functions.
+       referring to addresses of variables and functions.
 
        * error.c (dump_expr): Support SIZEOF_EXPR.
 
 
        * error.c (dump_expr): Support SIZEOF_EXPR.
 
@@ -3407,12 +3500,12 @@ Wed Mar  6 09:57:36 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * typeck.c (convert_arguments): Call complete_type.
 
        * method.c (hack_identifier): After giving an error, set value to
        * typeck.c (convert_arguments): Call complete_type.
 
        * method.c (hack_identifier): After giving an error, set value to
-       error_mark_node.
+       error_mark_node.
 
 Tue Mar  5 16:00:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * tree.c (hack_decl_function_context): Kludge around DECL_CONTEXT
 
 Tue Mar  5 16:00:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * tree.c (hack_decl_function_context): Kludge around DECL_CONTEXT
-       lossage for local classes.
+       lossage for local classes.
        * cp-tree.h: Declare it.
        * decl.c (lookup_name_real): Evil, painful hack for local classes.
        (grokfndecl): Set DECL_CLASS_CONTEXT and DECL_NO_STATIC_CHAIN here.
        * cp-tree.h: Declare it.
        * decl.c (lookup_name_real): Evil, painful hack for local classes.
        (grokfndecl): Set DECL_CLASS_CONTEXT and DECL_NO_STATIC_CHAIN here.
@@ -3424,7 +3517,7 @@ Tue Mar  5 16:00:15 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * lex.c (process_next_inline): Likewise.
        (do_pending_inlines): Likewise.
        * decl2.c (finish_file): Unset DECL_STATIC_FUNCTION_P when we're
        * lex.c (process_next_inline): Likewise.
        (do_pending_inlines): Likewise.
        * decl2.c (finish_file): Unset DECL_STATIC_FUNCTION_P when we're
-       done with it.
+       done with it.
 
 Mon Mar  4 22:38:39 1996  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
 
 
 Mon Mar  4 22:38:39 1996  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
 
@@ -3435,9 +3528,9 @@ Mon Mar  4 22:38:39 1996  Gerald Baumgartner  <gb@alexander.cs.purdue.edu>
 Tue Mar  5 10:21:01 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (hack_identifier): Requiring a static chain is now a
 Tue Mar  5 10:21:01 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * method.c (hack_identifier): Requiring a static chain is now a
-       hard error.
+       hard error.
        * decl.c (grokdeclarator): Set DECL_NO_STATIC_CHAIN on nested
        * decl.c (grokdeclarator): Set DECL_NO_STATIC_CHAIN on nested
-       functions.
+       functions.
 
 Mon Mar  4 20:03:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Mar  4 20:03:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -3449,7 +3542,7 @@ Mon Mar  4 20:03:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * pt.c (tsubst_expr): Likewise.
 
        * pt.c (tsubst): Use tsubst_expr for the second operand of an
        * pt.c (tsubst_expr): Likewise.
 
        * pt.c (tsubst): Use tsubst_expr for the second operand of an
-       ARRAY_REF.
+       ARRAY_REF.
 
        * decl.c (maybe_push_to_top_level): Don't save previous_class_type.
        (poplevel_class): Set it here.
 
        * decl.c (maybe_push_to_top_level): Don't save previous_class_type.
        (poplevel_class): Set it here.
@@ -3457,14 +3550,14 @@ Mon Mar  4 20:03:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * class.c (pushclass): Don't set it here.
 
        * decl.c (maybe_push_to_top_level): Save current_template_parms,
        * class.c (pushclass): Don't set it here.
 
        * decl.c (maybe_push_to_top_level): Save current_template_parms,
-       and clear it if !pseudo.
+       and clear it if !pseudo.
        (pop_from_top_level): Restore it.
 
        * decl2.c (finish_file): Push the dummy each time we walk the list
        (pop_from_top_level): Restore it.
 
        * decl2.c (finish_file): Push the dummy each time we walk the list
-       of vtables.
+       of vtables.
 
        * error.c (dump_expr): Support LOOKUP_EXPR and actually do
 
        * error.c (dump_expr): Support LOOKUP_EXPR and actually do
-       something for CAST_EXPR.
+       something for CAST_EXPR.
        
 Mon Feb 19 14:49:18 1996  Rusty Russell  <rusty@adelaide.maptek.com.au>
 
        
 Mon Feb 19 14:49:18 1996  Rusty Russell  <rusty@adelaide.maptek.com.au>
 
@@ -3480,7 +3573,7 @@ Mon Mar  4 15:03:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * tree.c (mapcar): Propagate const and volatile properly.
 
        * typeck.c (complete_type): Be sure to instantiate the
        * tree.c (mapcar): Propagate const and volatile properly.
 
        * typeck.c (complete_type): Be sure to instantiate the
-       MAIN_VARIANT of the type.
+       MAIN_VARIANT of the type.
 
        * method.c (synthesize_method): Class interface hackery does not
        apply to synthesized methods.
 
        * method.c (synthesize_method): Class interface hackery does not
        apply to synthesized methods.
@@ -3488,10 +3581,10 @@ Mon Mar  4 15:03:11 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Mon Mar  4 14:05:23 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (comp_template_args): Use comptypes rather than just
 Mon Mar  4 14:05:23 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (comp_template_args): Use comptypes rather than just
-       checking for TEMPLATE_TYPE_PARM equivalence.
+       checking for TEMPLATE_TYPE_PARM equivalence.
 
        * typeck.c (build_x_function_call): Call complete_type before
 
        * typeck.c (build_x_function_call): Call complete_type before
-       checking TYPE_OVERLOADS_CALL_EXPR.
+       checking TYPE_OVERLOADS_CALL_EXPR.
 
 Mon Mar  4 18:48:30 1996  Manfred Hollstein   <manfred@lts.sel.alcatel.de>
 
 
 Mon Mar  4 18:48:30 1996  Manfred Hollstein   <manfred@lts.sel.alcatel.de>
 
@@ -3500,25 +3593,25 @@ Mon Mar  4 18:48:30 1996  Manfred Hollstein   <manfred@lts.sel.alcatel.de>
 Fri Mar  1 13:09:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): If we don't have a pattern
 Fri Mar  1 13:09:33 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_class_template): If we don't have a pattern
-       yet, that's OK.
+       yet, that's OK.
        (coerce_template_parms): If we see a local class, bail.
 
        * decl.c (grok_reference_init): Make sure there's a type before
        (coerce_template_parms): If we see a local class, bail.
 
        * decl.c (grok_reference_init): Make sure there's a type before
-       checking its code.
+       checking its code.
 
        * pt.c (do_function_instantiation): Avoid crashing on invalid decls.
        (push_template_decl): Likewise.
 
        * parse.y (named_class_head): Set
 
        * pt.c (do_function_instantiation): Avoid crashing on invalid decls.
        (push_template_decl): Likewise.
 
        * parse.y (named_class_head): Set
-       CLASSTYPE_TEMPLATE_SPECIALIZATION here if we have basetypes.
+       CLASSTYPE_TEMPLATE_SPECIALIZATION here if we have basetypes.
 
        * decl.c (xref_tag): Diagnose redeclaration of template
 
        * decl.c (xref_tag): Diagnose redeclaration of template
-       type-parameter name.
+       type-parameter name.
 
        * error.c (dump_type): Handle anonymous template type parms.
 
        * pt.c (instantiate_template): Use TYPE_MAIN_DECL instead of
 
        * error.c (dump_type): Handle anonymous template type parms.
 
        * pt.c (instantiate_template): Use TYPE_MAIN_DECL instead of
-       TYPE_STUB_DECL.
+       TYPE_STUB_DECL.
        (coerce_template_parms): Likewise.
 
 Thu Feb 29 16:26:01 1996  Mike Stump  <mrs@cygnus.com>
        (coerce_template_parms): Likewise.
 
 Thu Feb 29 16:26:01 1996  Mike Stump  <mrs@cygnus.com>
@@ -3529,11 +3622,11 @@ Thu Feb 29 16:26:01 1996  Mike Stump  <mrs@cygnus.com>
 Thu Feb 29 08:20:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_template): Take the MAIN_VARIANT of the type
 Thu Feb 29 08:20:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (instantiate_template): Take the MAIN_VARIANT of the type
-       before trying to get its STUB_DECL.
+       before trying to get its STUB_DECL.
        (coerce_template_parms): Likewise.
 
        * parse.y (template_type_parm): If they didn't use 'class',
        (coerce_template_parms): Likewise.
 
        * parse.y (template_type_parm): If they didn't use 'class',
-       pretend they did after giving an error.
+       pretend they did after giving an error.
 
        * pt.c (coerce_template_parms): Diagnose use of local class.
 
 
        * pt.c (coerce_template_parms): Diagnose use of local class.
 
@@ -3544,15 +3637,15 @@ Thu Feb 29 08:20:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * parse.y (named_class_head): Diagnose mismatching types and tags.
 
        * decl.c (pushdecl): Type decls and class templates clash with
        * parse.y (named_class_head): Diagnose mismatching types and tags.
 
        * decl.c (pushdecl): Type decls and class templates clash with
-       artificial type decls, not hide them.
+       artificial type decls, not hide them.
 
        * decl.c (redeclaration_error_message): Diagnose redefinition of
 
        * decl.c (redeclaration_error_message): Diagnose redefinition of
-       templates properly.
+       templates properly.
        (duplicate_decls): Diagnose disallowed overloads for template
        functions, too.
 
        * decl.c (start_decl): Call complete_type before checking for a
        (duplicate_decls): Diagnose disallowed overloads for template
        functions, too.
 
        * decl.c (start_decl): Call complete_type before checking for a
-       destructor.
+       destructor.
 
        * pt.c (tsubst): Use tsubst_expr on the elts of a VEC.
 
 
        * pt.c (tsubst): Use tsubst_expr on the elts of a VEC.
 
@@ -3561,18 +3654,18 @@ Thu Feb 29 08:20:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Wed Feb 28 09:28:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grok_op_properties): Don't check for operator++(int) in
 Wed Feb 28 09:28:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grok_op_properties): Don't check for operator++(int) in
-       a template.
+       a template.
 
        * tree.c (perm_manip): Return a copy of variable and function
 
        * tree.c (perm_manip): Return a copy of variable and function
-       decls with external linkage.
+       decls with external linkage.
 
        * tree.def: Change some of the min tree codes to type "1".
        * pt.c (uses_template_parms): Handle 'e's, return 1 for LOOKUP_EXPRs.
        * method.c (build_overload_int): Emit something arbitrary for
 
        * tree.def: Change some of the min tree codes to type "1".
        * pt.c (uses_template_parms): Handle 'e's, return 1 for LOOKUP_EXPRs.
        * method.c (build_overload_int): Emit something arbitrary for
-       anything but an INTEGER_CST if we're in a template.
+       anything but an INTEGER_CST if we're in a template.
 
        * decl.c (cp_finish_decl): Call complete_type before deciding
 
        * decl.c (cp_finish_decl): Call complete_type before deciding
-       whether or not to lay out the decl.
+       whether or not to lay out the decl.
 
        * lex.c (do_identifier): Check for DECL_INITIAL before using it.
 
 
        * lex.c (do_identifier): Check for DECL_INITIAL before using it.
 
@@ -3581,8 +3674,8 @@ Tue Feb 27 16:35:32 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * typeck2.c (build_x_arrow): Call complete_type.
 
        * pt.c (add_pending_template): Broken out.
        * typeck2.c (build_x_arrow): Call complete_type.
 
        * pt.c (add_pending_template): Broken out.
-       (lookup_template_class): If -fexternal-templates, call it for all
-       the methods of implemented types.
+       (lookup_template_class): If -fexternal-templates, call it for all
+       the methods of implemented types.
        (instantiate_class_template): Instead of instantiating them here.
        (instantiate_decl): Handle -fexternal-templates earlier.
 
        (instantiate_class_template): Instead of instantiating them here.
        (instantiate_decl): Handle -fexternal-templates earlier.
 
@@ -3598,7 +3691,7 @@ Tue Feb 27 10:38:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (grokdeclarator): Not here.
 
        * parse.y (template_parm): Expand full_parm inline so we can set
        (grokdeclarator): Not here.
 
        * parse.y (template_parm): Expand full_parm inline so we can set
-       the rule's precedence.
+       the rule's precedence.
 
        * pt.c (tsubst_expr): If we're in a template, just do tsubst_copy.
        (tsubst): tsubst_expr the DECL_INITIAL of FIELD_DECLs.
 
        * pt.c (tsubst_expr): If we're in a template, just do tsubst_copy.
        (tsubst): tsubst_expr the DECL_INITIAL of FIELD_DECLs.
@@ -3612,7 +3705,7 @@ Tue Feb 27 10:38:08 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (tsubst_copy): Likewise.
 
        * lex.c (do_identifier): Do pull the DECL_INITIAL out of a
        (tsubst_copy): Likewise.
 
        * lex.c (do_identifier): Do pull the DECL_INITIAL out of a
-       CONST_DECL for a template parm.
+       CONST_DECL for a template parm.
 
 Mon Feb 26 12:48:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
 
 Mon Feb 26 12:48:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
@@ -3623,7 +3716,7 @@ Mon Feb 26 12:48:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * pt.c (tsubst): Handle pointer-to-function declarators.
 
        * method.c (hack_identifier): If pedantic, diagnose local class
        * pt.c (tsubst): Handle pointer-to-function declarators.
 
        * method.c (hack_identifier): If pedantic, diagnose local class
-       methods that require a static chain.
+       methods that require a static chain.
 
        * decl.c (grok_op_properties): No longer static.
        * cp-tree.h: Declare it.
 
        * decl.c (grok_op_properties): No longer static.
        * cp-tree.h: Declare it.
@@ -3635,21 +3728,21 @@ Mon Feb 26 12:48:18 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Fri Feb 23 14:51:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (coerce_template_parms): Don't coerce an expression using
 Fri Feb 23 14:51:52 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (coerce_template_parms): Don't coerce an expression using
-       template parms.
+       template parms.
        (uses_template_parms): Also check DECL_INITIAL in CONST_DECLs.
        (tsubst): Don't use build_index_2_type if the max_value uses template
        parms.
        * method.c (build_overload_int): Emit something arbitrary for an
        (uses_template_parms): Also check DECL_INITIAL in CONST_DECLs.
        (tsubst): Don't use build_index_2_type if the max_value uses template
        parms.
        * method.c (build_overload_int): Emit something arbitrary for an
-       expression using template parms.
+       expression using template parms.
 
        * parse.y (template_close_bracket): New non-terminal to catch use
 
        * parse.y (template_close_bracket): New non-terminal to catch use
-       of '>>' instead of '> >' in template class names.
+       of '>>' instead of '> >' in template class names.
        (template_type): Use it.
        * Makefile.in (CONFLICTS): Causes one more r/r conflict.
 
        * tree.def: Add CAST_EXPR.
        * typeck2.c (build_functional_cast): Use CAST_EXPR instead of
        (template_type): Use it.
        * Makefile.in (CONFLICTS): Causes one more r/r conflict.
 
        * tree.def: Add CAST_EXPR.
        * typeck2.c (build_functional_cast): Use CAST_EXPR instead of
-       CONVERT_EXPR for minimal_parse_mode.
+       CONVERT_EXPR for minimal_parse_mode.
        * typeck.c (build_c_cast): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * decl2.c (build_expr_from_tree): Likewise.
        * typeck.c (build_c_cast): Likewise.
        * pt.c (tsubst_copy): Likewise.
        * decl2.c (build_expr_from_tree): Likewise.
@@ -3791,7 +3884,7 @@ Thu Feb 22 13:24:15 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Thu Feb 22 13:19:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (do_poplevel): Oops; really return what we get from
 Thu Feb 22 13:19:44 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (do_poplevel): Oops; really return what we get from
-       poplevel this time.
+       poplevel this time.
 
 Thu Feb 22 11:41:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Thu Feb 22 11:41:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -3863,10 +3956,10 @@ Thu Feb 22 11:41:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Thu Feb 22 00:54:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst): Only look for matching decls at file scope for
 Thu Feb 22 00:54:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * pt.c (tsubst): Only look for matching decls at file scope for
-       non-member functions.
+       non-member functions.
 
        * call.c (build_scoped_method_call): Handle scoped destructor
 
        * call.c (build_scoped_method_call): Handle scoped destructor
-       calls in templates.
+       calls in templates.
 
        * decl.c (*_top_level): Also save previous_class_values.
 
 
        * decl.c (*_top_level): Also save previous_class_values.
 
@@ -3875,16 +3968,16 @@ Thu Feb 22 00:54:22 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * tree.def: Likewise.
 
        * method.c (build_overload_identifier): For a class nested in a
        * tree.def: Likewise.
 
        * method.c (build_overload_identifier): For a class nested in a
-       template class, don't mangle in the template parms from our
-       context.
+       template class, don't mangle in the template parms from our
+       context.
 
        * lex.c, cp-tree.h: Remove support for template instantiations in
 
        * lex.c, cp-tree.h: Remove support for template instantiations in
-       the pending_inlines code.
+       the pending_inlines code.
        * pt.c: Remove dead functions and unused arguments.
        (uses_template_parms): TYPENAME_TYPEs always use template parms.
        * parse.y: Stop passing anything to end_template_decl.
        * tree.c (print_lang_statistics): Only print tinst info #ifdef
        * pt.c: Remove dead functions and unused arguments.
        (uses_template_parms): TYPENAME_TYPEs always use template parms.
        * parse.y: Stop passing anything to end_template_decl.
        * tree.c (print_lang_statistics): Only print tinst info #ifdef
-       GATHER_STATISTICS.
+       GATHER_STATISTICS.
 
 Wed Feb 21 16:57:33 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Wed Feb 21 16:57:33 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -3976,11 +4069,11 @@ Wed Feb 21 00:06:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * decl2.c (import_export_decl): Renamed from import_export_inline.
        (finish_file): Call it to do interface handling for statics.
        * pt.c (tsubst_copy): Call mark_used on variables and functions
        * decl2.c (import_export_decl): Renamed from import_export_inline.
        (finish_file): Call it to do interface handling for statics.
        * pt.c (tsubst_copy): Call mark_used on variables and functions
-       used here.
+       used here.
 
        * decl2.c (finish_file): Don't emit statics we can't generate.
        * pt.c (instantiate_decl): Don't set interface on instantiations
 
        * decl2.c (finish_file): Don't emit statics we can't generate.
        * pt.c (instantiate_decl): Don't set interface on instantiations
-       we can't generate.
+       we can't generate.
 
        * cp-tree.h (struct tinst_level): Change 'classname' to 'decl'.
        * tree.c (print_lang_statistics): Print max template depth.
 
        * cp-tree.h (struct tinst_level): Change 'classname' to 'decl'.
        * tree.c (print_lang_statistics): Print max template depth.
@@ -3989,14 +4082,14 @@ Wed Feb 21 00:06:17 1996  Jason Merrill  <jason@yorick.cygnus.com>
        (instantiate_decl): Likewise.
 
        * call.c class.c cp-tree.h decl.c decl2.c error.c lex.c method.c
        (instantiate_decl): Likewise.
 
        * call.c class.c cp-tree.h decl.c decl2.c error.c lex.c method.c
-       pt.c ptree.c tree.def: Remove all traces of UNINSTANTIATED_P_TYPE.
+       pt.c ptree.c tree.def: Remove all traces of UNINSTANTIATED_P_TYPE.
 
 Tue Feb 20 18:21:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c class.c cp-tree.h cvt.c decl.c decl2.c error.c expr.c
 
 Tue Feb 20 18:21:51 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c class.c cp-tree.h cvt.c decl.c decl2.c error.c expr.c
-       init.c lex.c method.c parse.y pt.c repo.c search.c spew.c tree.c
-       tree.def typeck.c typeck2.c xref.c: Massive, systemic changes for
-       the new template implementation.
+       init.c lex.c method.c parse.y pt.c repo.c search.c spew.c tree.c
+       tree.def typeck.c typeck2.c xref.c: Massive, systemic changes for
+       the new template implementation.
 
 Tue Feb 20 17:14:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
 
 Tue Feb 20 17:14:29 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 
@@ -4032,8 +4125,8 @@ Wed Feb 14 17:30:04 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Wed Feb 14 16:21:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (push_to_top_level): Start from current_binding_level
 Wed Feb 14 16:21:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (push_to_top_level): Start from current_binding_level
-       again for now; the stl hacks depend on g++ being broken in this
-       way, and it'll be fixed in the template rewrite.
+       again for now; the stl hacks depend on g++ being broken in this
+       way, and it'll be fixed in the template rewrite.
 
        * tree.def: Add USING_DECL.
        * decl2.c (do_class_using_decl): Implement.
 
        * tree.def: Add USING_DECL.
        * decl2.c (do_class_using_decl): Implement.
@@ -4042,7 +4135,7 @@ Wed Feb 14 16:21:25 1996  Jason Merrill  <jason@yorick.cygnus.com>
        * error.c (dump_decl): Handle USING_DECLs.
        * decl.c (grokdeclarator): Remove code for handling access decls.
        * class.c (finish_struct_1): Adjust accordingly, treat using-decls
        * error.c (dump_decl): Handle USING_DECLs.
        * decl.c (grokdeclarator): Remove code for handling access decls.
        * class.c (finish_struct_1): Adjust accordingly, treat using-decls
-       as access decls for now.
+       as access decls for now.
        (finish_struct): Don't check USING_DECLs for other uses of the name.
 
        * search.c (get_matching_virtual): Use cp_error_at.
        (finish_struct): Don't check USING_DECLs for other uses of the name.
 
        * search.c (get_matching_virtual): Use cp_error_at.
@@ -4074,14 +4167,14 @@ Wed Feb 14 10:36:58 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Tue Feb 13 12:51:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): Check for a pure-specifier on a
 Tue Feb 13 12:51:21 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): Check for a pure-specifier on a
-       non-virtual function here.
+       non-virtual function here.
 
        * decl2.c (grok_function_init): Don't check whether the function
 
        * decl2.c (grok_function_init): Don't check whether the function
-       is virtual here.
+       is virtual here.
        (grokfield): Don't call check_for_override here.
 
        * decl.c (push_to_top_level): Start from inner_binding_level,
        (grokfield): Don't call check_for_override here.
 
        * decl.c (push_to_top_level): Start from inner_binding_level,
-       check class_shadowed in class levels.
+       check class_shadowed in class levels.
 
 Mon Feb 12 17:46:59 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Mon Feb 12 17:46:59 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -4095,7 +4188,7 @@ Mon Feb 12 15:47:44 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
 Sat Feb 10 17:59:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): Set DECL_VINDEX properly on a
 Sat Feb 10 17:59:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * class.c (finish_struct_1): Set DECL_VINDEX properly on a
-       synthesized dtor.
+       synthesized dtor.
 
        * parse.y (complete_type_name): Bind global_scope earlier.
        (complex_type_name): Likewise.
 
        * parse.y (complete_type_name): Bind global_scope earlier.
        (complex_type_name): Likewise.
@@ -4104,18 +4197,18 @@ Sat Feb 10 17:59:45 1996  Jason Merrill  <jason@yorick.cygnus.com>
 Thu Feb  8 15:15:14 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grokfndecl): Move code that looks for virtuals in base
 Thu Feb  8 15:15:14 1996  Jason Merrill  <jason@yorick.cygnus.com>
 
        * decl.c (grokfndecl): Move code that looks for virtuals in base
-       classes...
+       classes...
        * class.c (check_for_override): ... to a new function.
        (finish_struct_1): Call it.
 
        * cp-tree.h: Declare warn_sign_compare.
 
        * typeck.c (build_binary_op_nodefault): Check warn_sign_compare
        * class.c (check_for_override): ... to a new function.
        (finish_struct_1): Call it.
 
        * cp-tree.h: Declare warn_sign_compare.
 
        * typeck.c (build_binary_op_nodefault): Check warn_sign_compare
-        rather than extra_warnings to decide whether to warn about
-        comparison of signed and unsigned.
+       rather than extra_warnings to decide whether to warn about
+       comparison of signed and unsigned.
 
        * decl2.c (lang_decode_option): Handle warn_sign_compare.  -Wall
 
        * decl2.c (lang_decode_option): Handle warn_sign_compare.  -Wall
-        implies -Wsign-compare.  -Wall doesn't imply -W.
+       implies -Wsign-compare.  -Wall doesn't imply -W.
 
 Wed Feb  7 15:27:57 1996  Mike Stump  <mrs@cygnus.com>
 
 
 Wed Feb  7 15:27:57 1996  Mike Stump  <mrs@cygnus.com>
 
@@ -4142,7 +4235,7 @@ Tue Feb  6 13:39:22 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>
        Make the C++ front-end pay attention to attributes for structures.
        * class.c (finish_struct): New argument ATTRIBUTES, passed down into
        finish_struct_1.
        Make the C++ front-end pay attention to attributes for structures.
        * class.c (finish_struct): New argument ATTRIBUTES, passed down into
        finish_struct_1.
-       (finish_struct_1): New argument ATTRIBUTES; call cplus_decl_attributes.
+       (finish_struct_1): New argument ATTRIBUTES; call cplus_decl_attributes.
        Take out old round_up_size use and setting the DECL_ALIGN possibly
        using it.  Take out setting of TYPE_ALIGN to round_up_size, which
        can override what the attribute set.
        Take out old round_up_size use and setting the DECL_ALIGN possibly
        using it.  Take out setting of TYPE_ALIGN to round_up_size, which
        can override what the attribute set.
index 2dcfe43..264114c 100644 (file)
@@ -144,7 +144,7 @@ tinfo2.o: cc1plus $(srcdir)/cp/tinfo2.cc
          -c $(srcdir)/cp/tinfo2.cc
 exception.o: cc1plus $(srcdir)/cp/exception.cc
        $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
          -c $(srcdir)/cp/tinfo2.cc
 exception.o: cc1plus $(srcdir)/cp/exception.cc
        $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
-         -c -O0 -fexceptions $(srcdir)/cp/exception.cc
+         -c -fexceptions $(srcdir)/cp/exception.cc
 new.o: cc1plus $(srcdir)/cp/new.cc
        $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
          -c $(srcdir)/cp/new.cc
 new.o: cc1plus $(srcdir)/cp/new.cc
        $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) \
          -c $(srcdir)/cp/new.cc
index df4ced9..2b69c08 100644 (file)
@@ -3187,13 +3187,18 @@ reference_binding (rto, rfrom, expr, flags)
   int lvalue = 1;
   tree to = TREE_TYPE (rto);
   tree from = rfrom;
   int lvalue = 1;
   tree to = TREE_TYPE (rto);
   tree from = rfrom;
+  int related;
 
   if (TREE_CODE (from) == REFERENCE_TYPE)
     from = TREE_TYPE (from);
   else if (! expr || ! real_lvalue_p (expr))
     lvalue = 0;
 
 
   if (TREE_CODE (from) == REFERENCE_TYPE)
     from = TREE_TYPE (from);
   else if (! expr || ! real_lvalue_p (expr))
     lvalue = 0;
 
-  if (lvalue
+  related = (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from)
+            || (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
+                && DERIVED_FROM_P (to, from)));
+
+  if (lvalue && related
       && TYPE_READONLY (to) >= TYPE_READONLY (from)
       && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
     {
       && TYPE_READONLY (to) >= TYPE_READONLY (from)
       && TYPE_VOLATILE (to) >= TYPE_VOLATILE (from))
     {
@@ -3201,14 +3206,11 @@ reference_binding (rto, rfrom, expr, flags)
 
       if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
        conv = build_conv (REF_BIND, rto, conv);
 
       if (TYPE_MAIN_VARIANT (to) == TYPE_MAIN_VARIANT (from))
        conv = build_conv (REF_BIND, rto, conv);
-      else if (IS_AGGR_TYPE (to) && IS_AGGR_TYPE (from)
-              && DERIVED_FROM_P (to, from))
+      else
        {
          conv = build_conv (REF_BIND, rto, conv);
          ICS_STD_RANK (conv) = STD_RANK;
        }
        {
          conv = build_conv (REF_BIND, rto, conv);
          ICS_STD_RANK (conv) = STD_RANK;
        }
-      else
-       conv = NULL_TREE;
     }
   else
     conv = NULL_TREE;
     }
   else
     conv = NULL_TREE;
@@ -3225,8 +3227,15 @@ reference_binding (rto, rfrom, expr, flags)
          if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
            TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
        }
          if (TREE_CODE (TREE_OPERAND (conv, 0)) == BASE_CONV)
            TREE_OPERAND (conv, 0) = TREE_OPERAND (TREE_OPERAND (conv, 0), 0);
        }
-      if (conv && ! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
-                    && (flags & LOOKUP_NO_TEMP_BIND) == 0))
+      if (conv
+         && ((! (TYPE_READONLY (to) && ! TYPE_VOLATILE (to)
+                 && (flags & LOOKUP_NO_TEMP_BIND) == 0))
+             /* If T1 is reference-related to T2, cv1 must be the same
+                cv-qualification as, or greater cv-qualification than,
+                cv2; otherwise, the program is ill-formed.  */
+             || (related
+                 && (TYPE_READONLY (to) < TYPE_READONLY (from)
+                     || TYPE_VOLATILE (to) < TYPE_VOLATILE (from)))))
        ICS_BAD_FLAG (conv) = 1;
     }
 
        ICS_BAD_FLAG (conv) = 1;
     }
 
@@ -3265,7 +3274,12 @@ implicit_conversion (to, from, expr, flags)
            || IS_AGGR_TYPE (non_reference (to)))
           && (flags & LOOKUP_NO_CONVERSION) == 0)
     {
            || IS_AGGR_TYPE (non_reference (to)))
           && (flags & LOOKUP_NO_CONVERSION) == 0)
     {
-      if (TREE_CODE (to) == REFERENCE_TYPE
+      cand = build_user_type_conversion_1
+       (to, expr, LOOKUP_ONLYCONVERTING);
+      if (cand)
+       conv = cand->second_conv;
+      if ((! conv || ICS_BAD_FLAG (conv))
+         && TREE_CODE (to) == REFERENCE_TYPE
          && TYPE_READONLY (TREE_TYPE (to))
          && ! TYPE_VOLATILE (TREE_TYPE (to))
          && (flags & LOOKUP_NO_TEMP_BIND) == 0)
          && TYPE_READONLY (TREE_TYPE (to))
          && ! TYPE_VOLATILE (TREE_TYPE (to))
          && (flags & LOOKUP_NO_TEMP_BIND) == 0)
@@ -3275,13 +3289,6 @@ implicit_conversion (to, from, expr, flags)
          if (cand)
            conv = build_conv (REF_BIND, to, cand->second_conv);
        }
          if (cand)
            conv = build_conv (REF_BIND, to, cand->second_conv);
        }
-      else
-       {
-         cand = build_user_type_conversion_1
-           (to, expr, LOOKUP_ONLYCONVERTING);
-         if (cand)
-           conv = cand->second_conv;
-       }
     }
 
   return conv;
     }
 
   return conv;
@@ -4181,7 +4188,10 @@ print_z_candidates (candidates)
 }
 
 /* Returns the best overload candidate to perform the requested
 }
 
 /* Returns the best overload candidate to perform the requested
-   conversion.  */
+   conversion.  This function is used for three the overloading situations
+   described in [over.match.copy], [over.match.conv], and [over.match.ref].
+   If TOTYPE is a REFERENCE_TYPE, we're trying to find an lvalue binding as
+   per [dcl.init.ref], so we ignore temporary bindings.  */
 
 static struct z_candidate *
 build_user_type_conversion_1 (totype, expr, flags)
 
 static struct z_candidate *
 build_user_type_conversion_1 (totype, expr, flags)
@@ -4229,9 +4239,22 @@ build_user_type_conversion_1 (totype, expr, flags)
   for (; convs; convs = TREE_CHAIN (convs))
     {
       tree fn = TREE_VALUE (convs);
   for (; convs; convs = TREE_CHAIN (convs))
     {
       tree fn = TREE_VALUE (convs);
-      tree ics = implicit_conversion
-       (totype, TREE_TYPE (TREE_TYPE (fn)), 0, LOOKUP_NO_CONVERSION);
-      if (ics)
+      int convflags = LOOKUP_NO_CONVERSION;
+      tree ics;
+
+      /* If we are called to convert to a reference type, we are trying to
+        find an lvalue binding, so don't even consider temporaries.  If
+        we don't find an lvalue binding, the caller will try again to
+        look for a temporary binding.  */
+      if (TREE_CODE (totype) == REFERENCE_TYPE)
+       convflags |= LOOKUP_NO_TEMP_BIND;
+
+      ics = implicit_conversion
+       (totype, TREE_TYPE (TREE_TYPE (fn)), 0, convflags);
+
+      if (TREE_CODE (totype) == REFERENCE_TYPE && ics && ICS_BAD_FLAG (ics))
+       /* ignore the near match.  */;
+      else if (ics)
        for (; fn; fn = DECL_CHAIN (fn))
          {
            candidates = add_function_candidate (candidates, fn, args, flags);
        for (; fn; fn = DECL_CHAIN (fn))
          {
            candidates = add_function_candidate (candidates, fn, args, flags);
@@ -4348,9 +4371,10 @@ build_new_function_call (fn, args, obj)
        {
          if (candidates && ! candidates->next)
            return build_function_call (candidates->fn, args);
        {
          if (candidates && ! candidates->next)
            return build_function_call (candidates->fn, args);
-         else
-           cp_error ("no matching function for call to `%D (%A)'",
-                     TREE_PURPOSE (fn), args);
+         cp_error ("no matching function for call to `%D (%A)'",
+                   TREE_PURPOSE (fn), args);
+         if (candidates)
+           print_z_candidates (candidates);
          return error_mark_node;
        }
       candidates = splice_viable (candidates);
          return error_mark_node;
        }
       candidates = splice_viable (candidates);
@@ -5037,11 +5061,12 @@ build_over_call (fn, convs, args, flags)
       is_method = 1;
     }
 
       is_method = 1;
     }
 
-  for (; conv = TREE_VEC_ELT (convs, i), arg && parm;
+  for (; arg && parm;
        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
     {
       tree type = TREE_VALUE (parm);
 
        parm = TREE_CHAIN (parm), arg = TREE_CHAIN (arg), ++i)
     {
       tree type = TREE_VALUE (parm);
 
+      conv = TREE_VEC_ELT (convs, i);
       if (ICS_BAD_FLAG (conv))
        {
          tree t = conv;
       if (ICS_BAD_FLAG (conv))
        {
          tree t = conv;
@@ -5118,17 +5143,24 @@ build_over_call (fn, convs, args, flags)
       && TREE_VEC_LENGTH (convs) == 1
       && copy_args_p (fn))
     {
       && TREE_VEC_LENGTH (convs) == 1
       && copy_args_p (fn))
     {
-      tree targ = NULL_TREE;
+      tree targ;
       arg = TREE_VALUE (TREE_CHAIN (converted_args));
 
       /* Pull out the real argument, disregarding const-correctness.  */
       arg = TREE_VALUE (TREE_CHAIN (converted_args));
 
       /* Pull out the real argument, disregarding const-correctness.  */
-      if (TREE_CODE (arg) == ADDR_EXPR)
-       {
-         targ = TREE_OPERAND (arg, 0);
+      targ = arg;
+      while (TREE_CODE (targ) == NOP_EXPR
+            || TREE_CODE (targ) == NON_LVALUE_EXPR
+            || TREE_CODE (targ) == CONVERT_EXPR)
+       targ = TREE_OPERAND (targ, 0);
+      if (TREE_CODE (targ) == ADDR_EXPR)
+       {
+         targ = TREE_OPERAND (targ, 0);
          if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
                           TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
            targ = NULL_TREE;
        }
          if (! comptypes (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (arg))),
                           TYPE_MAIN_VARIANT (TREE_TYPE (targ)), 1))
            targ = NULL_TREE;
        }
+      else
+       targ = NULL_TREE;
 
       if (targ)
        arg = targ;
 
       if (targ)
        arg = targ;
index 5ada32b..b527738 100644 (file)
@@ -2809,6 +2809,7 @@ check_for_override (decl, ctype)
                }
              virtualp = 1;
 
                }
              virtualp = 1;
 
+#if 0 /* The signature of an overriding function is not changed.  */
              {
                /* The argument types may have changed...  */
                tree type = TREE_TYPE (decl);
              {
                /* The argument types may have changed...  */
                tree type = TREE_TYPE (decl);
@@ -2823,9 +2824,10 @@ check_for_override (decl, ctype)
                if (raises)
                  type = build_exception_variant (type, raises);
                TREE_TYPE (decl) = type;
                if (raises)
                  type = build_exception_variant (type, raises);
                TREE_TYPE (decl) = type;
-               DECL_VINDEX (decl)
-                 = tree_cons (NULL_TREE, tmp, DECL_VINDEX (decl));
              }
              }
+#endif
+             DECL_VINDEX (decl)
+               = tree_cons (NULL_TREE, tmp, DECL_VINDEX (decl));
              break;
            }
        }
              break;
            }
        }
index 31cc776..ac00c5b 100644 (file)
@@ -1195,10 +1195,12 @@ extern int flag_new_for_scope;
 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
                                   && CONSTRUCTOR_ELTS (NODE) == NULL_TREE)
 
 #define EMPTY_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == CONSTRUCTOR \
                                   && CONSTRUCTOR_ELTS (NODE) == NULL_TREE)
 
+#if 0
 /* Indicates that a NON_LVALUE_EXPR came from a C++ reference.
    Used to generate more helpful error message in case somebody
    tries to take its address.  */
 #define TREE_REFERENCE_EXPR(NODE) (TREE_LANG_FLAG_3(NODE))
 /* Indicates that a NON_LVALUE_EXPR came from a C++ reference.
    Used to generate more helpful error message in case somebody
    tries to take its address.  */
 #define TREE_REFERENCE_EXPR(NODE) (TREE_LANG_FLAG_3(NODE))
+#endif
 
 /* Nonzero for _TYPE means that the _TYPE defines a destructor.  */
 #define TYPE_HAS_DESTRUCTOR(NODE) (TYPE_LANG_FLAG_2(NODE))
 
 /* Nonzero for _TYPE means that the _TYPE defines a destructor.  */
 #define TYPE_HAS_DESTRUCTOR(NODE) (TYPE_LANG_FLAG_2(NODE))
index cf96115..b0cf12b 100644 (file)
@@ -371,232 +371,24 @@ convert_to_pointer_force (type, expr)
    value we have to begin with is in ARG.
 
    FLAGS controls how we manage access checking.
    value we have to begin with is in ARG.
 
    FLAGS controls how we manage access checking.
-   DIRECT_BIND in FLAGS controls how any temporarys are generated.
-   CHECKCONST controls if we report error messages on const subversion.  */
+   DIRECT_BIND in FLAGS controls how any temporaries are generated.  */
 
 static tree
 build_up_reference (type, arg, flags, checkconst)
      tree type, arg;
      int flags, checkconst;
 {
 
 static tree
 build_up_reference (type, arg, flags, checkconst)
      tree type, arg;
      int flags, checkconst;
 {
-  tree rval, targ;
-  int literal_flag = 0;
+  tree rval;
   tree argtype = TREE_TYPE (arg);
   tree target_type = TREE_TYPE (type);
   tree argtype = TREE_TYPE (arg);
   tree target_type = TREE_TYPE (type);
-  tree binfo = NULL_TREE;
 
   my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 187);
 
   my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 187);
-  if ((flags & LOOKUP_PROTECT)
-      && TYPE_MAIN_VARIANT (argtype) != TYPE_MAIN_VARIANT (target_type)
-      && IS_AGGR_TYPE (argtype)
-      && IS_AGGR_TYPE (target_type))
-    {
-      binfo = get_binfo (target_type, argtype, 1);
-      if (binfo == error_mark_node)
-       return error_mark_node;
-      if (binfo == NULL_TREE)
-       return error_not_base_type (target_type, argtype);
-    }
-
-  /* Pass along const and volatile down into the type.  */
-  if (TYPE_READONLY (type) || TYPE_VOLATILE (type))
-    target_type = cp_build_type_variant (target_type, TYPE_READONLY (type),
-                                       TYPE_VOLATILE (type));
-  targ = arg;
-  if (TREE_CODE (targ) == SAVE_EXPR)
-    targ = TREE_OPERAND (targ, 0);
-  while (TREE_CODE (targ) == NOP_EXPR
-        && (TYPE_MAIN_VARIANT (argtype)
-            == TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (targ, 0)))))
-    targ = TREE_OPERAND (targ, 0);
-
-  switch (TREE_CODE (targ))
-    {
-    case INDIRECT_REF:
-      /* This is a call to a constructor which did not know what it was
-        initializing until now: it needs to initialize a temporary.  */
-      if (TREE_HAS_CONSTRUCTOR (targ))
-       {
-         tree temp = build_cplus_new (argtype, TREE_OPERAND (targ, 0));
-         TREE_HAS_CONSTRUCTOR (targ) = 0;
-         return build_up_reference (type, temp, flags, 1);
-       }
-      /* Let &* cancel out to simplify resulting code.
-         Also, throw away intervening NOP_EXPRs.  */
-      arg = TREE_OPERAND (targ, 0);
-      if (TREE_CODE (arg) == NOP_EXPR || TREE_CODE (arg) == NON_LVALUE_EXPR
-         || (TREE_CODE (arg) == CONVERT_EXPR && TREE_REFERENCE_EXPR (arg)))
-       arg = TREE_OPERAND (arg, 0);
-
-      /* in doing a &*, we have to get rid of the const'ness on the pointer
-        value.  Haven't thought about volatile here.  Pointers come to mind
-        here.  */
-      if (TREE_READONLY (arg))
-       {
-         arg = copy_node (arg);
-         TREE_READONLY (arg) = 0;
-       }
-
-      rval = build1 (CONVERT_EXPR, type, arg);
-      TREE_REFERENCE_EXPR (rval) = 1;
-
-      /* propagate the const flag on something like:
-
-        class Base {
-        public:
-          int foo;
-        };
-
-      class Derived : public Base {
-      public:
-       int bar;
-      };
-
-      void func(Base&);
-
-      void func2(const Derived& d) {
-       func(d);
-      }
-
-        on the d parameter.  The below could have been avoided, if the flags
-        were down in the tree, not sure why they are not.  (mrs) */
-      /* The below code may have to be propagated to other parts of this
-        switch.  */
-      if (TREE_READONLY (targ) && !TREE_READONLY (arg)
-         && (TREE_CODE (arg) == PARM_DECL || TREE_CODE (arg) == VAR_DECL)
-         && TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE
-         && (TYPE_READONLY (target_type) && checkconst))
-       {
-         arg = copy_node (arg);
-         TREE_READONLY (arg) = TREE_READONLY (targ);
-       }
-      literal_flag = TREE_CONSTANT (arg);
-
-      goto done;
-
-      /* Get this out of a register if we happened to be in one by accident.
-        Also, build up references to non-lvalues it we must.  */
-      /* For &x[y], return (&) x+y */
-    case ARRAY_REF:
-      if (mark_addressable (TREE_OPERAND (targ, 0)) == 0)
-       return error_mark_node;
-      rval = build_binary_op (PLUS_EXPR, TREE_OPERAND (targ, 0),
-                             TREE_OPERAND (targ, 1), 1);
-      TREE_TYPE (rval) = type;
-      if (TREE_CONSTANT (TREE_OPERAND (targ, 1))
-         && staticp (TREE_OPERAND (targ, 0)))
-       TREE_CONSTANT (rval) = 1;
-      goto done;
-
-    case SCOPE_REF:
-      /* Could be a reference to a static member.  */
-      {
-       tree field = TREE_OPERAND (targ, 1);
-       if (TREE_STATIC (field))
-         {
-           rval = build1 (ADDR_EXPR, type, field);
-           literal_flag = 1;
-           goto done;
-         }
-      }
-
-      /* We should have farmed out member pointers above.  */
-      my_friendly_abort (188);
 
 
-    case COMPONENT_REF:
-      rval = build_component_addr (targ, build_pointer_type (argtype),
-                                  "attempt to make a reference to bit-field structure member `%s'");
-      TREE_TYPE (rval) = type;
-      literal_flag = staticp (TREE_OPERAND (targ, 0));
-
-      goto done;
-
-      /* Anything not already handled and not a true memory reference
-        needs to have a reference built up.  Do so silently for
-        things like integers and return values from function,
-        but complain if we need a reference to something declared
-        as `register'.  */
-
-    case PARM_DECL:
-      /* 'this' is not an lvalue.  */
-      if (targ == current_class_ptr && ! flag_this_is_variable)
-       break;
-
-    case RESULT_DECL:
-    case VAR_DECL:
-    case CONST_DECL:
-      if (staticp (targ))
-       literal_flag = 1;
-
-      /* Fall through.  */
-    case TARGET_EXPR:
-      mark_addressable (targ);
-      break;
-
-    case COMPOUND_EXPR:
-      {
-       tree real_reference = build_up_reference (type, TREE_OPERAND (targ, 1),
-                                                 flags, checkconst);
-       rval = build (COMPOUND_EXPR, type, TREE_OPERAND (targ, 0), real_reference);
-       TREE_CONSTANT (rval) = staticp (TREE_OPERAND (targ, 1));
-       return rval;
-      }
-
-    case PREINCREMENT_EXPR:
-    case PREDECREMENT_EXPR:
-    case MODIFY_EXPR:
-    case INIT_EXPR:
-      {
-       tree real_reference = build_up_reference (type, TREE_OPERAND (targ, 0),
-                                                 flags, checkconst);
-       rval = build (COMPOUND_EXPR, type, arg, real_reference);
-       TREE_CONSTANT (rval) = staticp (TREE_OPERAND (targ, 0));
-       return rval;
-      }
-
-    case COND_EXPR:
-      return build (COND_EXPR, type,
-                   TREE_OPERAND (targ, 0),
-                   build_up_reference (type, TREE_OPERAND (targ, 1),
-                                       flags, checkconst),
-                   build_up_reference (type, TREE_OPERAND (targ, 2),
-                                       flags, checkconst));
-
-      /* Undo the folding...  */
-    case MIN_EXPR:
-    case MAX_EXPR:
-      return build (COND_EXPR, type,
-                   build (TREE_CODE (targ) == MIN_EXPR ? LT_EXPR : GT_EXPR,
-                          boolean_type_node, TREE_OPERAND (targ, 0),
-                          TREE_OPERAND (targ, 1)),
-                   build_up_reference (type, TREE_OPERAND (targ, 0),
-                                       flags, checkconst),
-                   build_up_reference (type, TREE_OPERAND (targ, 1),
-                                       flags, checkconst));
-
-    case BIND_EXPR:
-      arg = TREE_OPERAND (targ, 1);
-      if (arg == NULL_TREE)
-       {
-         compiler_error ("({ ... }) expression not expanded when needed for reference");
-         return error_mark_node;
-       }
-      rval = build1 (ADDR_EXPR, type, arg);
-      TREE_REFERENCE_EXPR (rval) = 1;
-      return rval;
-
-    default:
-      break;
-    }
-
-  if ((flags & DIRECT_BIND)
-      && ! real_lvalue_p (targ))
+  if ((flags & DIRECT_BIND) && ! real_lvalue_p (arg))
     {
     {
+      tree targ = arg;
       if (toplevel_bindings_p ())
       if (toplevel_bindings_p ())
-       {
-         arg = get_temp_name (argtype, 1);
-         literal_flag = 1;
-       }
+       arg = get_temp_name (argtype, 1);
       else
        {
          arg = pushdecl (build_decl (VAR_DECL, NULL_TREE, argtype));
       else
        {
          arg = pushdecl (build_decl (VAR_DECL, NULL_TREE, argtype));
@@ -605,7 +397,7 @@ build_up_reference (type, arg, flags, checkconst)
       DECL_INITIAL (arg) = targ;
       cp_finish_decl (arg, targ, NULL_TREE, 0, LOOKUP_ONLYCONVERTING);
     }
       DECL_INITIAL (arg) = targ;
       cp_finish_decl (arg, targ, NULL_TREE, 0, LOOKUP_ONLYCONVERTING);
     }
-  else if (TREE_ADDRESSABLE (targ) == 0 && !(flags & DIRECT_BIND))
+  else if (!(flags & DIRECT_BIND) && ! lvalue_p (arg))
     {
       tree slot = build_decl (VAR_DECL, NULL_TREE, argtype);
       arg = build (TARGET_EXPR, argtype, slot, arg, NULL_TREE, NULL_TREE);
     {
       tree slot = build_decl (VAR_DECL, NULL_TREE, argtype);
       arg = build (TARGET_EXPR, argtype, slot, arg, NULL_TREE, NULL_TREE);
@@ -614,25 +406,14 @@ build_up_reference (type, arg, flags, checkconst)
   /* If we had a way to wrap this up, and say, if we ever needed it's
      address, transform all occurrences of the register, into a memory
      reference we could win better.  */
   /* If we had a way to wrap this up, and say, if we ever needed it's
      address, transform all occurrences of the register, into a memory
      reference we could win better.  */
-  mark_addressable (arg);
-  rval = build1 (ADDR_EXPR, type, arg);
-
- done:
-  if (TYPE_USES_COMPLEX_INHERITANCE (argtype)
-      || TYPE_USES_COMPLEX_INHERITANCE (target_type))
-    {
-      TREE_TYPE (rval) = build_pointer_type (argtype);
-      if (flags & LOOKUP_PROTECT)
-       rval = convert_pointer_to (target_type, rval);
-      else
-       rval
-         = convert_to_pointer_force (build_pointer_type (target_type), rval);
-      TREE_TYPE (rval) = type;
-      if (TREE_CODE (rval) == PLUS_EXPR || TREE_CODE (rval) == MINUS_EXPR)
-       TREE_TYPE (TREE_OPERAND (rval, 0))
-         = TREE_TYPE (TREE_OPERAND (rval, 1)) = type;
-    }
-  TREE_CONSTANT (rval) = literal_flag;
+  rval = build_unary_op (ADDR_EXPR, arg, 1);
+  if (flags & LOOKUP_PROTECT)
+    rval = convert_pointer_to (target_type, rval);
+  else
+    rval
+      = convert_to_pointer_force (build_pointer_type (target_type), rval);
+  rval = build1 (CONVERT_EXPR, type, rval);
+  TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0));
   return rval;
 }
 
   return rval;
 }
 
index 1fd2026..36dc140 100644 (file)
@@ -49,8 +49,6 @@ extern struct obstack permanent_obstack;
 
 extern int current_class_depth;
 
 
 extern int current_class_depth;
 
-extern tree cleanups_this_call;
-
 extern tree static_ctors, static_dtors;
 
 /* Stack of places to restore the search obstack back to.  */
 extern tree static_ctors, static_dtors;
 
 /* Stack of places to restore the search obstack back to.  */
@@ -5012,6 +5010,18 @@ init_decl_processing ()
                    BUILT_IN_NEXT_ARG, NULL_PTR);
   builtin_function ("__builtin_args_info", int_ftype_int,
                    BUILT_IN_ARGS_INFO, NULL_PTR);
                    BUILT_IN_NEXT_ARG, NULL_PTR);
   builtin_function ("__builtin_args_info", int_ftype_int,
                    BUILT_IN_ARGS_INFO, NULL_PTR);
+  builtin_function ("__builtin_setjmp",
+                   build_function_type (integer_type_node,
+                                        tree_cons (NULL_TREE, ptr_type_node,
+                                                   endlink)),
+                   BUILT_IN_SETJMP, NULL_PTR);
+  builtin_function ("__builtin_longjmp",
+                   build_function_type (integer_type_node,
+                                        tree_cons (NULL_TREE, ptr_type_node,
+                                                   tree_cons (NULL_TREE,
+                                                              integer_type_node,
+                                                              endlink))),
+                   BUILT_IN_LONGJMP, NULL_PTR);
 
   /* Untyped call and return.  */
   builtin_function ("__builtin_apply_args", ptr_ftype,
 
   /* Untyped call and return.  */
   builtin_function ("__builtin_apply_args", ptr_ftype,
@@ -6569,11 +6579,6 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
        }
       else if (! toplev)
        {
        }
       else if (! toplev)
        {
-         extern int temp_slot_level;
-         extern int target_temp_slot_level;
-         tree old_cleanups = cleanups_this_call;
-         int old_temp_level = target_temp_slot_level;
-
          /* This is a declared decl which must live until the
             end of the binding contour.  It may need a cleanup.  */
 
          /* This is a declared decl which must live until the
             end of the binding contour.  It may need a cleanup.  */
 
@@ -6654,9 +6659,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
                }
            }
 
                }
            }
 
-         push_temp_slots ();
-         push_temp_slots ();
-         target_temp_slot_level = temp_slot_level;
+         expand_start_target_temps ();
 
          if (DECL_SIZE (decl) && type != error_mark_node)
            {
 
          if (DECL_SIZE (decl) && type != error_mark_node)
            {
@@ -6679,11 +6682,9 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags)
                  && DECL_NAME (decl))
                TREE_USED (decl) = 0;
            }
                  && DECL_NAME (decl))
                TREE_USED (decl) = 0;
            }
+
          /* Cleanup any temporaries needed for the initial value.  */
          /* Cleanup any temporaries needed for the initial value.  */
-         expand_cleanups_to (old_cleanups);
-         pop_temp_slots ();
-         pop_temp_slots ();
-         target_temp_slot_level = old_temp_level;
+         expand_end_target_temps ();
 
          if (DECL_SIZE (decl) && type != error_mark_node)
            {
 
          if (DECL_SIZE (decl) && type != error_mark_node)
            {
@@ -6777,11 +6778,6 @@ expand_static_init (decl, init)
       /* Emit code to perform this initialization but once.  */
       tree temp;
 
       /* Emit code to perform this initialization but once.  */
       tree temp;
 
-      extern int temp_slot_level;
-      extern int target_temp_slot_level;
-      tree old_cleanups;
-      int old_temp_level;
-
       /* Remember this information until end of file.  */
       push_obstacks (&permanent_obstack, &permanent_obstack);
 
       /* Remember this information until end of file.  */
       push_obstacks (&permanent_obstack, &permanent_obstack);
 
@@ -6790,11 +6786,7 @@ expand_static_init (decl, init)
       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
       expand_start_cond (build_binary_op (EQ_EXPR, temp,
                                          integer_zero_node, 1), 0);
       rest_of_decl_compilation (temp, NULL_PTR, 0, 0);
       expand_start_cond (build_binary_op (EQ_EXPR, temp,
                                          integer_zero_node, 1), 0);
-      old_cleanups = cleanups_this_call;
-      old_temp_level = target_temp_slot_level;
-      push_temp_slots ();
-      push_temp_slots ();
-      target_temp_slot_level = temp_slot_level;
+      expand_start_target_temps ();
 
       expand_assignment (temp, integer_one_node, 0, 0);
       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
 
       expand_assignment (temp, integer_one_node, 0, 0);
       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
@@ -6807,10 +6799,7 @@ expand_static_init (decl, init)
        expand_assignment (decl, init, 0, 0);
 
       /* Cleanup any temporaries needed for the initial value.  */
        expand_assignment (decl, init, 0, 0);
 
       /* Cleanup any temporaries needed for the initial value.  */
-      expand_cleanups_to (old_cleanups);
-      pop_temp_slots ();
-      pop_temp_slots ();
-      target_temp_slot_level = old_temp_level;
+      expand_end_target_temps ();
 
       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
        {
 
       if (TYPE_NEEDS_DESTRUCTOR (TREE_TYPE (decl)))
        {
@@ -9195,9 +9184,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
              }
 
            /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
              }
 
            /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
-           publicp = (! friendp
-                      || RIDBIT_SETP (RID_EXTERN, specbits)
-                      || ! (funcdef_flag < 0 || inlinep));
+           publicp = (! friendp || ! staticp);
            decl = grokfndecl (ctype, type, declarator,
                               virtualp, flags, quals, raises, attrlist,
                               friendp ? -1 : 0, publicp, inlinep,
            decl = grokfndecl (ctype, type, declarator,
                               virtualp, flags, quals, raises, attrlist,
                               friendp ? -1 : 0, publicp, inlinep,
@@ -9395,11 +9382,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
          type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
                                          TREE_TYPE (type), TYPE_ARG_TYPES (type));
 
          type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep),
                                          TREE_TYPE (type), TYPE_ARG_TYPES (type));
 
-       /* Record presence of `static'.  In C++, `inline' implies `static'.  */
+       /* Record presence of `static'.  */
        publicp = (ctype != NULL_TREE
                   || RIDBIT_SETP (RID_EXTERN, specbits)
        publicp = (ctype != NULL_TREE
                   || RIDBIT_SETP (RID_EXTERN, specbits)
-                  || (!RIDBIT_SETP (RID_STATIC, specbits)
-                      && !RIDBIT_SETP (RID_INLINE, specbits)));
+                  || !RIDBIT_SETP (RID_STATIC, specbits));
 
        decl = grokfndecl (ctype, type, original_name,
                           virtualp, flags, quals, raises, attrlist,
 
        decl = grokfndecl (ctype, type, original_name,
                           virtualp, flags, quals, raises, attrlist,
@@ -11281,6 +11267,7 @@ store_parm_decls ()
   register tree fndecl = current_function_decl;
   register tree parm;
   int parms_have_cleanups = 0;
   register tree fndecl = current_function_decl;
   register tree parm;
   int parms_have_cleanups = 0;
+  tree cleanups = NULL_TREE;
 
   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
   tree specparms = current_function_parms;
 
   /* This is either a chain of PARM_DECLs (when a prototype is used).  */
   tree specparms = current_function_parms;
@@ -11355,10 +11342,10 @@ store_parm_decls ()
                  && (cleanup = maybe_build_cleanup (parm), cleanup))
                {
                  expand_decl (parm);
                  && (cleanup = maybe_build_cleanup (parm), cleanup))
                {
                  expand_decl (parm);
-                 if (! expand_decl_cleanup (parm, cleanup))
-                   cp_error ("parser lost in parsing declaration of `%D'",
-                             parm);
                  parms_have_cleanups = 1;
                  parms_have_cleanups = 1;
+
+                 /* Keep track of the cleanups.  */
+                 cleanups = tree_cons (parm, cleanup, cleanups);
                }
            }
          else
                }
            }
          else
@@ -11392,6 +11379,20 @@ store_parm_decls ()
   if (! processing_template_decl)
     expand_function_start (fndecl, parms_have_cleanups);
 
   if (! processing_template_decl)
     expand_function_start (fndecl, parms_have_cleanups);
 
+  /* Now that we have initialized the parms, we can start their
+     cleanups.  We cannot do this before, since expand_decl_cleanup
+     should not be called before the parm can be used.  */
+  if (parms_have_cleanups
+      && ! processing_template_decl)      
+    {
+      for (cleanups = nreverse (cleanups); cleanups; cleanups = TREE_CHAIN (cleanups))
+       {
+         if (! expand_decl_cleanup (TREE_PURPOSE (cleanups), TREE_VALUE (cleanups)))
+           cp_error ("parser lost in parsing declaration of `%D'",
+                     TREE_PURPOSE (cleanups));
+       }
+    }
+
   /* Create a binding contour which can be used to catch
      cleanup-generated temporaries.  Also, if the return value needs or
      has initialization, deal with that now.  */
   /* Create a binding contour which can be used to catch
      cleanup-generated temporaries.  Also, if the return value needs or
      has initialization, deal with that now.  */
@@ -12329,9 +12330,6 @@ maybe_build_cleanup_1 (decl, auto_delete)
        rval = build_compound_expr (tree_cons (NULL_TREE, rval,
                                               build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
 
        rval = build_compound_expr (tree_cons (NULL_TREE, rval,
                                               build_tree_list (NULL_TREE, build_vbase_delete (type, decl))));
 
-      /* Since this is a cleanup, UNSAVE it now.  */
-      rval = unsave_expr (rval);
-
       if (TREE_CODE (decl) != PARM_DECL)
        resume_momentary (temp);
 
       if (TREE_CODE (decl) != PARM_DECL)
        resume_momentary (temp);
 
@@ -12372,20 +12370,15 @@ void
 cplus_expand_expr_stmt (exp)
      tree exp;
 {
 cplus_expand_expr_stmt (exp)
      tree exp;
 {
-  extern int temp_slot_level;
-  extern int target_temp_slot_level; 
-  tree old_cleanups = cleanups_this_call;
-  int old_temp_level = target_temp_slot_level;
-  push_temp_slots ();
-  push_temp_slots ();
-  target_temp_slot_level = temp_slot_level;
-
   if (processing_template_decl)
     {
       add_tree (build_min_nt (EXPR_STMT, exp));
       return;
     }
 
   if (processing_template_decl)
     {
       add_tree (build_min_nt (EXPR_STMT, exp));
       return;
     }
 
+  /* Arrange for all temps to disappear.  */
+  expand_start_target_temps ();
+
   if (TREE_TYPE (exp) == unknown_type_node)
     {
       if (TREE_CODE (exp) == ADDR_EXPR || TREE_CODE (exp) == TREE_LIST)
   if (TREE_TYPE (exp) == unknown_type_node)
     {
       if (TREE_CODE (exp) == ADDR_EXPR || TREE_CODE (exp) == TREE_LIST)
@@ -12415,16 +12408,7 @@ cplus_expand_expr_stmt (exp)
 
   /* Clean up any pending cleanups.  This happens when a function call
      returns a cleanup-needing value that nobody uses.  */
 
   /* Clean up any pending cleanups.  This happens when a function call
      returns a cleanup-needing value that nobody uses.  */
-  expand_cleanups_to (old_cleanups);
-  pop_temp_slots ();
-  pop_temp_slots ();
-  target_temp_slot_level = old_temp_level;
-  /* There might something left from building the trees.  */
-  if (cleanups_this_call)
-    {
-      expand_cleanups_to (NULL_TREE);
-    }
-  free_temp_slots ();
+  expand_end_target_temps ();
 }
 
 /* When a stmt has been parsed, this function is called.
 }
 
 /* When a stmt has been parsed, this function is called.
index 60a27a4..1e8577a 100644 (file)
@@ -38,7 +38,6 @@ Boston, MA 02111-1307, USA.  */
 #include "output.h"
 
 extern tree get_file_function_name ();
 #include "output.h"
 
 extern tree get_file_function_name ();
-extern tree cleanups_this_call;
 static void grok_function_init PROTO((tree, tree));
 void import_export_decl ();
 extern int current_class_depth;
 static void grok_function_init PROTO((tree, tree));
 void import_export_decl ();
 extern int current_class_depth;
@@ -420,7 +419,6 @@ static struct { char *string; int *variable; int on_value;} lang_f_options[] =
   {"huge-objects", &flag_huge_objects, 1},
   {"conserve-space", &flag_conserve_space, 1},
   {"vtable-thunks", &flag_vtable_thunks, 1},
   {"huge-objects", &flag_huge_objects, 1},
   {"conserve-space", &flag_conserve_space, 1},
   {"vtable-thunks", &flag_vtable_thunks, 1},
-  {"short-temps", &flag_short_temps, 1},
   {"access-control", &flag_access_control, 1},
   {"nonansi-builtins", &flag_no_nonansi_builtin, 0},
   {"gnu-keywords", &flag_no_gnu_keywords, 0},
   {"access-control", &flag_access_control, 1},
   {"nonansi-builtins", &flag_no_nonansi_builtin, 0},
   {"gnu-keywords", &flag_no_gnu_keywords, 0},
@@ -2919,15 +2917,8 @@ finish_file ()
 
       while (vars)
        {
 
       while (vars)
        {
-         extern int temp_slot_level;
-         extern int target_temp_slot_level; 
          tree decl = TREE_VALUE (vars);
          tree init = TREE_PURPOSE (vars);
          tree decl = TREE_VALUE (vars);
          tree init = TREE_PURPOSE (vars);
-         tree old_cleanups = cleanups_this_call;
-         int old_temp_level = target_temp_slot_level;
-         push_temp_slots ();
-         push_temp_slots ();
-         target_temp_slot_level = temp_slot_level;
 
          /* If this was a static attribute within some function's scope,
             then don't initialize it here.  Also, don't bother
 
          /* If this was a static attribute within some function's scope,
             then don't initialize it here.  Also, don't bother
@@ -2940,9 +2931,9 @@ finish_file ()
 
          if (TREE_CODE (decl) == VAR_DECL)
            {
 
          if (TREE_CODE (decl) == VAR_DECL)
            {
-         int protect = (TREE_PUBLIC (decl) && (DECL_COMMON (decl)
-                                               || DECL_ONE_ONLY (decl)
-                                               || DECL_WEAK (decl)));
+             int protect = (TREE_PUBLIC (decl) && (DECL_COMMON (decl)
+                                                   || DECL_ONE_ONLY (decl)
+                                                   || DECL_WEAK (decl)));
 
              /* Set these global variables so that GDB at least puts
                 us near the declaration which required the initialization.  */
 
              /* Set these global variables so that GDB at least puts
                 us near the declaration which required the initialization.  */
@@ -2964,6 +2955,8 @@ finish_file ()
                  expand_start_cond (sentry, 0);
                }
 
                  expand_start_cond (sentry, 0);
                }
 
+             expand_start_target_temps ();
+
              if (IS_AGGR_TYPE (TREE_TYPE (decl))
                  || TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
                expand_aggr_init (decl, init, 0, 0);
              if (IS_AGGR_TYPE (TREE_TYPE (decl))
                  || TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
                expand_aggr_init (decl, init, 0, 0);
@@ -2977,6 +2970,9 @@ finish_file ()
              else
                expand_assignment (decl, init, 0, 0);
 
              else
                expand_assignment (decl, init, 0, 0);
 
+             /* Cleanup any temporaries needed for the initial value.  */
+             expand_end_target_temps ();
+
              if (protect)
                expand_end_cond ();
 
              if (protect)
                expand_end_cond ();
 
@@ -2987,13 +2983,7 @@ finish_file ()
            ;
          else my_friendly_abort (22);
 
            ;
          else my_friendly_abort (22);
 
-         /* Cleanup any temporaries needed for the initial value.  */
-         expand_cleanups_to (old_cleanups);
        next_mess:
        next_mess:
-         pop_temp_slots ();
-         pop_temp_slots ();
-         target_temp_slot_level = old_temp_level;
-
          vars = TREE_CHAIN (vars);
        }
 
          vars = TREE_CHAIN (vars);
        }
 
index 37f6dfe..efe9762 100644 (file)
@@ -35,12 +35,12 @@ Boston, MA 02111-1307, USA.  */
 
 rtx expand_builtin_return_addr PROTO((enum built_in_function, int, rtx));
 
 
 rtx expand_builtin_return_addr PROTO((enum built_in_function, int, rtx));
 
-/* holds the fndecl for __builtin_return_address () */
+/* Holds the fndecl for __builtin_return_address.  */
 tree builtin_return_address_fndecl;
 
 /* A couple of backend routines from m88k.c */
 
 tree builtin_return_address_fndecl;
 
 /* A couple of backend routines from m88k.c */
 
-/* used to cache a call to __builtin_return_address () */
+/* Used to cache a call to __builtin_return_address.  */
 static tree BuiltinReturnAddress;
      
 
 static tree BuiltinReturnAddress;
      
 
@@ -163,18 +163,17 @@ extern rtx gen_nop                PROTO(());
 /* local globals for function calls
    ====================================================================== */
 
 /* local globals for function calls
    ====================================================================== */
 
-/* used to cache "terminate ()", "unexpected ()", "set_terminate ()", and
-   "set_unexpected ()" after default_conversion. (lib-except.c)  */
+/* Used to cache "terminate", "unexpected", "set_terminate", and
+   "set_unexpected" after default_conversion. (lib-except.c)  */
 static tree Terminate, Unexpected, SetTerminate, SetUnexpected, CatchMatch;
 
 static tree Terminate, Unexpected, SetTerminate, SetUnexpected, CatchMatch;
 
-/* used to cache __find_first_exception_table_match ()
-   for throw (lib-except.c)  */
+/* Used to cache __find_first_exception_table_match for throw.  */
 static tree FirstExceptionMatch;
 
 static tree FirstExceptionMatch;
 
-/* used to cache a call to __unwind_function () (lib-except.c)  */
+/* Used to cache a call to __unwind_function.  */
 static tree Unwind;
 
 static tree Unwind;
 
-/* holds a ready to emit call to "terminate ()".  */
+/* Holds a ready to emit call to "terminate".  */
 static tree TerminateFunctionCall;
 
 static tree empty_fndecl;
 static tree TerminateFunctionCall;
 
 static tree empty_fndecl;
@@ -245,8 +244,8 @@ init_exception_processing ()
   tree PFV = build_pointer_type (build_function_type
                                 (void_type_node, void_list_node));
 
   tree PFV = build_pointer_type (build_function_type
                                 (void_type_node, void_list_node));
 
-  /* arg list for the build_function_type call for set_terminate () and
-     set_unexpected () */
+  /* Arg list for the build_function_type call for set_terminate and
+     set_unexpected */
   tree pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
 
   /* void (*pfvtype (void (*) ()))() */
   tree pfvlist = tree_cons (NULL_TREE, PFV, void_list_node);
 
   /* void (*pfvtype (void (*) ()))() */
@@ -343,6 +342,10 @@ init_exception_processing ()
   DECL_COMMON (d) = 1;
   cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
   saved_in_catch = lookup_name (get_identifier ("__eh_in_catch"), 0);
   DECL_COMMON (d) = 1;
   cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0);
   saved_in_catch = lookup_name (get_identifier ("__eh_in_catch"), 0);
+
+  /* If we use setjmp/longjmp EH, arrange for all cleanup actions to
+     be protected with __terminate.  */
+  protect_cleanup_actions_with_terminate = 1;
 }
 
 /* Build a type value for use at runtime for a type that is matched
 }
 
 /* Build a type value for use at runtime for a type that is matched
@@ -448,6 +451,8 @@ expand_start_catch_block (declspecs, declarator)
   false_label_rtx = gen_label_rtx ();
   push_label_entry (&false_label_stack, false_label_rtx, NULL_TREE);
 
   false_label_rtx = gen_label_rtx ();
   push_label_entry (&false_label_stack, false_label_rtx, NULL_TREE);
 
+  emit_line_note (input_filename, lineno);
+
   if (declspecs)
     {
       tree exp;
   if (declspecs)
     {
       tree exp;
@@ -460,8 +465,11 @@ expand_start_catch_block (declspecs, declarator)
        {
          error ("invalid catch parameter");
 
        {
          error ("invalid catch parameter");
 
-         /* This is cheap, but we want to maintain the data structures.  */
+         /* This is cheap, but we want to maintain the data
+             structures.  */
+
          expand_eh_region_start ();
          expand_eh_region_start ();
+
          return;
        }
 
          return;
        }
 
@@ -513,11 +521,17 @@ expand_start_catch_block (declspecs, declarator)
 
   emit_move_insn (DECL_RTL (saved_in_catch), const1_rtx);
 
 
   emit_move_insn (DECL_RTL (saved_in_catch), const1_rtx);
 
-  /* Because we are reordered out of line, we arrange
-     to rethrow in the outer context, should we encounter
-     an exception in the catch handler.
+  /* If we are not doing setjmp/longjmp EH, because we are reordered
+     out of line, we arrange to rethrow in the outer context so as to
+     skip through the terminate region we are nested in, should we
+     encounter an exception in the catch handler.
 
 
-     Matches the end in expand_end_catch_block ().  */
+     If we are doing setjmp/longjmp EH, we need to skip through the EH
+     object cleanup region.  This isn't quite right, as we really need
+     to clean the object up, but we cannot do that until we track
+     multiple EH objects.
+
+     Matches the end in expand_end_catch_block.  */
   expand_eh_region_start ();
 
   emit_line_note (input_filename, lineno);
   expand_eh_region_start ();
 
   emit_line_note (input_filename, lineno);
@@ -539,23 +553,42 @@ expand_end_catch_block ()
   if (! doing_eh (1))
     return;
 
   if (! doing_eh (1))
     return;
 
-  /* Fall to outside the try statement when done executing handler and
-     we fall off end of handler.  This is jump Lresume in the
-     documentation.  */
-  expand_goto (top_label_entry (&caught_return_label_stack));
-
   t = make_node (RTL_EXPR);
   TREE_TYPE (t) = void_type_node;
   RTL_EXPR_RTL (t) = const0_rtx;
   TREE_SIDE_EFFECTS (t) = 1;
   start_sequence_for_rtl_expr (t);
   t = make_node (RTL_EXPR);
   TREE_TYPE (t) = void_type_node;
   RTL_EXPR_RTL (t) = const0_rtx;
   TREE_SIDE_EFFECTS (t) = 1;
   start_sequence_for_rtl_expr (t);
-  expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
+
+  if (exceptions_via_longjmp)
+    {
+      /* If we are doing setjmp/longjmp EH, we need to skip through
+        the EH object cleanup region.  This isn't quite right, as we
+        really need to clean the object up, but we cannot do that
+        until we track multiple EH objects.  */
+
+      emit_library_call (sjpopnthrow_libfunc, 0, VOIDmode, 0);
+      emit_barrier ();
+    }
+  else
+    {
+      /* If we are not doing setjmp/longjmp EH, we need an extra
+        region around the whole catch block to skip through the
+        terminate region we are nested in.  */
+
+      expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
+    }
+
   RTL_EXPR_SEQUENCE (t) = get_insns ();
   end_sequence ();
 
   RTL_EXPR_SEQUENCE (t) = get_insns ();
   end_sequence ();
 
-  /* Matches the start in expand_start_catch_block ().  */
+  /* Matches the start in expand_start_catch_block.  */
   expand_eh_region_end (t);
 
   expand_eh_region_end (t);
 
+  /* Fall to outside the try statement when done executing handler and
+     we fall off end of handler.  This is jump Lresume in the
+     documentation.  */
+  expand_goto (top_label_entry (&caught_return_label_stack));
+
   expand_leftover_cleanups ();
 
   /* Cleanup the EH parameter.  */
   expand_leftover_cleanups ();
 
   /* Cleanup the EH parameter.  */
@@ -580,7 +613,7 @@ do_unwind (inner_throw_label)
   rtx return_val_rtx;
   rtx temp;
 
   rtx return_val_rtx;
   rtx temp;
 
-  /* call to  __builtin_return_address () */
+  /* Call to  __builtin_return_address. */
   params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
   fcall = build_function_call (BuiltinReturnAddress, params);
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
   params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
   fcall = build_function_call (BuiltinReturnAddress, params);
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
@@ -633,7 +666,7 @@ do_unwind (inner_throw_label)
 
 #if 0
   /* I would like to do this here, but the move below doesn't seem to work.  */
 
 #if 0
   /* I would like to do this here, but the move below doesn't seem to work.  */
-  /* call to  __builtin_return_address () */
+  /* Call to  __builtin_return_address.  */
   params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
   fcall = build_function_call (BuiltinReturnAddress, params);
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
   params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE);
   fcall = build_function_call (BuiltinReturnAddress, params);
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
@@ -651,7 +684,7 @@ do_unwind (inner_throw_label)
 }
 
 
 }
 
 
-/* is called from expand_exception_blocks () to generate the code in a function
+/* Is called from expand_exception_blocks to generate the code in a function
    to "throw" if anything in the function needs to perform a throw.
 
    expands "throw" as the following pseudo code:
    to "throw" if anything in the function needs to perform a throw.
 
    expands "throw" as the following pseudo code:
@@ -731,7 +764,7 @@ expand_builtin_throw ()
   /* code to deal with unwinding and looking for it again */
   emit_label (gotta_rethrow_it);
 
   /* code to deal with unwinding and looking for it again */
   emit_label (gotta_rethrow_it);
 
-  /* call to  __builtin_return_address () */
+  /* Call to  __builtin_return_address.  */
 #if defined (ARM_FRAME_RTX)  /* was __arm */
   /* This should be moved into arm.h:RETURN_ADDR_RTX */
   /* This replaces a 'call' to __builtin_return_address */
 #if defined (ARM_FRAME_RTX)  /* was __arm */
   /* This should be moved into arm.h:RETURN_ADDR_RTX */
   /* This replaces a 'call' to __builtin_return_address */
@@ -743,7 +776,7 @@ expand_builtin_throw ()
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
 #endif
 
   return_val_rtx = expand_expr (fcall, NULL_RTX, Pmode, 0);
 #endif
 
-  /* did __builtin_return_address () return a valid address? */
+  /* Did __builtin_return_address return a valid address?  */
   emit_cmp_insn (return_val_rtx, const0_rtx, EQ, NULL_RTX,
                 GET_MODE (return_val_rtx), 0, 0);
 
   emit_cmp_insn (return_val_rtx, const0_rtx, EQ, NULL_RTX,
                 GET_MODE (return_val_rtx), 0, 0);
 
@@ -837,6 +870,7 @@ expand_end_eh_spec (raises)
   do_function_call (Unexpected, NULL_TREE, NULL_TREE);
   assemble_external (TREE_OPERAND (Unexpected, 0));
   emit_barrier ();
   do_function_call (Unexpected, NULL_TREE, NULL_TREE);
   assemble_external (TREE_OPERAND (Unexpected, 0));
   emit_barrier ();
+
   expand_eh_region_end (second_try);
   
   emit_label (check);
   expand_eh_region_end (second_try);
   
   emit_label (check);
@@ -890,7 +924,6 @@ expand_exception_blocks ()
 
   funcend = gen_label_rtx ();
   emit_jump (funcend);
 
   funcend = gen_label_rtx ();
   emit_jump (funcend);
-  /* expand_null_return (); */
 
   start_sequence ();
 
 
   start_sequence ();
 
@@ -931,12 +964,22 @@ expand_exception_blocks ()
 
   if (insns)
     {
 
   if (insns)
     {
-      /* Is this necessary?  */
-      assemble_external (TREE_OPERAND (Terminate, 0));
+      /* We cannot protect n regions this way if we must flow into the
+        EH region through the top of the region, as we have to with
+        the setjmp/longjmp approach.  */
+      if (exceptions_via_longjmp == 0)
+       {
+         /* Is this necessary?  */
+         assemble_external (TREE_OPERAND (Terminate, 0));
+
+         expand_eh_region_start ();
+       }
 
 
-      expand_eh_region_start ();
       emit_insns (insns);
       emit_insns (insns);
-      expand_eh_region_end (TerminateFunctionCall);
+
+      if (exceptions_via_longjmp == 0)
+       expand_eh_region_end (TerminateFunctionCall);
+
       expand_leftover_cleanups ();
     }
 
       expand_leftover_cleanups ();
     }
 
@@ -1125,13 +1168,18 @@ expand_throw (exp)
       /* This part is easy, as we don't have to do anything else.  */
     }
 
       /* This part is easy, as we don't have to do anything else.  */
     }
 
-  /* This is the label that represents where in the code we were, when
-     we got an exception.  This needs to be updated when we rethrow an
-     exception, so that the matching routine knows to search out.  */
-  label = gen_label_rtx ();
-  emit_label (label);
+  if (exceptions_via_longjmp)
+    emit_throw ();
+  else
+    {
+      /* This is the label that represents where in the code we were, when
+        we got an exception.  This needs to be updated when we rethrow an
+        exception, so that the matching routine knows to search out.  */
+      label = gen_label_rtx ();
+      emit_label (label);
 
 
-  expand_internal_throw (label);
+      expand_internal_throw (label);
+    }
 }
 
 /* Build a throw expression.  */
 }
 
 /* Build a throw expression.  */
index 8cf227a..5d9503f 100644 (file)
 #include "typeinfo"
 #include "exception"
 
 #include "typeinfo"
 #include "exception"
 
-/* terminate (), unexpected (), set_terminate (), set_unexpected () as
-   well as the default terminate func and default unexpected func */
+/* Define terminate, unexpected, set_terminate, set_unexpected as
+   well as the default terminate func and default unexpected func.  */
+
+extern terminate_handler __terminate_func;
 
 void
 
 void
-__default_terminate ()
+terminate ()
 {
 {
-  abort ();
+  __terminate_func ();
 }
 
 void
 __default_unexpected ()
 {
 }
 
 void
 __default_unexpected ()
 {
-  __default_terminate ();
+  terminate ();
 }
 
 }
 
-static terminate_handler __terminate_func = __default_terminate;
 static unexpected_handler __unexpected_func = __default_unexpected;
 
 terminate_handler
 static unexpected_handler __unexpected_func = __default_unexpected;
 
 terminate_handler
@@ -67,12 +68,6 @@ set_unexpected (unexpected_handler func)
 }
 
 void
 }
 
 void
-terminate ()
-{
-  __terminate_func ();
-}
-
-void
 unexpected ()
 {
   __unexpected_func ();
 unexpected ()
 {
   __unexpected_func ();
index 4e1785d..332679d 100644 (file)
@@ -27,6 +27,7 @@ Boston, MA 02111-1307, USA.  */
 #include "cp-tree.h"
 #include "flags.h"
 #include "output.h"
 #include "cp-tree.h"
 #include "flags.h"
 #include "output.h"
+#include "except.h"
 
 /* In C++, structures with well-defined constructors are initialized by
    those constructors, unasked.  CURRENT_BASE_INIT_LIST
 
 /* In C++, structures with well-defined constructors are initialized by
    those constructors, unasked.  CURRENT_BASE_INIT_LIST
@@ -39,8 +40,6 @@ Boston, MA 02111-1307, USA.  */
    line.  Perhaps this was not intended.  */
 tree current_base_init_list, current_member_init_list;
 
    line.  Perhaps this was not intended.  */
 tree current_base_init_list, current_member_init_list;
 
-extern tree cleanups_this_call;
-
 void emit_base_init ();
 void check_base_init ();
 static void expand_aggr_vbase_init ();
 void emit_base_init ();
 void check_base_init ();
 static void expand_aggr_vbase_init ();
@@ -153,13 +152,8 @@ perform_member_init (member, name, init, explicit)
 {
   tree decl;
   tree type = TREE_TYPE (member);
 {
   tree decl;
   tree type = TREE_TYPE (member);
-  extern int temp_slot_level;
-  extern int target_temp_slot_level; 
-  tree old_cleanups = cleanups_this_call;
-  int old_temp_level = target_temp_slot_level;
-  push_temp_slots ();
-  push_temp_slots ();
-  target_temp_slot_level = temp_slot_level;
+
+  expand_start_target_temps ();
 
   if (TYPE_NEEDS_CONSTRUCTING (type)
       || (init && TYPE_HAS_CONSTRUCTOR (type)))
 
   if (TYPE_NEEDS_CONSTRUCTING (type)
       || (init && TYPE_HAS_CONSTRUCTOR (type)))
@@ -219,15 +213,8 @@ perform_member_init (member, name, init, explicit)
          expand_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
        }
     }
          expand_expr_stmt (build_modify_expr (decl, INIT_EXPR, init));
        }
     }
-  expand_cleanups_to (old_cleanups);
-  pop_temp_slots ();
-  pop_temp_slots ();
-  target_temp_slot_level = old_temp_level;
-  /* There might something left from building the trees.  */
-  if (cleanups_this_call)
-    {
-      expand_cleanups_to (NULL_TREE);
-    }
+
+  expand_end_target_temps ();
   free_temp_slots ();
 
   if (TYPE_NEEDS_DESTRUCTOR (type))
   free_temp_slots ();
 
   if (TYPE_NEEDS_DESTRUCTOR (type))
@@ -589,27 +576,14 @@ emit_base_init (t, immediately)
 
       if (init != void_list_node)
        {
 
       if (init != void_list_node)
        {
-         extern int temp_slot_level;
-         extern int target_temp_slot_level; 
-         tree old_cleanups = cleanups_this_call;
-         int old_temp_level = target_temp_slot_level;
-         push_temp_slots ();
-         push_temp_slots ();
-         target_temp_slot_level = temp_slot_level;
+         expand_start_target_temps ();
 
          member = convert_pointer_to_real (base_binfo, current_class_ptr);
          expand_aggr_init_1 (base_binfo, NULL_TREE,
                              build_indirect_ref (member, NULL_PTR), init,
                              BINFO_OFFSET_ZEROP (base_binfo), LOOKUP_NORMAL);
 
          member = convert_pointer_to_real (base_binfo, current_class_ptr);
          expand_aggr_init_1 (base_binfo, NULL_TREE,
                              build_indirect_ref (member, NULL_PTR), init,
                              BINFO_OFFSET_ZEROP (base_binfo), LOOKUP_NORMAL);
-         expand_cleanups_to (old_cleanups);
-         pop_temp_slots ();
-         pop_temp_slots ();
-         target_temp_slot_level = old_temp_level;
-         /* There might something left from building the trees.  */
-         if (cleanups_this_call)
-           {
-             expand_cleanups_to (NULL_TREE);
-           }
+
+         expand_end_target_temps ();
          free_temp_slots ();
        }
 
          free_temp_slots ();
        }
 
@@ -796,28 +770,14 @@ expand_aggr_vbase_init_1 (binfo, exp, addr, init_list)
   tree init = purpose_member (binfo, init_list);
   tree ref = build_indirect_ref (addr, NULL_PTR);
 
   tree init = purpose_member (binfo, init_list);
   tree ref = build_indirect_ref (addr, NULL_PTR);
 
-  extern int temp_slot_level;
-  extern int target_temp_slot_level; 
-  tree old_cleanups = cleanups_this_call;
-  int old_temp_level = target_temp_slot_level;
-  push_temp_slots ();
-  push_temp_slots ();
-  target_temp_slot_level = temp_slot_level;
+  expand_start_target_temps ();
 
   if (init)
     init = TREE_VALUE (init);
   /* Call constructors, but don't set up vtables.  */
   expand_aggr_init_1 (binfo, exp, ref, init, 0, LOOKUP_COMPLAIN);
 
 
   if (init)
     init = TREE_VALUE (init);
   /* Call constructors, but don't set up vtables.  */
   expand_aggr_init_1 (binfo, exp, ref, init, 0, LOOKUP_COMPLAIN);
 
-  expand_cleanups_to (old_cleanups);
-  pop_temp_slots ();
-  pop_temp_slots ();
-  target_temp_slot_level = old_temp_level;
-  /* There might something left from building the trees.  */
-  if (cleanups_this_call)
-    {
-      expand_cleanups_to (NULL_TREE);
-    }
+  expand_end_target_temps ();
   free_temp_slots ();
 }
 
   free_temp_slots ();
 }
 
@@ -3109,20 +3069,22 @@ expand_vec_init (decl, base, maxindex, init, from_array)
          push_obstacks_nochange ();
          resume_temporary_allocation ();
          {
          push_obstacks_nochange ();
          resume_temporary_allocation ();
          {
-           tree e1, e2 = make_node (RTL_EXPR);
-           TREE_TYPE (e2) = void_type_node;
-           RTL_EXPR_RTL (e2) = const0_rtx;
-           TREE_SIDE_EFFECTS (e2) = 1;
-           start_sequence_for_rtl_expr (e2);
+           tree e1, cleanup = make_node (RTL_EXPR);
+           TREE_TYPE (cleanup) = void_type_node;
+           RTL_EXPR_RTL (cleanup) = const0_rtx;
+           TREE_SIDE_EFFECTS (cleanup) = 1;
+           start_sequence_for_rtl_expr (cleanup);
 
            e1 = build_array_eh_cleanup
              (rval,
               build_binary_op (MINUS_EXPR, maxindex, iterator, 1),
               type);
            expand_expr (e1, const0_rtx, VOIDmode, 0);
 
            e1 = build_array_eh_cleanup
              (rval,
               build_binary_op (MINUS_EXPR, maxindex, iterator, 1),
               type);
            expand_expr (e1, const0_rtx, VOIDmode, 0);
-           RTL_EXPR_SEQUENCE (e2) = get_insns ();
+           RTL_EXPR_SEQUENCE (cleanup) = get_insns ();
            end_sequence ();
            end_sequence ();
-           expand_eh_region_end (e2);
+
+           cleanup = protect_with_terminate (cleanup);
+           expand_eh_region_end (cleanup);
          }
          pop_obstacks ();
        }
          }
          pop_obstacks ();
        }
index ed76bcf..f2014c6 100644 (file)
@@ -70,8 +70,6 @@ Boston, MA 02111-1307, USA.  */
   "-fno-repo",
   "-fsave-memoized",
   "-fno-save-memoized",
   "-fno-repo",
   "-fsave-memoized",
   "-fno-save-memoized",
-  "-fshort-temps",
-  "-fno-short-temps",
   "-fstats",
   "-fno-stats",
   "-fstrict-prototype",
   "-fstats",
   "-fno-stats",
   "-fstrict-prototype",
index a9dd9d5..358e24a 100644 (file)
@@ -1698,7 +1698,7 @@ make_thunk (function, delta)
     }
   if (thunk == NULL_TREE)
     {
     }
   if (thunk == NULL_TREE)
     {
-      thunk = build_decl (FUNCTION_DECL, thunk_id, TREE_TYPE (func_decl));
+      thunk = build_lang_decl (FUNCTION_DECL, thunk_id, TREE_TYPE (func_decl));
       DECL_RESULT (thunk)
        = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (vtable_entry_type)));
       TREE_READONLY (thunk) = TYPE_READONLY (TREE_TYPE (vtable_entry_type));
       DECL_RESULT (thunk)
        = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (TREE_TYPE (vtable_entry_type)));
       TREE_READONLY (thunk) = TYPE_READONLY (TREE_TYPE (vtable_entry_type));
@@ -1719,27 +1719,9 @@ void
 emit_thunk (thunk_fndecl)
      tree thunk_fndecl;
 {
 emit_thunk (thunk_fndecl)
      tree thunk_fndecl;
 {
-  rtx insns;
-  char buffer[250];
-  tree argp;
-  struct args_size stack_args_size;
   tree function = TREE_OPERAND (DECL_INITIAL (thunk_fndecl), 0);
   int delta = THUNK_DELTA (thunk_fndecl);
   char *fnname = XSTR (XEXP (DECL_RTL (thunk_fndecl), 0), 0);
   tree function = TREE_OPERAND (DECL_INITIAL (thunk_fndecl), 0);
   int delta = THUNK_DELTA (thunk_fndecl);
   char *fnname = XSTR (XEXP (DECL_RTL (thunk_fndecl), 0), 0);
-  int tem;
-  int failure = 0;
-  int save_ofp;
-
-  /* Used to remember which regs we need to emit a USE rtx for.  */
-  rtx need_use[FIRST_PSEUDO_REGISTER];
-  int need_use_count = 0;
-
-  /* rtx for the 'this' parameter.  */
-  rtx this_rtx = 0, this_reg_rtx = 0, fixed_this_rtx;
-
-  char *(*save_decl_printable_name) () = decl_printable_name;
-  /* Data on reg parms scanned so far.  */
-  CUMULATIVE_ARGS args_so_far;
 
   if (TREE_ASM_WRITTEN (thunk_fndecl))
     return;
 
   if (TREE_ASM_WRITTEN (thunk_fndecl))
     return;
@@ -1749,203 +1731,58 @@ emit_thunk (thunk_fndecl)
   TREE_ADDRESSABLE (function) = 1;
   mark_used (function);
 
   TREE_ADDRESSABLE (function) = 1;
   mark_used (function);
 
-  decl_printable_name = thunk_printable_name;
   if (current_function_decl)
     abort ();
   if (current_function_decl)
     abort ();
-  current_function_decl = thunk_fndecl;
 
   TREE_SET_CODE (thunk_fndecl, FUNCTION_DECL);
 
   TREE_SET_CODE (thunk_fndecl, FUNCTION_DECL);
+
 #ifdef ASM_OUTPUT_MI_THUNK
 #ifdef ASM_OUTPUT_MI_THUNK
+  current_function_decl = thunk_fndecl;
   temporary_allocation ();
   assemble_start_function (thunk_fndecl, fnname);
   ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
   assemble_end_function (thunk_fndecl, fnname);
   permanent_allocation (1);
   temporary_allocation ();
   assemble_start_function (thunk_fndecl, fnname);
   ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
   assemble_end_function (thunk_fndecl, fnname);
   permanent_allocation (1);
-#else
-  save_ofp = flag_omit_frame_pointer;
-  flag_omit_frame_pointer = 1;
-  init_function_start (thunk_fndecl, input_filename, lineno);
-  pushlevel (0);
-  expand_start_bindings (1);
-
-  temporary_allocation ();
-
-  /* Start updating where the next arg would go.  */
-  INIT_CUMULATIVE_ARGS (args_so_far, TREE_TYPE (function), NULL_RTX, 0);
-  stack_args_size.constant = 0;
-  stack_args_size.var = 0;
-  /* SETUP for possible structure return address FIXME */
-
-  /* Now look through all the parameters, make sure that we
-     don't clobber any registers used for parameters.
-     Also, pick up an rtx for the first "this" parameter.  */
-  for (argp = TYPE_ARG_TYPES (TREE_TYPE (function));
-       argp != NULL_TREE;
-       argp = TREE_CHAIN (argp))
-
-    {
-      tree passed_type = TREE_VALUE (argp);
-      register rtx entry_parm;
-      int named = 1; /* FIXME */
-      struct args_size stack_offset;
-      struct args_size arg_size;
-
-      if (passed_type == void_type_node)
-       break;
-
-      if ((TREE_CODE (TYPE_SIZE (passed_type)) != INTEGER_CST
-          && contains_placeholder_p (TYPE_SIZE (passed_type)))
-#ifdef FUNCTION_ARG_PASS_BY_REFERENCE
-         || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far,
-                                            TYPE_MODE (passed_type),
-                                            passed_type, named)
-#endif
-         )
-       passed_type = build_pointer_type (passed_type);
-
-      entry_parm = FUNCTION_ARG (args_so_far,
-                                TYPE_MODE (passed_type),
-                                passed_type,
-                                named);
-      if (entry_parm != 0)
-       need_use[need_use_count++] = entry_parm;
-
-      locate_and_pad_parm (TYPE_MODE (passed_type), passed_type,
-#ifdef STACK_PARMS_IN_REG_PARM_AREA
-                          1,
-#else
-                          entry_parm != 0,
-#endif
-                          thunk_fndecl,
-                          &stack_args_size, &stack_offset, &arg_size);
-
-/*    REGNO (entry_parm);*/
-      if (this_rtx == 0)
-       {
-         this_reg_rtx = entry_parm;
-         if (!entry_parm)
-           {
-             rtx offset_rtx = ARGS_SIZE_RTX (stack_offset);
-
-             rtx internal_arg_pointer, stack_parm;
-
-             if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM
-                  || ! (fixed_regs[ARG_POINTER_REGNUM]
-                        || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM)))
-               internal_arg_pointer = copy_to_reg (virtual_incoming_args_rtx);
-             else
-               internal_arg_pointer = virtual_incoming_args_rtx;
-
-             if (offset_rtx == const0_rtx)
-               entry_parm = gen_rtx (MEM, TYPE_MODE (passed_type),
-                                     internal_arg_pointer);
-             else
-               entry_parm = gen_rtx (MEM, TYPE_MODE (passed_type),
-                                     gen_rtx (PLUS, Pmode,
-                                              internal_arg_pointer, 
-                                              offset_rtx));
-           }
-         
-         this_rtx = entry_parm;
-       }
-
-      FUNCTION_ARG_ADVANCE (args_so_far,
-                           TYPE_MODE (passed_type),
-                           passed_type,
-                           named);
-    }
-
-  fixed_this_rtx = plus_constant (this_rtx, delta);
-  if (this_rtx != fixed_this_rtx)
-    emit_move_insn (this_rtx, fixed_this_rtx);
-
-  if (this_reg_rtx)
-    emit_insn (gen_rtx (USE, VOIDmode, this_reg_rtx));
-
-  emit_indirect_jump (XEXP (DECL_RTL (function), 0));
-
-  while (need_use_count > 0)
-    emit_insn (gen_rtx (USE, VOIDmode, need_use[--need_use_count]));
-
-  expand_end_bindings (NULL, 1, 0);
-  poplevel (0, 0, 1);
-
-  /* From now on, allocate rtl in current_obstack, not in saveable_obstack.
-     Note that that may have been done above, in save_for_inline_copying.
-     The call to resume_temporary_allocation near the end of this function
-     goes back to the usual state of affairs.  */
-
-  rtl_in_current_obstack ();
-
-  insns = get_insns ();
-
-  /* Copy any shared structure that should not be shared.  */
-
-  unshare_all_rtl (insns);
-
-  /* Instantiate all virtual registers.  */
-
-  instantiate_virtual_regs (current_function_decl, get_insns ());
-
-  /* We are no longer anticipating cse in this function, at least.  */
-
-  cse_not_expected = 1;
-
-  /* Now we choose between stupid (pcc-like) register allocation
-     (if we got the -noreg switch and not -opt)
-     and smart register allocation.  */
-
-  if (optimize > 0)                    /* Stupid allocation probably won't work */
-    obey_regdecls = 0;         /* if optimizations being done.  */
-
-  regclass_init ();
-
-  regclass (insns, max_reg_num ());
-  if (obey_regdecls)
-    {
-      stupid_life_analysis (insns, max_reg_num (), NULL);
-      failure = reload (insns, 0, NULL);
-    }
-  else
-    {
-      /* Do control and data flow analysis,
-        and write some of the results to dump file.  */
-
-      flow_analysis (insns, max_reg_num (), NULL);
-      local_alloc ();
-      failure = global_alloc (NULL);
-    }
-
-  reload_completed = 1;
-
-#ifdef LEAF_REGISTERS
-  leaf_function = 0;
-  if (optimize > 0 && only_leaf_regs_used () && leaf_function_p ())
-    leaf_function = 1;
-#endif
-
-  /* If a machine dependent reorganization is needed, call it.  */
-#ifdef MACHINE_DEPENDENT_REORG
-   MACHINE_DEPENDENT_REORG (insns);
-#endif
-
-  /* Now turn the rtl into assembler code.  */
-
-  assemble_start_function (thunk_fndecl, fnname);
-  final (insns, asm_out_file, optimize, 0);
-  assemble_end_function (thunk_fndecl, fnname);
-
-  reload_completed = 0;
-
-  /* Cancel the effect of rtl_in_current_obstack.  */
+  current_function_decl = 0;
+#else /* ASM_OUTPUT_MI_THUNK */
+  if (varargs_function_p (function))
+    cp_error ("generic thunk code does not work for variadic function `%#D'",
+             function);
+  {
+    tree a, t;
 
 
-  permanent_allocation (1);
-  flag_omit_frame_pointer = save_ofp;
+    /* Set up clone argument trees for the thunk.  */
+    t = NULL_TREE;
+    for (a = DECL_ARGUMENTS (function); a; a = TREE_CHAIN (a))
+      {
+       tree x = copy_node (a);
+       TREE_CHAIN (x) = t;
+       DECL_CONTEXT (x) = thunk_fndecl;
+       t = x;
+      }
+    a = nreverse (t);
+    DECL_ARGUMENTS (thunk_fndecl) = a;
+    DECL_RESULT (thunk_fndecl) = NULL_TREE;
+
+    start_function (NULL_TREE, thunk_fndecl, NULL_TREE, 1);
+    store_parm_decls ();
+
+    /* Build up the call to the real function.  */
+    t = build_int_2 (delta, -1 * (delta < 0));
+    TREE_TYPE (t) = signed_type (sizetype);
+    t = fold (build (PLUS_EXPR, TREE_TYPE (a), a, t));
+    t = tree_cons (NULL_TREE, t, NULL_TREE);
+    for (a = TREE_CHAIN (a); a; a = TREE_CHAIN (a))
+      t = tree_cons (NULL_TREE, a, t);
+    t = nreverse (t);
+    t = build_call (function, TREE_TYPE (TREE_TYPE (function)), t);
+    c_expand_return (t);
+
+    finish_function (lineno, 0, 0);
+  }
 #endif /* ASM_OUTPUT_MI_THUNK */
 #endif /* ASM_OUTPUT_MI_THUNK */
-  TREE_SET_CODE (thunk_fndecl, THUNK_DECL);
 
 
-  decl_printable_name = save_decl_printable_name;
-  current_function_decl = 0;
+  TREE_SET_CODE (thunk_fndecl, THUNK_DECL);
 }
 \f
 /* Code for synthesizing methods which have default semantics defined.  */
 }
 \f
 /* Code for synthesizing methods which have default semantics defined.  */
index d0a6c76..7850be9 100644 (file)
@@ -132,6 +132,9 @@ process_template_parm (list, next)
            error ("  a template type parameter must begin with `class' or `typename'");
          TREE_TYPE (parm) = void_type_node;
        }
            error ("  a template type parameter must begin with `class' or `typename'");
          TREE_TYPE (parm) = void_type_node;
        }
+      else if (pedantic && TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE)
+       cp_pedwarn ("`%T' is not a valid type for a template constant parameter",
+                   TREE_TYPE (parm));
       tinfo = make_node (TEMPLATE_CONST_PARM);
       my_friendly_assert (TREE_PERMANENT (tinfo), 260.5);
       if (TREE_PERMANENT (parm) == 0)
       tinfo = make_node (TEMPLATE_CONST_PARM);
       my_friendly_assert (TREE_PERMANENT (tinfo), 260.5);
       if (TREE_PERMANENT (parm) == 0)
index 90deea7..49c64d7 100644 (file)
@@ -299,11 +299,9 @@ yylex ()
            case SELFNAME:
              lastiddecl = identifier_typedecl_value (tmp_token.yylval.ttype);
              if (lastiddecl != trrr)
            case SELFNAME:
              lastiddecl = identifier_typedecl_value (tmp_token.yylval.ttype);
              if (lastiddecl != trrr)
-               {
-                 lastiddecl = trrr;
-                 if (got_scope)
-                   tmp_token.yylval.ttype = trrr;
-               }
+               lastiddecl = trrr;
+             if (got_scope)
+               tmp_token.yylval.ttype = trrr;
              break;
            case IDENTIFIER:
              lastiddecl = trrr;
              break;
            case IDENTIFIER:
              lastiddecl = trrr;
index 10290a8..72870df 100644 (file)
@@ -43,7 +43,7 @@ fast_compare (const char *n1, const char *n2) {
 };
 
 bool
 };
 
 bool
-type_info::before (const type_info &arg)
+type_info::before (const type_info &arg) const
 {
   return fast_compare (name (), arg.name ()) < 0;
 }
 {
   return fast_compare (name (), arg.name ()) < 0;
 }
index aefce65..de9128f 100644 (file)
@@ -108,6 +108,8 @@ real_lvalue_p (ref)
   return 0;
 }
 
   return 0;
 }
 
+/* This differs from real_lvalue_p in that class rvalues are considered
+   lvalues.  */
 int
 lvalue_p (ref)
      tree ref;
 int
 lvalue_p (ref)
      tree ref;
@@ -2102,3 +2104,16 @@ error_type (arg)
 
   return type;
 }
 
   return type;
 }
+
+/* Does FUNCTION use a variable-length argument list?  */
+
+int
+varargs_function_p (function)
+     tree function;
+{
+  tree parm = TYPE_ARG_TYPES (TREE_TYPE (function));
+  for (; parm; parm = TREE_CHAIN (parm))
+    if (TREE_VALUE (parm) == void_type_node)
+      return 0;
+  return 1;
+}
index a734c01..97b6fba 100644 (file)
@@ -1507,7 +1507,7 @@ decay_conversion (exp)
              inner = build1 (CONVERT_EXPR,
                              build_pointer_type (TREE_TYPE (TREE_TYPE (inner))),
                              inner);
              inner = build1 (CONVERT_EXPR,
                              build_pointer_type (TREE_TYPE (TREE_TYPE (inner))),
                              inner);
-             TREE_REFERENCE_EXPR (inner) = 1;
+             TREE_CONSTANT (inner) = TREE_CONSTANT (TREE_OPERAND (inner, 0));
            }
          return convert (build_pointer_type (TREE_TYPE (type)), inner);
        }
            }
          return convert (build_pointer_type (TREE_TYPE (type)), inner);
        }
@@ -4261,8 +4261,10 @@ build_unary_op (code, xarg, noconvert)
       argtype = TREE_TYPE (arg);
       if (TREE_CODE (argtype) == REFERENCE_TYPE)
        {
       argtype = TREE_TYPE (arg);
       if (TREE_CODE (argtype) == REFERENCE_TYPE)
        {
-         arg = build1 (CONVERT_EXPR, build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
-         TREE_REFERENCE_EXPR (arg) = 1;
+         arg = build1
+           (CONVERT_EXPR,
+            build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
+         TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
          return arg;
        }
       else if (pedantic
          return arg;
        }
       else if (pedantic
@@ -4283,16 +4285,12 @@ build_unary_op (code, xarg, noconvert)
          if (arg == current_class_ref)
            return current_class_ptr;
 
          if (arg == current_class_ref)
            return current_class_ptr;
 
-         /* Keep `default_conversion' from converting if
-            ARG is of REFERENCE_TYPE.  */
          arg = TREE_OPERAND (arg, 0);
          if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
            {
          arg = TREE_OPERAND (arg, 0);
          if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
            {
-             if (TREE_CODE (arg) == VAR_DECL && DECL_INITIAL (arg)
-                 && !TREE_SIDE_EFFECTS (DECL_INITIAL (arg)))
-               arg = DECL_INITIAL (arg);
-             arg = build1 (CONVERT_EXPR, build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
-             TREE_REFERENCE_EXPR (arg) = 1;
+             arg = build1
+               (CONVERT_EXPR,
+                build_pointer_type (TREE_TYPE (TREE_TYPE (arg))), arg);
              TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
            }
          else if (lvalue_p (arg))
              TREE_CONSTANT (arg) = TREE_CONSTANT (TREE_OPERAND (arg, 0));
            }
          else if (lvalue_p (arg))
@@ -7148,6 +7146,8 @@ c_expand_return (retval)
          if (TREE_CODE (whats_returned) == ADDR_EXPR)
            whats_returned = TREE_OPERAND (whats_returned, 0);
        }
          if (TREE_CODE (whats_returned) == ADDR_EXPR)
            whats_returned = TREE_OPERAND (whats_returned, 0);
        }
+      if (TREE_CODE (whats_returned) == CONVERT_EXPR)
+       whats_returned = TREE_OPERAND (whats_returned, 0);
       if (TREE_CODE (whats_returned) == ADDR_EXPR)
        {
          whats_returned = TREE_OPERAND (whats_returned, 0);
       if (TREE_CODE (whats_returned) == ADDR_EXPR)
        {
          whats_returned = TREE_OPERAND (whats_returned, 0);