Author: ericwf Date: Thu Nov 20 19:53:51 2014 New Revision: 222493 URL: http://llvm.org/viewvc/llvm-project?rev=222493&view=rev Log: [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 Modified: libcxxabi/trunk/test/catch_ptr_02.cpp libcxxabi/trunk/test/inherited_exception.cpp libcxxabi/trunk/test/test_vector1.cpp Modified: libcxxabi/trunk/test/catch_ptr_02.cpp URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/catch_ptr_02.cpp?rev=222493&r1=222492&r2=222493&view=diff ============================================================================== --- libcxxabi/trunk/test/catch_ptr_02.cpp (original) +++ libcxxabi/trunk/test/catch_ptr_02.cpp Thu Nov 20 19:53:51 2014 @@ -135,9 +135,10 @@ struct vDerived : virtual public vBase { void test8 () { + vDerived derived; try { - throw new vDerived; + throw &derived; assert(false); } catch (vBase *p) { Modified: libcxxabi/trunk/test/inherited_exception.cpp URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/inherited_exception.cpp?rev=222493&r1=222492&r2=222493&view=diff ============================================================================== --- libcxxabi/trunk/test/inherited_exception.cpp (original) +++ libcxxabi/trunk/test/inherited_exception.cpp Thu Nov 20 19:53:51 2014 @@ -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() Modified: libcxxabi/trunk/test/test_vector1.cpp URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_vector1.cpp?rev=222493&r1=222492&r2=222493&view=diff ============================================================================== --- libcxxabi/trunk/test/test_vector1.cpp (original) +++ libcxxabi/trunk/test/test_vector1.cpp Thu Nov 20 19:53:51 2014 @@ -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; } _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
