From 55112defb087fc45b6cc1ae724d8ac04cf10b589 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Fri, 19 Jun 2015 15:54:13 +0000 Subject: Fix PR#18843. Thanks to Howard for the fix llvm-svn: 240136 --- libcxx/include/memory | 5 ++++- .../util.smartptr.enab/enable_shared_from_this.pass.cpp | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libcxx/include/memory b/libcxx/include/memory index 03897b1c227..4c3a18c99a0 100644 --- a/libcxx/include/memory +++ b/libcxx/include/memory @@ -4073,7 +4073,10 @@ private: __enable_weak_this(const enable_shared_from_this<_Yp>* __e) _NOEXCEPT { if (__e) - __e->__weak_this_ = *this; + { + __e->__weak_this_.__ptr_ = const_cast<_Yp*>(static_cast(__e)); + __e->__weak_this_.__cntrl_ = __cntrl_; + } } _LIBCPP_INLINE_VISIBILITY diff --git a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp index 58686d68c05..77af13fa90d 100644 --- a/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp +++ b/libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp @@ -34,6 +34,10 @@ struct Z : Y {}; int main() { + { // https://llvm.org/bugs/show_bug.cgi?id=18843 + std::shared_ptr t1(new T); + std::shared_ptr t2(std::make_shared()); + } { std::shared_ptr p(new Z); std::shared_ptr q = p->shared_from_this(); -- cgit v1.2.3