[libc++] Don't try to include <Block.h> when not available

Cr-Mirrored-From: https://chromium.googlesource.com/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: cd66970b371240d90e163d2020c1a42bb2b7e1b9
diff --git a/include/functional b/include/functional
index f03ba8b..360ca6e 100644
--- a/include/functional
+++ b/include/functional
@@ -508,7 +508,7 @@
 
 #include <__functional_base>
 
-#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC)
+#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include(<Block.h>)
 #include <Block.h>
 #endif
 
@@ -2255,7 +2255,7 @@
 #endif // _LIBCPP_NO_RTTI
 };
 
-#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC)
+#if defined(_LIBCPP_HAS_EXTENSION_BLOCKS) && !defined(_LIBCPP_HAS_OBJC_ARC) && __has_include(<Block.h>)
 
 template<class _Rp1, class ..._ArgTypes1, class _Alloc, class _Rp, class ..._ArgTypes>
 class __func<_Rp1(^)(_ArgTypes1...), _Alloc, _Rp(_ArgTypes...)>
diff --git a/test/libcxx/utilities/function.objects/func.blocks.sh.cpp b/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
index a608d42..25b9546 100644
--- a/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
+++ b/test/libcxx/utilities/function.objects/func.blocks.sh.cpp
@@ -14,6 +14,8 @@
 // RUN: %{build} -fblocks
 // RUN: %{run}
 
+#if __has_include(<Block.h>)
+
 #include <functional>
 #include <cstdlib>
 #include <cassert>
@@ -140,3 +142,9 @@
 
     return 0;
 }
+
+#else
+
+int main() { }
+
+#endif