From 1e6ac5e8f482814428fc6205572ee1570471fb2e Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Tue, 29 May 2018 22:25:42 +0000 Subject: [PATCH] Fix embarrasing typo in uncaught_exceptions. Update tests to really test this. Thanks to Peter Klotz for calling my attention to this. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@333467 91177308-0d34-0410-b5e6-96231b3b80d8 --- src/support/runtime/exception_libcxxabi.ipp | 2 +- .../uncaught/uncaught_exceptions.pass.cpp | 50 +++++++++++-------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/support/runtime/exception_libcxxabi.ipp b/src/support/runtime/exception_libcxxabi.ipp index c3dcf1ec5..feefc5152 100644 --- a/src/support/runtime/exception_libcxxabi.ipp +++ b/src/support/runtime/exception_libcxxabi.ipp @@ -18,7 +18,7 @@ bool uncaught_exception() _NOEXCEPT { return uncaught_exceptions() > 0; } int uncaught_exceptions() _NOEXCEPT { -# if _LIBCPPABI_VERSION > 1101 +# if _LIBCPPABI_VERSION > 1001 return __cxa_uncaught_exceptions(); # else return __cxa_uncaught_exception() ? 1 : 0; diff --git a/test/std/language.support/support.exception/uncaught/uncaught_exceptions.pass.cpp b/test/std/language.support/support.exception/uncaught/uncaught_exceptions.pass.cpp index e35e7afa3..0a63a4742 100644 --- a/test/std/language.support/support.exception/uncaught/uncaught_exceptions.pass.cpp +++ b/test/std/language.support/support.exception/uncaught/uncaught_exceptions.pass.cpp @@ -15,40 +15,48 @@ // XFAIL: availability=macosx10.9 // XFAIL: availability=macosx10.10 // XFAIL: availability=macosx10.11 +// XFAIL: with_system_cxx_lib=macosx10.12 +// XFAIL: with_system_cxx_lib=macosx10.13 // test uncaught_exceptions #include #include -struct A -{ - ~A() - { - assert(std::uncaught_exceptions() > 0); +struct Uncaught { + Uncaught(int depth) : d_(depth) {} + ~Uncaught() { assert(std::uncaught_exceptions() == d_); } + int d_; + }; + +struct Outer { + Outer(int depth) : d_(depth) {} + ~Outer() { + try { + assert(std::uncaught_exceptions() == d_); + Uncaught u(d_+1); + throw 2; } + catch (int) {} + } + int d_; }; -struct B -{ - B() +int main () { + assert(std::uncaught_exceptions() == 0); { - // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#475 - assert(std::uncaught_exceptions() == 0); + Outer o(0); } -}; - -int main() -{ - try + + assert(std::uncaught_exceptions() == 0); { - A a; + try { + Outer o(1); + throw 1; + } + catch (int) { assert(std::uncaught_exceptions() == 0); - throw B(); - } - catch (...) - { - assert(std::uncaught_exception() == 0); + } } assert(std::uncaught_exceptions() == 0); }