From f6600b7524e2956fcaef32da7ee9c7eca508c004 Mon Sep 17 00:00:00 2001 From: Asiri Rathnayake Date: Tue, 13 Sep 2016 09:32:32 +0000 Subject: [PATCH] [libcxx] Fix gcc builds. Step around a gcc pre-processor defect which causes it to fail to parse the __has_include macro check. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@281310 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/__threading_support | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/include/__threading_support b/include/__threading_support index b36a52ec9..86dc8c7be 100644 --- a/include/__threading_support +++ b/include/__threading_support @@ -19,9 +19,20 @@ #ifndef _LIBCPP_HAS_NO_THREADS -#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) && (!defined(__has_include) || __has_include(<__external_threading>)) +// These checks are carefully arranged so as not to trigger a gcc pre-processor +// defect which causes it to fail to parse the __has_include check below, the +// redundancy is intentional. +#if defined(_LIBCPP_HAS_THREAD_API_EXTERNAL) +#if !defined(__clang__) && (_GNUC_VER < 500) #include <__external_threading> -#else +#define _LIBCPP_EXTERNAL_THREADING +#elif !defined(__has_include) || __has_include(<__external_threading>) +#include <__external_threading> +#define _LIBCPP_EXTERNAL_THREADING +#endif +#endif + +#if !defined(_LIBCPP_EXTERNAL_THREADING) #include #include #endif