mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 23:00:15 +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>
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
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)
|
||||
__e->__weak_this_ = *this;
|
||||
}
|
||||
|
||||
_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 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