<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Thanks, merged in r293443.</div><div class=""><br class=""></div><div class="">-Dimitry</div><br class=""><div><blockquote type="cite" class=""><div class="">On 29 Jan 2017, at 19:55, Eric Fiselier <<a href="mailto:eric@efcs.ca" class="">eric@efcs.ca</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I'm OK with this.</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sun, Jan 29, 2017 at 10:18 AM, Dimitry Andric <span dir="ltr" class=""><<a href="mailto:dimitry@andric.com" target="_blank" class="">dimitry@andric.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'd like to merge this to the release_40 branch.  Eric, you OK with that?<br class="">
<span class="HOEnZb"><font color="#888888" class=""><br class="">
-Dimitry<br class="">
</font></span><div class="HOEnZb"><div class="h5"><br class="">
> On 26 Jan 2017, at 19:37, Dimitry Andric via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:<br class="">
><br class="">
> Author: dim<br class="">
> Date: Thu Jan 26 12:37:18 2017<br class="">
> New Revision: 293197<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=293197&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project?rev=293197&view=rev</a><br class="">
> Log:<br class="">
> Disable thread safety analysis for some functions in __thread_support<br class="">
><br class="">
> Many thread-related libc++ test cases fail on FreeBSD, due to the<br class="">
> following -Werror warnings:<br class="">
><br class="">
>    In file included from test/std/thread/thread.<wbr class="">threads/thread.thread.this/<wbr class="">sleep_until.pass.cpp:17:<br class="">
>    In file included from include/thread:97:<br class="">
>    In file included from include/__mutex_base:17:<br class="">
>    include/__threading_support:<wbr class="">222:1: error: mutex '__m' is still held at the end of function [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>    }<br class="">
>    ^<br class="">
>    include/__threading_support:<wbr class="">221:10: note: mutex acquired here<br class="">
>      return pthread_mutex_lock(__m);<br class="">
>             ^<br class="">
>    include/__threading_support:<wbr class="">231:10: error: releasing mutex '__m' that was not held [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>      return pthread_mutex_unlock(__m);<br class="">
>             ^<br class="">
>    include/__threading_support:<wbr class="">242:1: error: mutex '__m' is still held at the end of function [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>    }<br class="">
>    ^<br class="">
>    include/__threading_support:<wbr class="">241:10: note: mutex acquired here<br class="">
>      return pthread_mutex_lock(__m);<br class="">
>             ^<br class="">
>    include/__threading_support:<wbr class="">251:10: error: releasing mutex '__m' that was not held [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>      return pthread_mutex_unlock(__m);<br class="">
>             ^<br class="">
>    include/__threading_support:<wbr class="">272:10: error: calling function 'pthread_cond_wait' requires holding mutex '__m' exclusively [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>      return pthread_cond_wait(__cv, __m);<br class="">
>             ^<br class="">
>    include/__threading_support:<wbr class="">278:10: error: calling function 'pthread_cond_timedwait' requires holding mutex '__m' exclusively [-Werror,-Wthread-safety-<wbr class="">analysis]<br class="">
>      return pthread_cond_timedwait(__cv, __m, __ts);<br class="">
>             ^<br class="">
>    6 errors generated.<br class="">
><br class="">
> This is because on FreeBSD, the pthread functions have lock annotations.<br class="">
> Since the functions in __thread_support are internal to libc++ only, add<br class="">
> no_thread_safety_analysis attributes to suppress these warnings.<br class="">
><br class="">
> Reviewers: mclow.lists, EricWF, delesley, aaron.ballman<br class="">
> Reviewed By: aaron.ballman<br class="">
> Subscribers: ed, aaron.ballman, joerg, emaste, cfe-commits<br class="">
> Differential Revision: <a href="https://reviews.llvm.org/D28520" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/<wbr class="">D28520</a><br class="">
><br class="">
> Modified:<br class="">
>    libcxx/trunk/include/__<wbr class="">threading_support<br class="">
><br class="">
> Modified: libcxx/trunk/include/__<wbr class="">threading_support<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__threading_support?rev=293197&r1=293196&r2=293197&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/libcxx/trunk/include/_<wbr class="">_threading_support?rev=293197&<wbr class="">r1=293196&r2=293197&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- libcxx/trunk/include/__<wbr class="">threading_support (original)<br class="">
> +++ libcxx/trunk/include/__<wbr class="">threading_support Thu Jan 26 12:37:18 2017<br class="">
> @@ -40,6 +40,12 @@<br class="">
> #define _LIBCPP_THREAD_ABI_VISIBILITY inline _LIBCPP_INLINE_VISIBILITY<br class="">
> #endif<br class="">
><br class="">
> +#if defined(__FreeBSD__) && defined(__clang__) && __has_attribute(no_thread_<wbr class="">safety_analysis)<br class="">
> +#define _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS __attribute__((no_thread_<wbr class="">safety_analysis))<br class="">
> +#else<br class="">
> +#define _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> +#endif<br class="">
> +<br class="">
> _LIBCPP_BEGIN_NAMESPACE_STD<br class="">
><br class="">
> #if defined(_LIBCPP_HAS_THREAD_<wbr class="">API_PTHREAD)<br class="">
> @@ -102,25 +108,25 @@ typedef DWORD __libcpp_tls_key;<br class="">
> _LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> int __libcpp_recursive_mutex_init(<wbr class="">__libcpp_recursive_mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_recursive_mutex_lock(<wbr class="">__libcpp_recursive_mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> bool __libcpp_recursive_mutex_<wbr class="">trylock(__libcpp_recursive_<wbr class="">mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_recursive_mutex_<wbr class="">unlock(__libcpp_recursive_<wbr class="">mutex_t *__m);<br class="">
><br class="">
> _LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> int __libcpp_recursive_mutex_<wbr class="">destroy(__libcpp_recursive_<wbr class="">mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_mutex_lock(__libcpp_<wbr class="">mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> bool __libcpp_mutex_trylock(__<wbr class="">libcpp_mutex_t *__m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_mutex_unlock(__<wbr class="">libcpp_mutex_t *__m);<br class="">
><br class="">
> _LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> @@ -133,10 +139,10 @@ int __libcpp_condvar_signal(__<wbr class="">libcpp_con<br class="">
> _LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> int __libcpp_condvar_broadcast(__<wbr class="">libcpp_condvar_t* __cv);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_condvar_wait(__<wbr class="">libcpp_condvar_t* __cv, __libcpp_mutex_t* __m);<br class="">
><br class="">
> -_LIBCPP_THREAD_ABI_VISIBILITY<br class="">
> +_LIBCPP_THREAD_ABI_VISIBILITY _LIBCPP_NO_THREAD_SAFETY_<wbr class="">ANALYSIS<br class="">
> int __libcpp_condvar_timedwait(__<wbr class="">libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,<br class="">
>                                timespec *__ts);<br class="">
><br class="">
><br class="">
><br class="">
> ______________________________<wbr class="">_________________<br class="">
> cfe-commits mailing list<br class="">
> <a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/cfe-commits</a><br class="">
<br class="">
</div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></body></html>