From ca020d469e2a04f6805667c49a6b36f90a1856d2 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Sat, 9 Nov 2013 04:32:34 +0000 Subject: 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194317 91177308-0d34-0410-b5e6-96231b3b80d8 --- unittests/ADT/polymorphic_ptr_test.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'unittests') diff --git a/unittests/ADT/polymorphic_ptr_test.cpp b/unittests/ADT/polymorphic_ptr_test.cpp index 3606698..90c3385 100644 --- a/unittests/ADT/polymorphic_ptr_test.cpp +++ b/unittests/ADT/polymorphic_ptr_test.cpp @@ -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 dummy_copy(const polymorphic_ptr &arg) { return arg; } + TEST(polymorphic_ptr_test, Basic) { polymorphic_ptr 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 p3 = dummy_copy(polymorphic_ptr(p)); + EXPECT_TRUE((bool)p3); + EXPECT_FALSE(!p3); + EXPECT_NE(s, &*p3); + EXPECT_EQ(42, p3->x); } } -- cgit v1.1