Add the critically missing 'clone' method. =]

Clang managed to never instantiate the copy constructor. Added tests to
ensure this path is tested.

We could still use tests for the polymorphic nature. Those coming up
next.

llvm-svn: 194317
This commit is contained in:
Chandler Carruth 2013-11-09 04:32:34 +00:00
parent 8f9bd1fa42
commit b3b79ce632
1 changed files with 11 additions and 0 deletions

View File

@ -17,9 +17,13 @@ namespace {
struct S {
S(int x) : x(x) {}
S *clone() { return new S(*this); }
int x;
};
// A function that forces the return of a copy.
polymorphic_ptr<S> dummy_copy(const polymorphic_ptr<S> &arg) { return arg; }
TEST(polymorphic_ptr_test, Basic) {
polymorphic_ptr<S> null;
EXPECT_FALSE((bool)null);
@ -66,6 +70,13 @@ TEST(polymorphic_ptr_test, Basic) {
EXPECT_EQ(s, &*p);
EXPECT_FALSE((bool)p2);
EXPECT_TRUE(!p2);
// Force copies and that everything survives.
polymorphic_ptr<S> p3 = dummy_copy(polymorphic_ptr<S>(p));
EXPECT_TRUE((bool)p3);
EXPECT_FALSE(!p3);
EXPECT_NE(s, &*p3);
EXPECT_EQ(42, p3->x);
}
}