]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/14026 (std::uncaught_exception is true although there are no uncaught...
authorRichard Henderson <rth@redhat.com>
Sun, 8 Feb 2004 18:01:23 +0000 (10:01 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Sun, 8 Feb 2004 18:01:23 +0000 (10:01 -0800)
        PR libstdc++/14026
        * libsupc++/eh_catch.cc (__cxa_begin_catch): Don't adjust
        uncaughtExceptions during nested catch rethrow.
        * testsuite/18_support/14026.cc: New.

From-SVN: r77492

libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/eh_catch.cc
libstdc++-v3/testsuite/18_support/14026.cc [new file with mode: 0644]

index a8a0edcf3cd3570c539284eead33cf100694f6ba..4da5edd796afd74c8459a22bb2ce9e56e861b3ae 100644 (file)
@@ -1,3 +1,10 @@
+2004-02-08  Richard Henderson  <rth@redhat.com>
+
+       PR libstdc++/14026
+       * libsupc++/eh_catch.cc (__cxa_begin_catch): Don't adjust 
+       uncaughtExceptions during nested catch rethrow.
+       * testsuite/18_support/14026.cc: New.
+
 2004-02-08  Paolo Carlini  <pcarlini@suse.de>
 
        * include/bits/basic_string.tcc (assign(const _CharT*, size_type)):
index f8b7137e57e616e01da6879b474dbdbb65228b47..0e186605f09a064e96f93d033d0df19bbb388cbe 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*- Exception handling routines for catching.
-// Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
@@ -65,10 +65,12 @@ __cxa_begin_catch (void *exc_obj_in)
     // This exception was rethrown from an immediately enclosing region.
     count = -count + 1;
   else
-    count += 1;
+    {
+      count += 1;
+      globals->uncaughtExceptions -= 1;
+    }
   header->handlerCount = count;
 
-  globals->uncaughtExceptions -= 1;
   if (header != prev)
     {
       header->nextException = prev;
diff --git a/libstdc++-v3/testsuite/18_support/14026.cc b/libstdc++-v3/testsuite/18_support/14026.cc
new file mode 100644 (file)
index 0000000..103ac64
--- /dev/null
@@ -0,0 +1,34 @@
+// PR 14026
+// 18.6.4 uncaught_exception
+
+#include <cstdlib>
+#include <exception>
+#include <testsuite_hooks.h>
+
+static void
+no_uncaught ()
+{
+  if (std::uncaught_exception ())
+    abort ();
+}
+
+int
+main ()
+{
+  try
+    {
+      throw 1;
+    }
+  catch (...)
+    {
+      try
+        {
+          throw;
+        }
+      catch (...)
+        {
+          no_uncaught ();
+        }
+    }
+  no_uncaught ();
+}