[libcxx] r245529 - Cleanup unique_ptr failure tests and convert them to Clang verify

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 19 18:08:03 PDT 2015


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
 }




More information about the cfe-commits mailing list