Author: ericwf Date: Wed Aug 19 20:08:03 2015 New Revision: 245529 URL: http://llvm.org/viewvc/llvm-project?rev=245529&view=rev Log: Cleanup unique_ptr failure tests and convert them to Clang verify
Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,25 +14,16 @@ // Test unique_ptr move assignment #include <memory> -#include <cassert> -// Can't copy from lvalue - -struct A -{ - static int count; - A() {++count;} - A(const A&) {++count;} - ~A() {--count;} -}; - -int A::count = 0; +#include "test_macros.h" +// Can't copy from lvalue int main() { - { - std::unique_ptr<A> s(new A); - std::unique_ptr<A> s2; - s2 = s; - } + std::unique_ptr<int> s, s2; +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{cannot be assigned because its copy assignment operator is implicitly deleted}} +#else + s2 = s; // expected-error {{'operator=' is a private member}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,25 +14,20 @@ // Test unique_ptr move assignment #include <memory> -#include <cassert> -// Can't copy from const lvalue - -struct A -{ - static int count; - A() {++count;} - A(const A&) {++count;} - ~A() {--count;} -}; +#include "test_macros.h" -int A::count = 0; +// Can't copy from const lvalue int main() { - { - const std::unique_ptr<A> s(new A); - std::unique_ptr<A> s2; - s2 = s; - } + const std::unique_ptr<int> s(new int); + std::unique_ptr<int> s2; +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{cannot be assigned because its copy assignment operator is implicitly deleted}} +#else + // NOTE: The error says "constructor" because the assignment operator takes + // 's' by value and attempts to copy construct it. + s2 = s; // expected-error {{no matching constructor for initialization}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,43 +14,20 @@ // Test unique_ptr move assignment #include <memory> -#include <cassert> -// Can't copy from lvalue +#include "test_macros.h" -struct A -{ - static int count; - A() {++count;} - A(const A&) {++count;} - ~A() {--count;} -}; - -int A::count = 0; - -class Deleter -{ - int state_; - -public: - - Deleter() : state_(5) {} - - int state() const {return state_;} - - void operator()(A* p) {delete p;} +struct Deleter { + void operator()(int* p) {delete p;} }; +// Can't copy from lvalue int main() { - { - std::unique_ptr<A, Deleter> s(new A); - A* p = s.get(); - std::unique_ptr<A, Deleter> s2; - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - } - assert(A::count == 0); + std::unique_ptr<int, Deleter> s, s2; +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{cannot be assigned because its copy assignment operator is implicitly deleted}} +#else + s2 = s; // expected-error {{'operator=' is a private member}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp Wed Aug 19 20:08:03 2015 @@ -11,46 +11,26 @@ // unique_ptr -// Test unique_ptr move ctor +// Test unique_ptr move assignment #include <memory> -#include <cassert> -// test move ctor. Can't copy from const lvalue +#include "test_macros.h" -struct A -{ - static int count; - A() {++count;} - A(const A&) {++count;} - ~A() {--count;} -}; - -int A::count = 0; - -class Deleter -{ - int state_; - -public: - - Deleter() : state_(5) {} - - int state() const {return state_;} - - void operator()(A* p) {delete p;} +struct Deleter { + void operator()(int* p) {delete p;} }; +// Can't copy from a const lvalue int main() { - { - const std::unique_ptr<A, Deleter> s(new A); - A* p = s.get(); - std::unique_ptr<A, Deleter> s2; - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - } - assert(A::count == 0); + const std::unique_ptr<int, Deleter> s(new int); + std::unique_ptr<int, Deleter> s2; +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{cannot be assigned because its copy assignment operator is implicitly deleted}} +#else + // NOTE: The error says "constructor" because the assignment operator takes + // 's' by value and attempts to copy construct it. + s2 = s; // expected-error {{no matching constructor for initialization}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,44 +14,29 @@ // Test unique_ptr converting move assignment #include <memory> -#include <utility> -#include <cassert> -// Can't assign from lvalue +#include "test_macros.h" struct A { - static int count; - A() {++count;} - A(const A&) {++count;} - virtual ~A() {--count;} + A() {} + virtual ~A() {} }; -int A::count = 0; - -struct B - : public A +struct B : public A { - static int count; - B() {++count;} - B(const B&) {++count;} - virtual ~B() {--count;} }; -int B::count = 0; - +// Can't assign from lvalue int main() { - { - std::unique_ptr<B> s(new B); - A* p = s.get(); + std::unique_ptr<B> s; std::unique_ptr<A> s2; - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - assert(B::count == 1); - } - assert(A::count == 0); - assert(B::count == 0); +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{no viable overloaded '='}} +#else + // NOTE: The move-semantic emulation creates an ambiguous overload set + // so that assignment from an lvalue does not compile + s2 = s; // expected-error {{use of overloaded operator '=' is ambiguous}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,48 +14,30 @@ // Test unique_ptr converting move assignment #include <memory> -#include <utility> -#include <cassert> +#include "test_macros.h" #include "../../deleter.h" -// Can't assign from lvalue - struct A { - static int count; - A() {++count;} - A(const A&) {++count;} - virtual ~A() {--count;} + A() {} + virtual ~A() {} }; -int A::count = 0; - -struct B - : public A +struct B : public A { - static int count; - B() {++count;} - B(const B&) {++count;} - virtual ~B() {--count;} }; -int B::count = 0; - +// Can't assign from lvalue int main() { - { - std::unique_ptr<B, Deleter<B> > s(new B); - A* p = s.get(); + std::unique_ptr<B, Deleter<B> > s; std::unique_ptr<A, Deleter<A> > s2; - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - assert(B::count == 1); - assert(s2.get_deleter().state() == 5); - assert(s.get_deleter().state() == 0); - } - assert(A::count == 0); - assert(B::count == 0); +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{no viable overloaded '='}} +#else + // NOTE: The move-semantic emulation creates an ambiguous overload set + // so that assignment from an lvalue does not compile + s2 = s; // expected-error {{use of overloaded operator '=' is ambiguous}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp Wed Aug 19 20:08:03 2015 @@ -16,47 +16,32 @@ // Can't assign from lvalue #include <memory> -#include <utility> -#include <cassert> +#include "test_macros.h" #include "../../deleter.h" struct A { - static int count; - A() {++count;} - A(const A&) {++count;} - virtual ~A() {--count;} + A() {} + virtual ~A() {} }; -int A::count = 0; - -struct B - : public A +struct B : public A { - static int count; - B() {++count;} - B(const B&) {++count;} - virtual ~B() {--count;} }; -int B::count = 0; - +// Can't assign from lvalue int main() { - { - Deleter<B> db(5); - std::unique_ptr<B, Deleter<B>&> s(new B, db); - A* p = s.get(); - Deleter<A> da(6); - std::unique_ptr<A, Deleter<A>&> s2(new A, da); - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - assert(B::count == 1); - assert(s2.get_deleter().state() == 5); - } - assert(A::count == 0); - assert(B::count == 0); + Deleter<B> db; + std::unique_ptr<B, Deleter<B>& > s(new B, db); + Deleter<A> da; + std::unique_ptr<A, Deleter<A> &> s2(new A, da); +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{no viable overloaded '='}} +#else + // NOTE: The move-semantic emulation creates an ambiguous overload set + // so that assignment from an lvalue does not compile + s2 = s; // expected-error {{use of overloaded operator '=' is ambiguous}} +#endif } Modified: libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp?rev=245529&r1=245528&r2=245529&view=diff ============================================================================== --- libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp (original) +++ libcxx/trunk/test/std/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp Wed Aug 19 20:08:03 2015 @@ -14,44 +14,30 @@ // Test unique_ptr converting move assignment #include <memory> -#include <utility> -#include <cassert> -// Can't assign from const lvalue +#include "test_macros.h" +#include "../../deleter.h" struct A { - static int count; - A() {++count;} - A(const A&) {++count;} - virtual ~A() {--count;} + A() {} + virtual ~A() {} }; -int A::count = 0; - -struct B - : public A +struct B : public A { - static int count; - B() {++count;} - B(const B&) {++count;} - virtual ~B() {--count;} }; -int B::count = 0; - +// Can't assign from lvalue int main() { - { const std::unique_ptr<B> s(new B); - A* p = s.get(); std::unique_ptr<A> s2; - s2 = s; - assert(s2.get() == p); - assert(s.get() == 0); - assert(A::count == 1); - assert(B::count == 1); - } - assert(A::count == 0); - assert(B::count == 0); +#if TEST_STD_VER >= 11 + s2 = s; // expected-error {{no viable overloaded '='}} +#else + // NOTE: The error says "constructor" because the assignment operator takes + // 's' by value and attempts to copy construct it. + s2 = s; // expected-error {{no matching constructor for initialization}} +#endif } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits