[libc++] Add REQUIRES for tests that need -fblocks and -fobjc-arc

AppleClang seems to support these extensions by default, but other
compilers don't.
diff --git a/libcxx/test/libcxx/selftest/test.arc.pass.mm b/libcxx/test/libcxx/selftest/test.arc.pass.mm
index 0c83cc8..b70b24e 100644
--- a/libcxx/test/libcxx/selftest/test.arc.pass.mm
+++ b/libcxx/test/libcxx/selftest/test.arc.pass.mm
@@ -7,6 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+// REQUIRES: has-fobjc-arc
 // ADDITIONAL_COMPILE_FLAGS: -fobjc-arc
 
 #if __has_feature(objc_arc) == 0
diff --git a/libcxx/test/libcxx/type_traits/is_pointer.arc.pass.mm b/libcxx/test/libcxx/type_traits/is_pointer.arc.pass.mm
index 3b297d5..1688699 100644
--- a/libcxx/test/libcxx/type_traits/is_pointer.arc.pass.mm
+++ b/libcxx/test/libcxx/type_traits/is_pointer.arc.pass.mm
@@ -5,9 +5,9 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: c++98, c++03
 
+// UNSUPPORTED: c++98, c++03
+// REQUIRES: has-fobjc-arc
 // ADDITIONAL_COMPILE_FLAGS: -fobjc-arc
 
 // <type_traits>
diff --git a/libcxx/test/libcxx/type_traits/is_scalar.objc.pass.mm b/libcxx/test/libcxx/type_traits/is_scalar.objc.pass.mm
index 1f7ffec..23693fc 100644
--- a/libcxx/test/libcxx/type_traits/is_scalar.objc.pass.mm
+++ b/libcxx/test/libcxx/type_traits/is_scalar.objc.pass.mm
@@ -5,8 +5,10 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-//
+
 // UNSUPPORTED: c++98, c++03
+// REQUIRES: has-fblocks
+// ADDITIONAL_COMPILE_FLAGS: -fblocks
 
 // <type_traits>
 
diff --git a/libcxx/test/libcxx/utilities/optional/block.objc.pass.mm b/libcxx/test/libcxx/utilities/optional/block.objc.pass.mm
index 8d2722b..7767460 100644
--- a/libcxx/test/libcxx/utilities/optional/block.objc.pass.mm
+++ b/libcxx/test/libcxx/utilities/optional/block.objc.pass.mm
@@ -7,6 +7,8 @@
 //===----------------------------------------------------------------------===//
 
 // UNSUPPORTED: c++98, c++03, c++11, c++14
+// REQUIRES: has-fblocks
+// ADDITIONAL_COMPILE_FLAGS: -fblocks
 
 // <optional>
 
diff --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py
index 20d0a79..0a5f62e 100644
--- a/libcxx/utils/libcxx/test/config.py
+++ b/libcxx/utils/libcxx/test/config.py
@@ -6,6 +6,7 @@
 #
 #===----------------------------------------------------------------------===##
 
+import copy
 import locale
 import os
 import platform
@@ -149,6 +150,8 @@
         self.configure_coverage()
         self.configure_modules()
         self.configure_coroutines()
+        self.configure_blocks()
+        self.configure_objc_arc()
         self.configure_substitutions()
         self.configure_features()
 
@@ -987,6 +990,16 @@
             if intMacroValue(macros['__cpp_coroutines']) >= 201703:
                 self.config.available_features.add('fcoroutines-ts')
 
+    def configure_blocks(self):
+        if self.cxx.hasCompileFlag('-fblocks'):
+            self.config.available_features.add('has-fblocks')
+
+    def configure_objc_arc(self):
+        cxx = copy.deepcopy(self.cxx)
+        cxx.source_lang = 'objective-c++'
+        if cxx.hasCompileFlag('-fobjc-arc'):
+            self.config.available_features.add('has-fobjc-arc')
+
     def configure_modules(self):
         modules_flags = ['-fmodules']
         if not self.target_info.is_darwin():