From: Brad Smith Date: Wed, 2 Nov 2016 01:39:01 +0000 (+0000) Subject: Disable the use of std::call_once on OpenBSD with libstdc++. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c17dedb2b8f19f3ee7eeacd56e7b57529e6a27bf;p=llvm Disable the use of std::call_once on OpenBSD with libstdc++. It was noticed this caused performance regressions and deadlocks. PR30768. Reorder the code to make it clearer what is tested. PPC now disables the use of std::call_once only with libstdc++ with the reordering of the code, as was the original intent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285782 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/Threading.h b/include/llvm/Support/Threading.h index 0e9b88e69fb..4bef7ec8dd3 100644 --- a/include/llvm/Support/Threading.h +++ b/include/llvm/Support/Threading.h @@ -20,11 +20,11 @@ #include // So we can check the C++ standard lib macros. #include -// We use std::call_once on all Unix platforms except for NetBSD with -// libstdc++. That platform has a bug they are working to fix, and they'll -// remove the NetBSD checks once fixed. -#if defined(LLVM_ON_UNIX) && \ - !(defined(__NetBSD__) && !defined(_LIBCPP_VERSION)) && !defined(__ppc__) +// std::call_once from libc++ is used on all Unix platforms. Other +// implementations like libstdc++ are known to have problems on NetBSD, +// OpenBSD and PowerPC. +#if defined(LLVM_ON_UNIX) && (defined(_LIBCPP_VERSION) || \ + !(defined(__NetBSD__) || defined(__OpenBSD__) || defined(__ppc__))) #define LLVM_THREADING_USE_STD_CALL_ONCE 1 #else #define LLVM_THREADING_USE_STD_CALL_ONCE 0