except.c (expand_start_catch_block): suspend_momentary for the terminate handler.
authorJason Merrill <jason@yorick.cygnus.com>
Mon, 8 Dec 1997 02:25:36 +0000 (02:25 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 8 Dec 1997 02:25:36 +0000 (21:25 -0500)
* except.c (expand_start_catch_block): suspend_momentary for the
terminate handler.

From-SVN: r17003

gcc/cp/ChangeLog
gcc/cp/except.c

index d2049dfd23082bbe22756e5f3b1cc1f3de81701b..8476d56a1cb1c7daec98789a9cac3c0d2b43f000 100644 (file)
@@ -1,5 +1,8 @@
 Sun Dec  7 15:53:06 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
+       * except.c (expand_start_catch_block): suspend_momentary for the
+       terminate handler.
+
        * error.c (dump_decl): Handle LOOKUP_EXPR.
 
 Sun Dec  7 15:45:07 1997  Mark Mitchell  <mmitchell@usa.net>
index cb170210922403d973855ce4facb1181a10d0b5b..3d62c77184522a43495d7b6cfb16d7d4be5ce13f 100644 (file)
@@ -598,12 +598,15 @@ expand_start_catch_block (declspecs, declarator)
          must call terminate.  See eh23.C.  */
       if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
        {
+         int yes = suspend_momentary ();
+         tree term = build_function_call (Terminate, NULL_TREE);
+         resume_momentary (yes);
+
          /* Generate the copy constructor call directly so we can wrap it.
             See also expand_default_init.  */
          init = ocp_convert (TREE_TYPE (decl), init,
                              CONV_IMPLICIT|CONV_FORCE_TEMP, 0);
-         init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init,
-                       build_function_call (Terminate, NULL_TREE));
+         init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init, term);
        }
 
       /* Let `cp_finish_decl' know that this initializer is ok.  */