111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===------------------- uncaught_exceptions.pass.cpp ---------------------===//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cxxabi.h>
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <exception>
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert>
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// namespace __cxxabiv1 {
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//      extern bool          __cxa_uncaught_exception () throw();
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//      extern unsigned int  __cxa_uncaught_exceptions() throw();
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// }
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct A {
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ~A() { assert( __cxxabiv1::__cxa_uncaught_exception()); }
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    };
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct B {
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    B(int cnt) : data_(cnt) {}
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ~B() { assert( data_ == __cxxabiv1::__cxa_uncaught_exceptions()); }
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int data_;
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    };
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main ()
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    try { A a; throw 3; assert (false); }
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    catch (int) {}
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    try { B b(1); throw 3; assert (false); }
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    catch (int) {}
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
37