1//===------------------------- test_vector3.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#include "cxxabi.h" 11 12#include <stdio.h> 13#include <stdlib.h> 14#include <assert.h> 15#include <exception> 16 17#include <memory> 18 19// use dtors instead of try/catch 20namespace test1 { 21 struct B { 22 ~B() { 23 printf("should not be run\n"); 24 exit(10); 25 } 26}; 27 28struct A { 29 ~A() 30#if __has_feature(cxx_noexcept) 31 noexcept(false) 32#endif 33 { 34 B b; 35 throw 0; 36 } 37}; 38} // test1 39 40void my_terminate() { exit(0); } 41 42template <class T> 43void destroy(void* v) 44{ 45 T* t = static_cast<T*>(v); 46 t->~T(); 47} 48 49int main( int argc, char *argv []) 50{ 51 std::set_terminate(my_terminate); 52 { 53 typedef test1::A Array[10]; 54 Array a[10]; // calls _cxa_vec_dtor 55 __cxxabiv1::__cxa_vec_dtor(a, 10, sizeof(test1::A), destroy<test1::A>); 56 assert(false); 57 } 58} 59