diff --git a/libcxx/include/__config b/libcxx/include/__config --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -474,6 +474,10 @@ # define _LIBCPP_HAS_EXTENSION_BLOCKS #endif +#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && defined(__APPLE__) +# define _LIBCPP_HAS_BLOCKS_RUNTIME +#endif + #if !(__has_feature(cxx_relaxed_constexpr)) #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR #endif diff --git a/libcxx/include/functional b/libcxx/include/functional --- a/libcxx/include/functional +++ b/libcxx/include/functional @@ -508,7 +508,7 @@ #include <__functional_base> -#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include() +#if defined(_LIBCPP_HAS_BLOCKS_RUNTIME) && !defined(_LIBCPP_HAS_OBJC_ARC) #include #endif @@ -2255,7 +2255,7 @@ #endif // _LIBCPP_NO_RTTI }; -#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include() +#if defined(_LIBCPP_HAS_BLOCKS_RUNTIME) && !defined(_LIBCPP_HAS_OBJC_ARC) template class __func<_Rp1(^)(_ArgTypes1...), _Alloc, _Rp(_ArgTypes...)> diff --git a/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp b/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp --- a/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp +++ b/libcxx/test/libcxx/utilities/function.objects/func.blocks.sh.cpp @@ -9,14 +9,15 @@ // std::function support for the "blocks" extension // UNSUPPORTED: c++98, c++03 -// REQUIRES: has-fblocks + +// This test requires the Blocks runtime, which is (only?) available +// on Darwin out-of-the-box. +// REQUIRES: has-fblocks && darwin // FILE_DEPENDENCIES: %t.exe // RUN: %{build} -fblocks // RUN: %{run} -#if __has_include() - #include #include #include @@ -143,9 +144,3 @@ return 0; } - -#else - -int main() { } - -#endif