[libcxx] r303466 - [test] Add support for Objective-C++ tests

Erik Pilkington via cfe-commits cfe-commits at lists.llvm.org
Fri May 19 16:02:50 PDT 2017


Author: epilk
Date: Fri May 19 18:02:49 2017
New Revision: 303466

URL: http://llvm.org/viewvc/llvm-project?rev=303466&view=rev
Log:
[test] Add support for Objective-C++ tests

Differential revision: https://reviews.llvm.org/D33049

Added:
    libcxx/trunk/test/libcxx/selftest/test.arc.fail.mm
    libcxx/trunk/test/libcxx/selftest/test.arc.pass.mm
    libcxx/trunk/test/libcxx/selftest/test.fail.mm
    libcxx/trunk/test/libcxx/selftest/test.pass.mm
Modified:
    libcxx/trunk/utils/libcxx/compiler.py
    libcxx/trunk/utils/libcxx/test/config.py
    libcxx/trunk/utils/libcxx/test/format.py

Added: libcxx/trunk/test/libcxx/selftest/test.arc.fail.mm
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/selftest/test.arc.fail.mm?rev=303466&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/selftest/test.arc.fail.mm (added)
+++ libcxx/trunk/test/libcxx/selftest/test.arc.fail.mm Fri May 19 18:02:49 2017
@@ -0,0 +1,13 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#if __has_feature(objc_arc)
+#error This test should not compile.
+#endif

Added: libcxx/trunk/test/libcxx/selftest/test.arc.pass.mm
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/selftest/test.arc.pass.mm?rev=303466&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/selftest/test.arc.pass.mm (added)
+++ libcxx/trunk/test/libcxx/selftest/test.arc.pass.mm Fri May 19 18:02:49 2017
@@ -0,0 +1,17 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#if __has_feature(objc_arc) == 0
+#error "arc should be enabled"
+#endif
+
+int main()
+{
+}

Added: libcxx/trunk/test/libcxx/selftest/test.fail.mm
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/selftest/test.fail.mm?rev=303466&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/selftest/test.fail.mm (added)
+++ libcxx/trunk/test/libcxx/selftest/test.fail.mm Fri May 19 18:02:49 2017
@@ -0,0 +1,13 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#if __has_feature(objc_arc) == 0
+#error This test should not compile.
+#endif

Added: libcxx/trunk/test/libcxx/selftest/test.pass.mm
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/selftest/test.pass.mm?rev=303466&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/selftest/test.pass.mm (added)
+++ libcxx/trunk/test/libcxx/selftest/test.pass.mm Fri May 19 18:02:49 2017
@@ -0,0 +1,17 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#if __has_feature(objc_arc)
+#error "arc should *not* be enabled"
+#endif
+
+int main()
+{
+}

Modified: libcxx/trunk/utils/libcxx/compiler.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/compiler.py?rev=303466&r1=303465&r2=303466&view=diff
==============================================================================
--- libcxx/trunk/utils/libcxx/compiler.py (original)
+++ libcxx/trunk/utils/libcxx/compiler.py Fri May 19 18:02:49 2017
@@ -24,6 +24,7 @@ class CXXCompiler(object):
                  modules_flags=None, use_modules=False,
                  use_ccache=False, use_warnings=False, compile_env=None,
                  cxx_type=None, cxx_version=None):
+        self.source_lang = 'c++'
         self.path = path
         self.flags = list(flags or [])
         self.compile_flags = list(compile_flags or [])
@@ -108,7 +109,7 @@ class CXXCompiler(object):
         if out is not None:
             cmd += ['-o', out]
         if input_is_cxx:
-            cmd += ['-x', 'c++']
+            cmd += ['-x', self.source_lang]
         if isinstance(source_files, list):
             cmd += source_files
         elif isinstance(source_files, str):

Modified: libcxx/trunk/utils/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/test/config.py?rev=303466&r1=303465&r2=303466&view=diff
==============================================================================
--- libcxx/trunk/utils/libcxx/test/config.py (original)
+++ libcxx/trunk/utils/libcxx/test/config.py Fri May 19 18:02:49 2017
@@ -466,6 +466,12 @@ class Configuration(object):
             self.config.available_features.add('glibc-%s' % maj_v)
             self.config.available_features.add('glibc-%s.%s' % (maj_v, min_v))
 
+        # Support Objective-C++ only on MacOS and if the compiler supports it.
+        if self.target_info.platform() == "darwin" and \
+           self.target_info.is_host_macosx() and \
+           self.cxx.hasCompileFlag(["-x", "objective-c++", "-fobjc-arc"]):
+            self.config.available_features.add("objective-c++")
+
     def configure_compile_flags(self):
         no_default_flags = self.get_lit_bool('no_default_flags', False)
         if not no_default_flags:

Modified: libcxx/trunk/utils/libcxx/test/format.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/test/format.py?rev=303466&r1=303465&r2=303466&view=diff
==============================================================================
--- libcxx/trunk/utils/libcxx/test/format.py (original)
+++ libcxx/trunk/utils/libcxx/test/format.py Fri May 19 18:02:49 2017
@@ -87,14 +87,22 @@ class LibcxxTestFormat(object):
         name_root, name_ext = os.path.splitext(name)
         is_libcxx_test = test.path_in_suite[0] == 'libcxx'
         is_sh_test = name_root.endswith('.sh')
-        is_pass_test = name.endswith('.pass.cpp')
-        is_fail_test = name.endswith('.fail.cpp')
-        assert is_sh_test or name_ext == '.cpp', 'non-cpp file must be sh test'
+        is_pass_test = name.endswith('.pass.cpp') or name.endswith('.pass.mm')
+        is_fail_test = name.endswith('.fail.cpp') or name.endswith('.fail.mm')
+        is_objcxx_test = name.endswith('.mm')
+        is_objcxx_arc_test = name.endswith('.arc.pass.mm') or \
+                             name.endswith('.arc.fail.mm')
+        assert is_sh_test or name_ext == '.cpp' or name_ext == '.mm', \
+            'non-cpp file must be sh test'
 
         if test.config.unsupported:
             return (lit.Test.UNSUPPORTED,
                     "A lit.local.cfg marked this unsupported")
 
+        if is_objcxx_test and not \
+           'objective-c++' in test.config.available_features:
+            return (lit.Test.UNSUPPORTED, "Objective-C++ is not supported")
+
         parsers = self._make_custom_parsers()
         script = lit.TestRunner.parseIntegratedTestScript(
             test, additional_parsers=parsers, require_script=is_sh_test)
@@ -133,6 +141,14 @@ class LibcxxTestFormat(object):
                 if '#define _LIBCPP_ASSERT' in contents:
                     test_cxx.useModules(False)
 
+        if is_objcxx_test:
+            test_cxx.source_lang = 'objective-c++'
+            if is_objcxx_arc_test:
+                test_cxx.compile_flags += ['-fobjc-arc']
+            else:
+                test_cxx.compile_flags += ['-fno-objc-arc']
+            test_cxx.link_flags += ['-framework', 'Foundation']
+
         # Dispatch the test based on its suffix.
         if is_sh_test:
             if not isinstance(self.executor, LocalExecutor):




More information about the cfe-commits mailing list