summaryrefslogtreecommitdiffstats
path: root/libcxx/utils
diff options
context:
space:
mode:
authorErik Pilkington <erik.pilkington@gmail.com>2017-05-19 23:02:49 +0000
committerErik Pilkington <erik.pilkington@gmail.com>2017-05-19 23:02:49 +0000
commit0de31c7e531a154e401cf0e639e78bdd76a06f6d (patch)
tree3916937dd46000e2b724d6344aa0483a34176429 /libcxx/utils
parent631a0bb92470e9d935cbc8b2c4b75d9934646ff3 (diff)
downloadbcm5719-llvm-0de31c7e531a154e401cf0e639e78bdd76a06f6d.tar.gz
bcm5719-llvm-0de31c7e531a154e401cf0e639e78bdd76a06f6d.zip
[test] Add support for Objective-C++ tests
Differential revision: https://reviews.llvm.org/D33049 llvm-svn: 303466
Diffstat (limited to 'libcxx/utils')
-rw-r--r--libcxx/utils/libcxx/compiler.py3
-rw-r--r--libcxx/utils/libcxx/test/config.py6
-rw-r--r--libcxx/utils/libcxx/test/format.py22
3 files changed, 27 insertions, 4 deletions
diff --git a/libcxx/utils/libcxx/compiler.py b/libcxx/utils/libcxx/compiler.py
index 983bc26c80b..e908e26089b 100644
--- a/libcxx/utils/libcxx/compiler.py
+++ b/libcxx/utils/libcxx/compiler.py
@@ -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):
diff --git a/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py
index 25553c70da3..2118f9c7eb9 100644
--- a/libcxx/utils/libcxx/test/config.py
+++ b/libcxx/utils/libcxx/test/config.py
@@ -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:
diff --git a/libcxx/utils/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py
index 3ac5472b472..317fc8079bb 100644
--- a/libcxx/utils/libcxx/test/format.py
+++ b/libcxx/utils/libcxx/test/format.py
@@ -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):
OpenPOWER on IntegriCloud