mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-29 08:31:13 +00:00
Fix PR#23647 - make_shared<volatile bool>
llvm-svn: 238354
This commit is contained in:
parent
66b682ab04
commit
263a0f7681
@ -4040,14 +4040,14 @@ private:
|
|||||||
template <class _Yp>
|
template <class _Yp>
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
void
|
void
|
||||||
__enable_weak_this(const enable_shared_from_this<_Yp>* __e) _NOEXCEPT
|
__enable_weak_this(const volatile enable_shared_from_this<_Yp>* __e) _NOEXCEPT
|
||||||
{
|
{
|
||||||
if (__e)
|
if (__e)
|
||||||
__e->__weak_this_ = *this;
|
__e->__weak_this_ = *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
void __enable_weak_this(const void*) _NOEXCEPT {}
|
void __enable_weak_this(const volatile void*) _NOEXCEPT {}
|
||||||
|
|
||||||
template <class _Up> friend class _LIBCPP_TYPE_VIS_ONLY shared_ptr;
|
template <class _Up> friend class _LIBCPP_TYPE_VIS_ONLY shared_ptr;
|
||||||
template <class _Up> friend class _LIBCPP_TYPE_VIS_ONLY weak_ptr;
|
template <class _Up> friend class _LIBCPP_TYPE_VIS_ONLY weak_ptr;
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||||
|
// Source Licenses. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// <memory>
|
||||||
|
|
||||||
|
// shared_ptr
|
||||||
|
|
||||||
|
// template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args);
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void test(const T &t0)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
T t1 = t0;
|
||||||
|
std::shared_ptr<T> p0 = std::make_shared<T>(t0);
|
||||||
|
std::shared_ptr<T> p1 = std::make_shared<T>(t1);
|
||||||
|
assert(*p0 == t0);
|
||||||
|
assert(*p1 == t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const T t1 = t0;
|
||||||
|
std::shared_ptr<const T> p0 = std::make_shared<const T>(t0);
|
||||||
|
std::shared_ptr<const T> p1 = std::make_shared<const T>(t1);
|
||||||
|
assert(*p0 == t0);
|
||||||
|
assert(*p1 == t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
volatile T t1 = t0;
|
||||||
|
std::shared_ptr<volatile T> p0 = std::make_shared<volatile T>(t0);
|
||||||
|
std::shared_ptr<volatile T> p1 = std::make_shared<volatile T>(t1);
|
||||||
|
assert(*p0 == t0);
|
||||||
|
assert(*p1 == t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const volatile T t1 = t0;
|
||||||
|
std::shared_ptr<const volatile T> p0 = std::make_shared<const volatile T>(t0);
|
||||||
|
std::shared_ptr<const volatile T> p1 = std::make_shared<const volatile T>(t1);
|
||||||
|
assert(*p0 == t0);
|
||||||
|
assert(*p1 == t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
test<bool>(true);
|
||||||
|
test<int>(3);
|
||||||
|
test<double>(5.0);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user