diff options
author | Nikolas Klauser <nikolasklauser@berlin.de> | 2023-01-23 10:27:14 +0100 |
---|---|---|
committer | Nikolas Klauser <nikolasklauser@berlin.de> | 2023-04-16 15:23:23 +0200 |
commit | 83ce139721260d176773d811f576289370f3313c (patch) | |
tree | b99f8b52d8bdd04d9b6f42caa71008691369714e /libcxx/include/experimental | |
parent | b34ca0851a5209a10c0ca285c000a18073677891 (diff) | |
download | llvm-83ce139721260d176773d811f576289370f3313c.zip llvm-83ce139721260d176773d811f576289370f3313c.tar.gz llvm-83ce139721260d176773d811f576289370f3313c.tar.bz2 |
[libc++] Add hide_from_abi check for classes
We already have a clang-tidy check for making sure that `_LIBCPP_HIDE_FROM_ABI` is on free functions. This patch extends this to class members. The places where we don't check for `_LIBCPP_HIDE_FROM_ABI` are classes for which we have an instantiation in the library.
Reviewed By: ldionne, Mordante, #libc
Spies: jplehr, mikhail.ramalho, sstefan1, libcxx-commits, krytarowski, miyuki, smeenai
Differential Revision: https://reviews.llvm.org/D142332
Diffstat (limited to 'libcxx/include/experimental')
-rw-r--r-- | libcxx/include/experimental/iterator | 12 | ||||
-rw-r--r-- | libcxx/include/experimental/memory_resource | 18 | ||||
-rw-r--r-- | libcxx/include/experimental/propagate_const | 62 | ||||
-rw-r--r-- | libcxx/include/experimental/simd | 82 |
4 files changed, 87 insertions, 87 deletions
diff --git a/libcxx/include/experimental/iterator b/libcxx/include/experimental/iterator index e47314a..a5e3dff 100644 --- a/libcxx/include/experimental/iterator +++ b/libcxx/include/experimental/iterator @@ -82,15 +82,15 @@ public: typedef void pointer; typedef void reference; - ostream_joiner(ostream_type& __os, _Delim&& __d) + _LIBCPP_HIDE_FROM_ABI ostream_joiner(ostream_type& __os, _Delim&& __d) : __output_iter_(_VSTD::addressof(__os)), __delim_(_VSTD::move(__d)), __first_(true) {} - ostream_joiner(ostream_type& __os, const _Delim& __d) + _LIBCPP_HIDE_FROM_ABI ostream_joiner(ostream_type& __os, const _Delim& __d) : __output_iter_(_VSTD::addressof(__os)), __delim_(__d), __first_(true) {} template<typename _Tp> - ostream_joiner& operator=(const _Tp& __v) + _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator=(const _Tp& __v) { if (!__first_) *__output_iter_ << __delim_; @@ -99,9 +99,9 @@ public: return *this; } - ostream_joiner& operator*() _NOEXCEPT { return *this; } - ostream_joiner& operator++() _NOEXCEPT { return *this; } - ostream_joiner& operator++(int) _NOEXCEPT { return *this; } + _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator*() _NOEXCEPT { return *this; } + _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator++() _NOEXCEPT { return *this; } + _LIBCPP_HIDE_FROM_ABI ostream_joiner& operator++(int) _NOEXCEPT { return *this; } private: ostream_type* __output_iter_; diff --git a/libcxx/include/experimental/memory_resource b/libcxx/include/experimental/memory_resource index dcb61e3..4dc9845 100644 --- a/libcxx/include/experimental/memory_resource +++ b/libcxx/include/experimental/memory_resource @@ -106,7 +106,7 @@ class _LIBCPP_DEPCREATED_MEMORY_RESOURCE("memory_resource") _LIBCPP_TYPE_VIS mem // 8.5.2, memory.resource.public public: - virtual ~memory_resource() = default; + _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual ~memory_resource() = default; _LIBCPP_INLINE_VISIBILITY void* allocate(size_t __bytes, size_t __align = __max_align) @@ -174,7 +174,7 @@ public: : __res_(__r) {} - polymorphic_allocator(polymorphic_allocator const &) = default; + _LIBCPP_HIDE_FROM_ABI polymorphic_allocator(polymorphic_allocator const &) = default; template <class _Tp> _LIBCPP_INLINE_VISIBILITY @@ -362,9 +362,9 @@ class _LIBCPP_TEMPLATE_VIS __resource_adaptor_imp public: typedef _CharAlloc allocator_type; - __resource_adaptor_imp() = default; - __resource_adaptor_imp(__resource_adaptor_imp const &) = default; - __resource_adaptor_imp(__resource_adaptor_imp &&) = default; + _LIBCPP_HIDE_FROM_ABI __resource_adaptor_imp() = default; + _LIBCPP_HIDE_FROM_ABI __resource_adaptor_imp(__resource_adaptor_imp const &) = default; + _LIBCPP_HIDE_FROM_ABI __resource_adaptor_imp(__resource_adaptor_imp &&) = default; // 8.7.2, memory.resource.adaptor.ctor @@ -378,7 +378,7 @@ public: : __alloc_(_VSTD::move(__a)) {} - __resource_adaptor_imp & + _LIBCPP_HIDE_FROM_ABI __resource_adaptor_imp & operator=(__resource_adaptor_imp const &) = default; _LIBCPP_INLINE_VISIBILITY @@ -387,7 +387,7 @@ public: // 8.7.3, memory.resource.adaptor.mem private: - void * do_allocate(size_t __bytes, size_t) override + _LIBCPP_HIDE_FROM_ABI_VIRTUAL void * do_allocate(size_t __bytes, size_t) override { if (__bytes > __max_size()) __throw_bad_array_new_length(); @@ -395,7 +395,7 @@ private: return __alloc_.allocate(__s); } - void do_deallocate(void * __p, size_t __bytes, size_t) override + _LIBCPP_HIDE_FROM_ABI_VIRTUAL void do_deallocate(void * __p, size_t __bytes, size_t) override { _LIBCPP_ASSERT(__bytes <= __max_size(), "do_deallocate called for size which exceeds the maximum allocation size"); @@ -403,7 +403,7 @@ private: __alloc_.deallocate((_ValueType*)__p, __s); } - bool do_is_equal(memory_resource const & __other) const _NOEXCEPT override { + _LIBCPP_HIDE_FROM_ABI_VIRTUAL bool do_is_equal(memory_resource const & __other) const _NOEXCEPT override { __resource_adaptor_imp const * __p = dynamic_cast<__resource_adaptor_imp const *>(&__other); return __p ? __alloc_ == __p->__alloc_ : false; diff --git a/libcxx/include/experimental/propagate_const b/libcxx/include/experimental/propagate_const index 3efec5d..acdc16c 100644 --- a/libcxx/include/experimental/propagate_const +++ b/libcxx/include/experimental/propagate_const @@ -167,25 +167,25 @@ public: private: template <class _Up> - static _LIBCPP_CONSTEXPR element_type* __get_pointer(_Up* __u) + static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR element_type* __get_pointer(_Up* __u) { return __u; } template <class _Up> - static _LIBCPP_CONSTEXPR element_type* __get_pointer(_Up& __u) + static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR element_type* __get_pointer(_Up& __u) { return __get_pointer(__u.get()); } template <class _Up> - static _LIBCPP_CONSTEXPR const element_type* __get_pointer(const _Up* __u) + static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR const element_type* __get_pointer(const _Up* __u) { return __u; } template <class _Up> - static _LIBCPP_CONSTEXPR const element_type* __get_pointer(const _Up& __u) + static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR const element_type* __get_pointer(const _Up& __u) { return __get_pointer(__u.get()); } @@ -207,22 +207,22 @@ public: template <class _Up> friend _LIBCPP_CONSTEXPR const _Up& ::_VSTD_LFTS_V2::get_underlying(const propagate_const<_Up>& __pu) _NOEXCEPT; template <class _Up> friend _LIBCPP_CONSTEXPR _Up& ::_VSTD_LFTS_V2::get_underlying(propagate_const<_Up>& __pu) _NOEXCEPT; - _LIBCPP_CONSTEXPR propagate_const() = default; + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const() = default; propagate_const(const propagate_const&) = delete; - _LIBCPP_CONSTEXPR propagate_const(propagate_const&&) = default; + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const(propagate_const&&) = default; template <class _Up, enable_if_t<!is_convertible<_Up, _Tp>::value && is_constructible<_Tp, _Up&&>::value,bool> = true> - explicit _LIBCPP_CONSTEXPR propagate_const(propagate_const<_Up>&& __pu) + explicit _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const(propagate_const<_Up>&& __pu) : __t_(std::move(_VSTD_LFTS_V2::get_underlying(__pu))) { } template <class _Up, enable_if_t<is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value,bool> = false> - _LIBCPP_CONSTEXPR propagate_const(propagate_const<_Up>&& __pu) + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const(propagate_const<_Up>&& __pu) : __t_(std::move(_VSTD_LFTS_V2::get_underlying(__pu))) { } @@ -230,7 +230,7 @@ public: template <class _Up, enable_if_t<!is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value && !__is_propagate_const<decay_t<_Up>>::value,bool> = true> - explicit _LIBCPP_CONSTEXPR propagate_const(_Up&& __u) + explicit _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const(_Up&& __u) : __t_(std::forward<_Up>(__u)) { } @@ -238,78 +238,78 @@ public: template <class _Up, enable_if_t<is_convertible<_Up&&, _Tp>::value && is_constructible<_Tp, _Up&&>::value && !__is_propagate_const<decay_t<_Up>>::value,bool> = false> - _LIBCPP_CONSTEXPR propagate_const(_Up&& __u) + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const(_Up&& __u) : __t_(std::forward<_Up>(__u)) { } propagate_const& operator=(const propagate_const&) = delete; - _LIBCPP_CONSTEXPR propagate_const& operator=(propagate_const&&) = default; + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const& operator=(propagate_const&&) = default; template <class _Up> - _LIBCPP_CONSTEXPR propagate_const& operator=(propagate_const<_Up>&& __pu) + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const& operator=(propagate_const<_Up>&& __pu) { __t_ = std::move(_VSTD_LFTS_V2::get_underlying(__pu)); return *this; } template <class _Up, class _Vp = enable_if_t<!__is_propagate_const<decay_t<_Up>>::value>> - _LIBCPP_CONSTEXPR propagate_const& operator=(_Up&& __u) + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR propagate_const& operator=(_Up&& __u) { __t_ = std::forward<_Up>(__u); return *this; } - _LIBCPP_CONSTEXPR const element_type* get() const + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR const element_type* get() const { return __get_pointer(__t_); } - _LIBCPP_CONSTEXPR element_type* get() + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR element_type* get() { return __get_pointer(__t_); } - explicit _LIBCPP_CONSTEXPR operator bool() const + _LIBCPP_HIDE_FROM_ABI explicit _LIBCPP_CONSTEXPR operator bool() const { return get() != nullptr; } - _LIBCPP_CONSTEXPR const element_type* operator->() const + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR const element_type* operator->() const { return get(); } template <class _Tp_ = _Tp, class _Up = enable_if_t<is_convertible< const _Tp_, const element_type *>::value>> - _LIBCPP_CONSTEXPR operator const element_type *() const { + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR operator const element_type *() const { return get(); } - _LIBCPP_CONSTEXPR const element_type& operator*() const + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR const element_type& operator*() const { return *get(); } - _LIBCPP_CONSTEXPR element_type* operator->() + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR element_type* operator->() { return get(); } template <class _Tp_ = _Tp, class _Up = enable_if_t< is_convertible<_Tp_, element_type *>::value>> - _LIBCPP_CONSTEXPR operator element_type *() { + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR operator element_type *() { return get(); } - _LIBCPP_CONSTEXPR element_type& operator*() + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR element_type& operator*() { return *get(); } - _LIBCPP_CONSTEXPR void swap(propagate_const& __pt) _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value) - { + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR void swap(propagate_const& __pt) + _NOEXCEPT_(__is_nothrow_swappable<_Tp>::value) { using _VSTD::swap; swap(__t_, __pt.__t_); } @@ -506,7 +506,7 @@ struct hash<experimental::fundamentals_v2::propagate_const<_Tp>> typedef size_t result_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> argument_type; - size_t operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1) const + _LIBCPP_HIDE_FROM_ABI size_t operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1) const { return std::hash<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1)); } @@ -518,7 +518,7 @@ struct equal_to<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::equal_to<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); @@ -531,7 +531,7 @@ struct not_equal_to<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::not_equal_to<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); @@ -544,7 +544,7 @@ struct less<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::less<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); @@ -557,7 +557,7 @@ struct greater<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::greater<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); @@ -570,7 +570,7 @@ struct less_equal<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::less_equal<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); @@ -583,7 +583,7 @@ struct greater_equal<experimental::fundamentals_v2::propagate_const<_Tp>> typedef experimental::fundamentals_v2::propagate_const<_Tp> first_argument_type; typedef experimental::fundamentals_v2::propagate_const<_Tp> second_argument_type; - bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, + _LIBCPP_HIDE_FROM_ABI bool operator()(const experimental::fundamentals_v2::propagate_const<_Tp>& __pc1, const experimental::fundamentals_v2::propagate_const<_Tp>& __pc2) const { return std::greater_equal<_Tp>()(_VSTD_LFTS_V2::get_underlying(__pc1), _VSTD_LFTS_V2::get_underlying(__pc2)); diff --git a/libcxx/include/experimental/simd b/libcxx/include/experimental/simd index 4ca67d2..11047d1 100644 --- a/libcxx/include/experimental/simd +++ b/libcxx/include/experimental/simd @@ -691,8 +691,8 @@ class __simd_storage<_Tp, __simd_abi<_StorageKind::_Array, __num_element>> { friend struct simd_mask; public: - _Tp __get(size_t __index) const noexcept { return __storage_[__index]; } - void __set(size_t __index, _Tp __val) noexcept { + _LIBCPP_HIDE_FROM_ABI _Tp __get(size_t __index) const noexcept { return __storage_[__index]; } + _LIBCPP_HIDE_FROM_ABI void __set(size_t __index, _Tp __val) noexcept { __storage_[__index] = __val; } }; @@ -708,8 +708,8 @@ class __simd_storage<_Tp, __simd_abi<_StorageKind::_Scalar, 1>> { friend struct simd_mask; public: - _Tp __get(size_t __index) const noexcept { return (&__storage_)[__index]; } - void __set(size_t __index, _Tp __val) noexcept { + _LIBCPP_HIDE_FROM_ABI _Tp __get(size_t __index) const noexcept { return (&__storage_)[__index]; } + _LIBCPP_HIDE_FROM_ABI void __set(size_t __index, _Tp __val) noexcept { (&__storage_)[__index] = __val; } }; @@ -810,8 +810,8 @@ class __simd_storage<_Tp, __simd_abi<_StorageKind::_VecExt, __num_element>> { friend struct simd_mask; public: - _Tp __get(size_t __index) const noexcept { return __storage_[__index]; } - void __set(size_t __index, _Tp __val) noexcept { + _LIBCPP_HIDE_FROM_ABI _Tp __get(size_t __index) const noexcept { return __storage_[__index]; } + _LIBCPP_HIDE_FROM_ABI void __set(size_t __index, _Tp __val) noexcept { __storage_[__index] = __val; } }; @@ -831,79 +831,79 @@ class __simd_reference { __simd_storage<_Tp, _Abi>* __ptr_; size_t __index_; - __simd_reference(__simd_storage<_Tp, _Abi>* __ptr, size_t __index) + _LIBCPP_HIDE_FROM_ABI __simd_reference(__simd_storage<_Tp, _Abi>* __ptr, size_t __index) : __ptr_(__ptr), __index_(__index) {} - __simd_reference(const __simd_reference&) = default; + _LIBCPP_HIDE_FROM_ABI __simd_reference(const __simd_reference&) = default; public: __simd_reference() = delete; __simd_reference& operator=(const __simd_reference&) = delete; - operator _Vp() const { return __ptr_->__get(__index_); } + _LIBCPP_HIDE_FROM_ABI operator _Vp() const { return __ptr_->__get(__index_); } - __simd_reference operator=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator=(_Vp __value) && { __ptr_->__set(__index_, __value); return *this; } - __simd_reference operator++() && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator++() && { return std::move(*this) = __ptr_->__get(__index_) + 1; } - _Vp operator++(int) && { + _LIBCPP_HIDE_FROM_ABI _Vp operator++(int) && { auto __val = __ptr_->__get(__index_); __ptr_->__set(__index_, __val + 1); return __val; } - __simd_reference operator--() && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator--() && { return std::move(*this) = __ptr_->__get(__index_) - 1; } - _Vp operator--(int) && { + _LIBCPP_HIDE_FROM_ABI _Vp operator--(int) && { auto __val = __ptr_->__get(__index_); __ptr_->__set(__index_, __val - 1); return __val; } - __simd_reference operator+=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator+=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) + __value; } - __simd_reference operator-=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator-=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) - __value; } - __simd_reference operator*=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator*=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) * __value; } - __simd_reference operator/=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator/=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) / __value; } - __simd_reference operator%=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator%=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) % __value; } - __simd_reference operator>>=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator>>=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) >> __value; } - __simd_reference operator<<=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator<<=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) << __value; } - __simd_reference operator&=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator&=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) & __value; } - __simd_reference operator|=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator|=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) | __value; } - __simd_reference operator^=(_Vp __value) && { + _LIBCPP_HIDE_FROM_ABI __simd_reference operator^=(_Vp __value) && { return std::move(*this) = __ptr_->__get(__index_) ^ __value; } }; @@ -1350,11 +1350,11 @@ public: using mask_type = simd_mask<_Tp, _Abi>; using abi_type = _Abi; - simd() = default; - simd(const simd&) = default; - simd& operator=(const simd&) = default; + _LIBCPP_HIDE_FROM_ABI simd() = default; + _LIBCPP_HIDE_FROM_ABI simd(const simd&) = default; + _LIBCPP_HIDE_FROM_ABI simd& operator=(const simd&) = default; - static constexpr size_t size() noexcept { + static _LIBCPP_HIDE_FROM_ABI constexpr size_t size() noexcept { return simd_size<_Tp, _Abi>::value; } @@ -1362,7 +1362,7 @@ private: __simd_storage<_Tp, _Abi> __s_; template <class _Up> - static constexpr bool __can_broadcast() { + static _LIBCPP_HIDE_FROM_ABI constexpr bool __can_broadcast() { return (std::is_arithmetic<_Up>::value && __is_non_narrowing_arithmetic_convertible<_Up, _Tp>()) || (!std::is_arithmetic<_Up>::value && @@ -1374,7 +1374,7 @@ private: } template <class _Generator, size_t... __indicies> - static constexpr decltype( + static _LIBCPP_HIDE_FROM_ABI constexpr decltype( std::forward_as_tuple(std::declval<_Generator>()( std::integral_constant<size_t, __indicies>())...), bool()) @@ -1385,12 +1385,12 @@ private: } template <class _Generator> - static bool __can_generate(...) { + static _LIBCPP_HIDE_FROM_ABI bool __can_generate(...) { return false; } template <class _Generator, size_t... __indicies> - void __generator_init(_Generator&& __g, std::index_sequence<__indicies...>) { + _LIBCPP_HIDE_FROM_ABI void __generator_init(_Generator&& __g, std::index_sequence<__indicies...>) { int __not_used[]{((*this)[__indicies] = __g(std::integral_constant<size_t, __indicies>()), 0)...}; @@ -1403,7 +1403,7 @@ public: class = typename std::enable_if< std::is_same<_Abi, simd_abi::fixed_size<size()>>::value && __is_non_narrowing_arithmetic_convertible<_Up, _Tp>()>::type> - simd(const simd<_Up, simd_abi::fixed_size<size()>>& __v) { + _LIBCPP_HIDE_FROM_ABI simd(const simd<_Up, simd_abi::fixed_size<size()>>& __v) { for (size_t __i = 0; __i < size(); __i++) { (*this)[__i] = static_cast<_Tp>(__v[__i]); } @@ -1412,7 +1412,7 @@ public: // implicit broadcast constructor template <class _Up, class = typename std::enable_if<__can_broadcast<_Up>()>::type> - simd(_Up&& __rv) { + _LIBCPP_HIDE_FROM_ABI simd(_Up&& __rv) { auto __v = static_cast<_Tp>(__rv); for (size_t __i = 0; __i < size(); __i++) { (*this)[__i] = __v; @@ -1424,7 +1424,7 @@ public: int = typename std::enable_if< __can_generate<_Generator>(std::make_index_sequence<size()>()), int>::type()> - explicit simd(_Generator&& __g) { + explicit _LIBCPP_HIDE_FROM_ABI simd(_Generator&& __g) { __generator_init(std::forward<_Generator>(__g), std::make_index_sequence<size()>()); } @@ -1434,7 +1434,7 @@ public: class _Up, class _Flags, class = typename std::enable_if<__vectorizable<_Up>()>::type, class = typename std::enable_if<is_simd_flag_type<_Flags>::value>::type> - simd(const _Up* __buffer, _Flags) { + _LIBCPP_HIDE_FROM_ABI simd(const _Up* __buffer, _Flags) { // TODO: optimize for overaligned flags for (size_t __i = 0; __i < size(); __i++) { (*this)[__i] = static_cast<_Tp>(__buffer[__i]); @@ -1445,7 +1445,7 @@ public: template <class _Up, class _Flags> typename std::enable_if<__vectorizable<_Up>() && is_simd_flag_type<_Flags>::value>::type - copy_from(const _Up* __buffer, _Flags) { + _LIBCPP_HIDE_FROM_ABI copy_from(const _Up* __buffer, _Flags) { *this = simd(__buffer, _Flags()); } @@ -1453,7 +1453,7 @@ public: template <class _Up, class _Flags> typename std::enable_if<__vectorizable<_Up>() && is_simd_flag_type<_Flags>::value>::type - copy_to(_Up* __buffer, _Flags) const { + _LIBCPP_HIDE_FROM_ABI copy_to(_Up* __buffer, _Flags) const { // TODO: optimize for overaligned flags for (size_t __i = 0; __i < size(); __i++) { __buffer[__i] = static_cast<_Up>((*this)[__i]); @@ -1461,9 +1461,9 @@ public: } // scalar access [simd.subscr] - reference operator[](size_t __i) { return reference(&__s_, __i); } + _LIBCPP_HIDE_FROM_ABI reference operator[](size_t __i) { return reference(&__s_, __i); } - value_type operator[](size_t __i) const { return __s_.__get(__i); } + _LIBCPP_HIDE_FROM_ABI value_type operator[](size_t __i) const { return __s_.__get(__i); } // unary operators [simd.unary] simd& operator++(); @@ -1526,7 +1526,7 @@ public: using simd_type = simd<_Tp, _Abi>; using abi_type = _Abi; static constexpr size_t size() noexcept; - simd_mask() = default; + _LIBCPP_HIDE_FROM_ABI simd_mask() = default; // broadcast constructor explicit simd_mask(value_type) noexcept; |