From 8f2cc889b0517c4ad748de1a96f13489e89968a5 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Thu, 14 May 2020 12:01:55 -0700 Subject: [PATCH] [libcxx] [NFC] Add more reinterpret_pointer_cast tests. * Add test for inheritance. * Test value is preserved through cast. --- .../reinterpret_pointer_cast.pass.cpp | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp index 221001f..743d60c 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/reinterpret_pointer_cast.pass.cpp @@ -23,6 +23,9 @@ struct A { int x; }; +struct Base { }; +struct Derived : public Base { }; + int main(int, char**) { { const std::shared_ptr pA(new A); @@ -38,6 +41,26 @@ int main(int, char**) { assert(pA2.get() == pA.get()); assert(!pi.owner_before(pA) && !pA.owner_before(pi)); } + { + const std::shared_ptr pA(new A); + std::shared_ptr pi = std::reinterpret_pointer_cast(pA); + pA->x = 42; + assert(*pi == 42); + } + { + const std::shared_ptr pDerived(new Derived); + std::shared_ptr pBase = std::reinterpret_pointer_cast(pDerived); + std::shared_ptr pDerived2 = std::reinterpret_pointer_cast(pBase); + assert(pDerived2.get() == pDerived2.get()); + assert(!pBase.owner_before(pDerived) && !pDerived.owner_before(pBase)); + } + { + const std::shared_ptr pBase(new Base); + std::shared_ptr pDerived = std::reinterpret_pointer_cast(pBase); + std::shared_ptr pBase2 = std::reinterpret_pointer_cast(pDerived); + assert(pBase2.get() == pBase.get()); + assert(!pDerived.owner_before(pBase) && !pBase.owner_before(pDerived)); + } #if TEST_STD_VER > 14 { const std::shared_ptr pA; -- 2.7.4