[libcxx] r273379 - Make shared_ptr constructor tests use count_new.hpp
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 21 21:51:08 PDT 2016
Author: ericwf
Date: Tue Jun 21 23:51:07 2016
New Revision: 273379
URL: http://llvm.org/viewvc/llvm-project?rev=273379&view=rev
Log:
Make shared_ptr constructor tests use count_new.hpp
Modified:
libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp
libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp
libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp
libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp
libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp
Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp?rev=273379&r1=273378&r2=273379&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp Tue Jun 21 23:51:07 2016
@@ -7,31 +7,18 @@
//
//===----------------------------------------------------------------------===//
-// XFAIL: libcpp-no-exceptions
// <memory>
// template<class Y> explicit shared_ptr(auto_ptr<Y>&& r);
-// UNSUPPORTED: sanitizer-new-delete
#include <memory>
#include <new>
#include <cstdlib>
#include <cassert>
-bool throw_next = false;
-
-void* operator new(std::size_t s) throw(std::bad_alloc)
-{
- if (throw_next)
- throw std::bad_alloc();
- return std::malloc(s);
-}
-
-void operator delete(void* p) throw()
-{
- std::free(p);
-}
+#include "test_macros.h"
+#include "count_new.hpp"
struct B
{
@@ -59,47 +46,51 @@ int A::count = 0;
int main()
{
{
- std::auto_ptr<A> ptr(new A);
- A* raw_ptr = ptr.get();
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
- std::shared_ptr<B> p(std::move(ptr));
-#else
- std::shared_ptr<B> p(ptr);
-#endif
- assert(A::count == 1);
- assert(B::count == 1);
- assert(p.use_count() == 1);
- assert(p.get() == raw_ptr);
- assert(ptr.get() == 0);
- }
- assert(A::count == 0);
- {
- std::auto_ptr<A> ptr(new A);
- A* raw_ptr = ptr.get();
- throw_next = true;
- try
- {
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
+ std::auto_ptr<A> ptr(new A);
+ A* raw_ptr = ptr.get();
+#if TEST_STD_VER >= 11
std::shared_ptr<B> p(std::move(ptr));
#else
std::shared_ptr<B> p(ptr);
#endif
- assert(false);
- }
- catch (...)
- {
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
assert(A::count == 1);
assert(B::count == 1);
- assert(ptr.get() == raw_ptr);
+ assert(p.use_count() == 1);
+ assert(p.get() == raw_ptr);
+ assert(ptr.get() == 0);
+ }
+ assert(A::count == 0);
+ assert(globalMemCounter.checkOutstandingNewEq(0));
+#if !defined(TEST_HAS_NO_EXCEPTIONS) && !defined(DISABLE_NEW_COUNT)
+ {
+ std::auto_ptr<A> ptr(new A);
+ A* raw_ptr = ptr.get();
+ globalMemCounter.throw_after = 0;
+ try
+ {
+#if TEST_STD_VER >= 11
+ std::shared_ptr<B> p(std::move(ptr));
#else
- // Without rvalue references, ptr got copied into
- // the shared_ptr destructor and the copy was
- // destroyed during unwinding.
- assert(A::count == 0);
- assert(B::count == 0);
+ std::shared_ptr<B> p(ptr);
#endif
- }
+ assert(false);
+ }
+ catch (...)
+ {
+#if TEST_STD_VER >= 11
+ assert(A::count == 1);
+ assert(B::count == 1);
+ assert(ptr.get() == raw_ptr);
+ #else
+ // Without rvalue references, ptr got copied into
+ // the shared_ptr destructor and the copy was
+ // destroyed during unwinding.
+ assert(A::count == 0);
+ assert(B::count == 0);
+#endif
+ }
}
assert(A::count == 0);
+ assert(globalMemCounter.checkOutstandingNewEq(0));
+#endif // !defined(TEST_HAS_NO_EXCEPTIONS) && !defined(DISABLE_NEW_COUNT)
}
Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp?rev=273379&r1=273378&r2=273379&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp Tue Jun 21 23:51:07 2016
@@ -8,18 +8,22 @@
//===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
+// UNSUPPORTED: sanitizer-new-delete
+
// <memory>
// shared_ptr
// template<class D> shared_ptr(nullptr_t, D d);
-// UNSUPPORTED: sanitizer-new-delete
-
#include <memory>
#include <cassert>
#include <new>
#include <cstdlib>
+
+#include "test_macros.h"
+#include "count_new.hpp"
+
#include "../test_deleter.h"
struct A
@@ -33,23 +37,10 @@ struct A
int A::count = 0;
-bool throw_next = false;
-
-void* operator new(std::size_t s) throw(std::bad_alloc)
-{
- if (throw_next)
- throw std::bad_alloc();
- return std::malloc(s);
-}
-
-void operator delete(void* p) throw()
-{
- std::free(p);
-}
int main()
{
- throw_next = true;
+ globalMemCounter.throw_after = 0;
try
{
std::shared_ptr<A> p(nullptr, test_deleter<A>(3));
Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp?rev=273379&r1=273378&r2=273379&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp Tue Jun 21 23:51:07 2016
@@ -8,18 +8,20 @@
//===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
+// UNSUPPORTED: sanitizer-new-delete
+
// <memory>
// shared_ptr
// template<class Y, class D> shared_ptr(Y* p, D d);
-// UNSUPPORTED: sanitizer-new-delete
-
#include <memory>
#include <cassert>
#include <new>
#include <cstdlib>
+
+#include "count_new.hpp"
#include "../test_deleter.h"
struct A
@@ -33,24 +35,10 @@ struct A
int A::count = 0;
-bool throw_next = false;
-
-void* operator new(std::size_t s) throw(std::bad_alloc)
-{
- if (throw_next)
- throw std::bad_alloc();
- return std::malloc(s);
-}
-
-void operator delete(void* p) throw()
-{
- std::free(p);
-}
-
int main()
{
A* ptr = new A;
- throw_next = true;
+ globalMemCounter.throw_after = 0;
try
{
std::shared_ptr<A> p(ptr, test_deleter<A>(3));
@@ -62,4 +50,5 @@ int main()
assert(test_deleter<A>::count == 0);
assert(test_deleter<A>::dealloc_count == 1);
}
+ assert(globalMemCounter.checkOutstandingNewEq(0));
}
Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp?rev=273379&r1=273378&r2=273379&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp Tue Jun 21 23:51:07 2016
@@ -8,17 +8,20 @@
//===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
+// UNSUPPORTED: sanitizer-new-delete
+
// <memory>
// template<class Y> explicit shared_ptr(Y* p);
-// UNSUPPORTED: sanitizer-new-delete
#include <memory>
#include <new>
#include <cstdlib>
#include <cassert>
+#include "count_new.hpp"
+
struct A
{
static int count;
@@ -30,26 +33,12 @@ struct A
int A::count = 0;
-bool throw_next = false;
-
-void* operator new(std::size_t s) throw(std::bad_alloc)
-{
- if (throw_next)
- throw std::bad_alloc();
- return std::malloc(s);
-}
-
-void operator delete(void* p) throw()
-{
- std::free(p);
-}
int main()
{
- {
A* ptr = new A;
- throw_next = true;
assert(A::count == 1);
+ globalMemCounter.throw_after = 0;
try
{
std::shared_ptr<A> p(ptr);
@@ -59,5 +48,5 @@ int main()
{
assert(A::count == 0);
}
- }
+ assert(globalMemCounter.checkOutstandingNewEq(0));
}
Modified: libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp?rev=273379&r1=273378&r2=273379&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp Tue Jun 21 23:51:07 2016
@@ -8,32 +8,19 @@
//===----------------------------------------------------------------------===//
// XFAIL: libcpp-no-exceptions
+// UNSUPPORTED: sanitizer-new-delete
+
// <memory>
// template <class Y, class D> explicit shared_ptr(unique_ptr<Y, D>&&r);
-// UNSUPPORTED: sanitizer-new-delete
-
#include <memory>
#include <new>
#include <cstdlib>
#include <cassert>
#include "test_macros.h"
-
-bool throw_next = false;
-
-void* operator new(std::size_t s) throw(std::bad_alloc)
-{
- if (throw_next)
- throw std::bad_alloc();
- return std::malloc(s);
-}
-
-void operator delete(void* p) throw()
-{
- std::free(p);
-}
+#include "count_new.hpp"
struct B
{
@@ -67,52 +54,46 @@ void assert_deleter ( T * ) { assert(fal
int main()
{
{
- std::unique_ptr<A> ptr(new A);
- A* raw_ptr = ptr.get();
- std::shared_ptr<B> p(std::move(ptr));
- assert(A::count == 1);
- assert(B::count == 1);
- assert(p.use_count() == 1);
- assert(p.get() == raw_ptr);
- assert(ptr.get() == 0);
- }
- assert(A::count == 0);
- {
- std::unique_ptr<A> ptr(new A);
- A* raw_ptr = ptr.get();
- throw_next = true;
- try
- {
+ std::unique_ptr<A> ptr(new A);
+ A* raw_ptr = ptr.get();
std::shared_ptr<B> p(std::move(ptr));
- assert(false);
- }
- catch (...)
- {
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
assert(A::count == 1);
assert(B::count == 1);
- assert(ptr.get() == raw_ptr);
-#else
- assert(A::count == 0);
- assert(B::count == 0);
+ assert(p.use_count() == 1);
+ assert(p.get() == raw_ptr);
assert(ptr.get() == 0);
-#endif
- }
}
assert(A::count == 0);
-
- // LWG 2399
{
- throw_next = false;
- fn(std::unique_ptr<int>(new int));
+ std::unique_ptr<A> ptr(new A);
+ A* raw_ptr = ptr.get();
+ globalMemCounter.throw_after = 0;
+ try
+ {
+ std::shared_ptr<B> p(std::move(ptr));
+ assert(false);
+ }
+ catch (...)
+ {
+#if TEST_STD_VER >= 11
+ assert(A::count == 1);
+ assert(B::count == 1);
+ assert(ptr.get() == raw_ptr);
+#else
+ assert(A::count == 0);
+ assert(B::count == 0);
+ assert(ptr.get() == 0);
+#endif
+ }
+ }
+ assert(A::count == 0);
+ { // LWG 2399
+ fn(std::unique_ptr<int>(new int));
}
-
#if TEST_STD_VER >= 14
- // LWG 2415
- {
- std::unique_ptr<int, void (*)(int*)> p(nullptr, assert_deleter<int>);
- std::shared_ptr<int> p2(std::move(p)); // should not call deleter when going out of scope
+ { // LWG 2415
+ std::unique_ptr<int, void (*)(int*)> p(nullptr, assert_deleter<int>);
+ std::shared_ptr<int> p2(std::move(p)); // should not call deleter when going out of scope
}
#endif
-
}
More information about the cfe-commits
mailing list