diff options
author | Eric Fiselier <eric@efcs.ca> | 2014-11-21 01:53:51 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2014-11-21 01:53:51 +0000 |
commit | 6e50cba1b25dd57d00f8dde177f90a3eb93e7477 (patch) | |
tree | 0f220aed3187b97df218ab14c3f523b931b30459 /test | |
parent | 2466b9978826966463465992516136f332802dd6 (diff) |
[libcxxabi] Cleanup memory in tests to placate ASAN.
Summary: ASAN fires on these tests because they don't clean up their memory.
Reviewers: danalbert, jroelofs, mclow.lists
Reviewed By: jroelofs
Subscribers: dblaikie, cfe-commits
Differential Revision: http://reviews.llvm.org/D6281
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@222493 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/catch_ptr_02.cpp | 3 | ||||
-rw-r--r-- | test/inherited_exception.cpp | 10 | ||||
-rw-r--r-- | test/test_vector1.cpp | 14 |
3 files changed, 15 insertions, 12 deletions
diff --git a/test/catch_ptr_02.cpp b/test/catch_ptr_02.cpp index 9421782..34af3c8 100644 --- a/test/catch_ptr_02.cpp +++ b/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/test/inherited_exception.cpp b/test/inherited_exception.cpp index 090ae97..7c106c1 100644 --- a/test/inherited_exception.cpp +++ b/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/test/test_vector1.cpp b/test/test_vector1.cpp index b8bf45c..6790cb5 100644 --- a/test/test_vector1.cpp +++ b/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; } |