diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2015-06-19 15:54:13 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2015-06-19 15:54:13 +0000 |
commit | 55112defb087fc45b6cc1ae724d8ac04cf10b589 (patch) | |
tree | 3dfb935998e6eed222a61a549fac69c4d7f479f1 | |
parent | b6c13ff6898ce740ec5fc938102ec3da1293d227 (diff) | |
download | bcm5719-llvm-55112defb087fc45b6cc1ae724d8ac04cf10b589.tar.gz bcm5719-llvm-55112defb087fc45b6cc1ae724d8ac04cf10b589.zip |
Fix PR#18843. Thanks to Howard for the fix
llvm-svn: 240136
-rw-r--r-- | libcxx/include/memory | 5 | ||||
-rw-r--r-- | libcxx/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp | 4 |
2 files changed, 8 insertions, 1 deletions
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<const _Yp*>(__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<T const> t1(new T); + std::shared_ptr<T const> t2(std::make_shared<T>()); + } { std::shared_ptr<Y> p(new Z); std::shared_ptr<T> q = p->shared_from_this(); |