thakis created this revision. thakis added reviewers: hans, rnk. thakis requested review of this revision.
It's true that docs.microsoft.com says: """The _ReadBarrier, _WriteBarrier, and _ReadWriteBarrier compiler intrinsics and the MemoryBarrier macro are all deprecated and should not be used. For inter-thread communication, use mechanisms such as atomic_thread_fence and std::atomic<T>, which are defined in the C++ Standard Library. For hardware access, use the /volatile:iso compiler option together with the volatile keyword.""" And these attributes have been here since these builtins were added in r192860. However: - cl.exe does not warn on them even with /Wall - none of the replacements are useful for C code - we don't add __attribute__((__deprecated__())) to any other declarations in intrin.h - intrin0.h in the MSVC headers declares _ReadWriteBarrier() (but without the deprecation attribute), so you get inconsistent deprecation warnings depending on if you include intrin.h or intrin0.h The motivation is that compiling sqlite.h with clang-cl produces a deprecation warning with clang-cl for _ReadWriteBarrier(), but not with cl.exe. https://reviews.llvm.org/D111232 Files: clang/lib/Headers/intrin.h Index: clang/lib/Headers/intrin.h =================================================================== --- clang/lib/Headers/intrin.h +++ clang/lib/Headers/intrin.h @@ -150,10 +150,8 @@ long _InterlockedExchangeAdd_HLERelease(long volatile *, long); __int64 _InterlockedExchangeAdd64_HLEAcquire(__int64 volatile *, __int64); __int64 _InterlockedExchangeAdd64_HLERelease(__int64 volatile *, __int64); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _ReadBarrier(void); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _ReadWriteBarrier(void); +void _ReadBarrier(void); +void _ReadWriteBarrier(void); unsigned int _rorx_u32(unsigned int, const unsigned int); int _sarx_i32(int, unsigned int); #if __STDC_HOSTED__ @@ -164,8 +162,7 @@ void _Store_HLERelease(long volatile *, long); void _Store64_HLERelease(__int64 volatile *, __int64); void _StorePointer_HLERelease(void *volatile *, void *); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _WriteBarrier(void); +void _WriteBarrier(void); unsigned __int32 xbegin(void); void _xend(void);
Index: clang/lib/Headers/intrin.h =================================================================== --- clang/lib/Headers/intrin.h +++ clang/lib/Headers/intrin.h @@ -150,10 +150,8 @@ long _InterlockedExchangeAdd_HLERelease(long volatile *, long); __int64 _InterlockedExchangeAdd64_HLEAcquire(__int64 volatile *, __int64); __int64 _InterlockedExchangeAdd64_HLERelease(__int64 volatile *, __int64); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _ReadBarrier(void); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _ReadWriteBarrier(void); +void _ReadBarrier(void); +void _ReadWriteBarrier(void); unsigned int _rorx_u32(unsigned int, const unsigned int); int _sarx_i32(int, unsigned int); #if __STDC_HOSTED__ @@ -164,8 +162,7 @@ void _Store_HLERelease(long volatile *, long); void _Store64_HLERelease(__int64 volatile *, __int64); void _StorePointer_HLERelease(void *volatile *, void *); -void __attribute__((__deprecated__( - "use other intrinsics or C++11 atomics instead"))) _WriteBarrier(void); +void _WriteBarrier(void); unsigned __int32 xbegin(void); void _xend(void);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits