1//===------------------- uncaught_exceptions.pass.cpp ---------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// UNSUPPORTED: libcxxabi-no-exceptions
11
12#include <cxxabi.h>
13#include <exception>
14#include <cassert>
15
16// namespace __cxxabiv1 {
17//      extern bool          __cxa_uncaught_exception () throw();
18//      extern unsigned int  __cxa_uncaught_exceptions() throw();
19// }
20
21struct A {
22    ~A() { assert( __cxxabiv1::__cxa_uncaught_exception()); }
23    };
24
25struct B {
26    B(unsigned cnt) : data_(cnt) {}
27    ~B() { assert( data_ == __cxxabiv1::__cxa_uncaught_exceptions()); }
28    unsigned data_;
29    };
30
31int main ()
32{
33    try { A a; throw 3; assert (false); }
34    catch (int) {}
35
36    try { B b(1); throw 3; assert (false); }
37    catch (int) {}
38}
39