diff options
| author | Eric Fiselier <eric@efcs.ca> | 2015-06-13 00:23:07 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2015-06-13 00:23:07 +0000 |
| commit | 776cc6e48f6954988bfb86c1854c14ba93d86c5e (patch) | |
| tree | ee8690ffc66a352e3157679475f139d011f54b97 | |
| parent | 02cfdbb7f142dfa42c600c23fdd5275a6d8dc7de (diff) | |
| download | bcm5719-llvm-776cc6e48f6954988bfb86c1854c14ba93d86c5e.tar.gz bcm5719-llvm-776cc6e48f6954988bfb86c1854c14ba93d86c5e.zip | |
Prevent dependancy on libatomic when using GCC to provide <atomic>.
The __atomic_is_lock_free(...) function sometimes requires linkage to libatomic
if it cannot be evaluated at compile time. Remove __c11_atomic_is_lock_free
and use __atomic_is_lock_free(sizeof(Tp)) directly so that it can be evaluated
at compile time.
llvm-svn: 239648
| -rw-r--r-- | libcxx/include/atomic | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libcxx/include/atomic b/libcxx/include/atomic index 0427a9133f7..5bc71f0032b 100644 --- a/libcxx/include/atomic +++ b/libcxx/include/atomic @@ -633,10 +633,6 @@ static inline void __c11_atomic_signal_fence(memory_order __order) { __atomic_signal_fence(__gcc_atomic::__to_gcc_order(__order)); } -static inline bool __c11_atomic_is_lock_free(size_t __size) { - return __atomic_is_lock_free(__size, 0); -} - template <typename _Tp> static inline void __c11_atomic_store(volatile _Atomic(_Tp)* __a, _Tp __val, memory_order __order) { @@ -827,10 +823,16 @@ struct __atomic_base // false _LIBCPP_INLINE_VISIBILITY bool is_lock_free() const volatile _NOEXCEPT - {return __c11_atomic_is_lock_free(sizeof(_Tp));} + { +#if __has_feature(cxx_atomic) + return __c11_atomic_is_lock_free(sizeof(_Tp)); +#else + return __atomic_is_lock_free(sizeof(_Tp), 0); +#endif + } _LIBCPP_INLINE_VISIBILITY bool is_lock_free() const _NOEXCEPT - {return __c11_atomic_is_lock_free(sizeof(_Tp));} + {return static_cast<__atomic_base const volatile*>(this)->is_lock_free();} _LIBCPP_INLINE_VISIBILITY void store(_Tp __d, memory_order __m = memory_order_seq_cst) volatile _NOEXCEPT {__c11_atomic_store(&__a_, __d, __m);} |

