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