diff options
| -rw-r--r-- | libcxxabi/test/catch_ptr_02.cpp | 3 | ||||
| -rw-r--r-- | libcxxabi/test/inherited_exception.cpp | 10 | ||||
| -rw-r--r-- | libcxxabi/test/test_vector1.cpp | 14 | 
3 files changed, 15 insertions, 12 deletions
diff --git a/libcxxabi/test/catch_ptr_02.cpp b/libcxxabi/test/catch_ptr_02.cpp index 9421782e0c0..34af3c80469 100644 --- a/libcxxabi/test/catch_ptr_02.cpp +++ b/libcxxabi/test/catch_ptr_02.cpp @@ -135,9 +135,10 @@ struct vDerived : virtual public vBase {};  void test8 ()  { +    vDerived derived;      try      { -        throw new vDerived; +        throw &derived;          assert(false);      }      catch (vBase *p) { diff --git a/libcxxabi/test/inherited_exception.cpp b/libcxxabi/test/inherited_exception.cpp index 090ae975361..7c106c1e612 100644 --- a/libcxxabi/test/inherited_exception.cpp +++ b/libcxxabi/test/inherited_exception.cpp @@ -56,11 +56,11 @@ void f2() {  }  void f3() { -  Child* child  = new Child; -  child->b1 = 10; -  child->b2 = 11; -  child->c = 12; -  throw static_cast<Base2*>(child); +  static Child child; +  child.b1 = 10; +  child.b2 = 11; +  child.c = 12; +  throw static_cast<Base2*>(&child);  }  int main() diff --git a/libcxxabi/test/test_vector1.cpp b/libcxxabi/test/test_vector1.cpp index b8bf45c50c2..6790cb5aa7d 100644 --- a/libcxxabi/test/test_vector1.cpp +++ b/libcxxabi/test/test_vector1.cpp @@ -11,6 +11,7 @@  #include <iostream>  #include <cstdlib> +#include <cassert>  //  Wrapper routines  void *my_alloc2 ( size_t sz ) { @@ -206,31 +207,32 @@ int test_exception_in_constructor ( ) {  int test_exception_in_destructor ( ) {      int retVal = 0;      void *one, *two, *three; +    one = two = three = NULL;  //  Throw from within a destructor      gConstructorCounter = gDestructorCounter = 0;      gConstructorThrowTarget = -1;      gDestructorThrowTarget  = 15;      try { -        one = two = three = NULL; +        one = two = NULL;          one     = __cxxabiv1::__cxa_vec_new ( 10, 40, 8, throw_construct, throw_destruct );          two     = __cxxabiv1::__cxa_vec_new2( 10, 40, 8, throw_construct, throw_destruct, my_alloc2, my_dealloc2 ); -        three   = __cxxabiv1::__cxa_vec_new3( 10, 40, 8, throw_construct, throw_destruct, my_alloc2, my_dealloc3 );          }      catch ( int i ) {}      try {          __cxxabiv1::__cxa_vec_delete ( one,       40, 8, throw_destruct );          __cxxabiv1::__cxa_vec_delete2( two,       40, 8, throw_destruct, my_dealloc2 ); -        __cxxabiv1::__cxa_vec_delete3( three,     40, 8, throw_destruct, my_dealloc3 ); +        assert(false);          }      catch ( int i ) {}  //  We should have thrown in the middle of cleaning up "two", which means that -//  there should be 20 calls to the destructor, and "three" was not cleaned up. -    if ( gConstructorCounter != 30 || gDestructorCounter != 20 ) { +//  there should be 20 calls to the destructor and the try block should exit +//  before the assertion. +    if ( gConstructorCounter != 20 || gDestructorCounter != 20 ) {          std::cerr << "Unexpected Constructor/Destructor calls (1D)" << std::endl; -        std::cerr << "Expected (30, 20), but got (" << gConstructorCounter << ", " <<  +        std::cerr << "Expected (20, 20), but got (" << gConstructorCounter << ", " <<                  gDestructorCounter << ")" << std::endl;          retVal = 1;          }  | 

