[libcxxabi] r222493 - [libcxxabi] Cleanup memory in tests to placate ASAN.

Eric Fiselier eric at efcs.ca
Thu Nov 20 17:53:52 PST 2014


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;
         }





More information about the cfe-commits mailing list