I'd like to merge this to the release_40 branch. Eric, you OK with that? -Dimitry
> On 26 Jan 2017, at 19:37, Dimitry Andric via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: dim > Date: Thu Jan 26 12:37:18 2017 > New Revision: 293197 > > URL: http://llvm.org/viewvc/llvm-project?rev=293197&view=rev > Log: > Disable thread safety analysis for some functions in __thread_support > > Many thread-related libc++ test cases fail on FreeBSD, due to the > following -Werror warnings: > > In file included from > test/std/thread/thread.threads/thread.thread.this/sleep_until.pass.cpp:17: > In file included from include/thread:97: > In file included from include/__mutex_base:17: > include/__threading_support:222:1: error: mutex '__m' is still held at the > end of function [-Werror,-Wthread-safety-analysis] > } > ^ > include/__threading_support:221:10: note: mutex acquired here > return pthread_mutex_lock(__m); > ^ > include/__threading_support:231:10: error: releasing mutex '__m' that was > not held [-Werror,-Wthread-safety-analysis] > return pthread_mutex_unlock(__m); > ^ > include/__threading_support:242:1: error: mutex '__m' is still held at the > end of function [-Werror,-Wthread-safety-analysis] > } > ^ > include/__threading_support:241:10: note: mutex acquired here > return pthread_mutex_lock(__m); > ^ > include/__threading_support:251:10: error: releasing mutex '__m' that was > not held [-Werror,-Wthread-safety-analysis] > return pthread_mutex_unlock(__m); > ^ > include/__threading_support:272:10: error: calling function > 'pthread_cond_wait' requires holding mutex '__m' exclusively > [-Werror,-Wthread-safety-analysis] > return pthread_cond_wait(__cv, __m); > ^ > include/__threading_support:278:10: error: calling function > 'pthread_cond_timedwait' requires holding mutex '__m' exclusively > [-Werror,-Wthread-safety-analysis] > return pthread_cond_timedwait(__cv, __m, __ts); > ^ > 6 errors generated. > > This is because on FreeBSD, the pthread functions have lock annotations. > Since the functions in __thread_support are internal to libc++ only, add > no_thread_safety_analysis attributes to suppress these warnings. > > Reviewers: mclow.lists, EricWF, delesley, aaron.ballman > Reviewed By: aaron.ballman > Subscribers: ed, aaron.ballman, joerg, emaste, cfe-commits > Differential Revision: https://reviews.llvm.org/D28520 > > Modified: > libcxx/trunk/include/__threading_support > > Modified: libcxx/trunk/include/__threading_support > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__threading_support?rev=293197&r1=293196&r2=293197&view=diff > ============================================================================== > --- libcxx/trunk/include/__threading_support (original) > +++ libcxx/trunk/include/__threading_support Thu Jan 26 12:37:18 2017 > @@ -40,6 +40,12 @@ > #define _LIBCPP_THREAD_ABI_VISIBILITY inline _LIBCPP_INLINE_VISIBILITY > #endif > > +#if defined(__FreeBSD__) && defined(__clang__) && > __has_attribute(no_thread_safety_analysis) > +#define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > __attribute__((no_thread_safety_analysis)) > +#else > +#define _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > +#endif > + > _LIBCPP_BEGIN_NAMESPACE_STD > > #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) > @@ -102,25 +108,25 @@ typedef DWORD __libcpp_tls_key; > _LIBCPP_THREAD_ABI_VISIBILITY > int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > bool __libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t *__m); > > _LIBCPP_THREAD_ABI_VISIBILITY > int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_mutex_lock(__libcpp_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > bool __libcpp_mutex_trylock(__libcpp_mutex_t *__m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_mutex_unlock(__libcpp_mutex_t *__m); > > _LIBCPP_THREAD_ABI_VISIBILITY > @@ -133,10 +139,10 @@ int __libcpp_condvar_signal(__libcpp_con > _LIBCPP_THREAD_ABI_VISIBILITY > int __libcpp_condvar_broadcast(__libcpp_condvar_t* __cv); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_condvar_wait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m); > > -_LIBCPP_THREAD_ABI_VISIBILITY > +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_ANALYSIS > int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t > *__m, > timespec *__ts); > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits