diff --git a/libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg b/libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg deleted file mode 100644 --- a/libcxx/test/libcxx/selftest/fail.cpp/lit.local.cfg +++ /dev/null @@ -1,6 +0,0 @@ -import libcxx.test.format - -# The tests in this directory need to know whether Clang-verify is supported -# to work properly. -if libcxx.test.format._supportsVerify(config): - config.available_features.add('verify-support') diff --git a/libcxx/utils/libcxx/test/dsl.py b/libcxx/utils/libcxx/test/dsl.py --- a/libcxx/utils/libcxx/test/dsl.py +++ b/libcxx/utils/libcxx/test/dsl.py @@ -12,6 +12,7 @@ import platform import re import shutil +import subprocess import tempfile import libcxx.test.format @@ -168,6 +169,21 @@ ]) return exitCode == 0 +@_memoizeExpensiveOperation(lambda c: (c.substitutions, c.environment)) +def supportsVerify(config): + """ + Determine whether clang-verify is supported by the given configuration. + + This is done by checking whether the %{cxx} substitution in that + configuration supports certain compiler flags. + """ + command = "%{{cxx}} -xc++ {} -Werror -fsyntax-only -Xclang -verify-ignore-unexpected".format(os.devnull) + command = lit.TestRunner.applySubstitutions([command], config.substitutions, + recursion_limit=config.recursiveExpansionLimit)[0] + devNull = open(os.devnull, 'w') + result = subprocess.call(command, shell=True, stdout=devNull, stderr=devNull) + return result == 0 + @_memoizeExpensiveOperation(lambda c, s: (c.substitutions, c.environment, s)) def runScriptExitCode(config, script): """ diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py --- a/libcxx/utils/libcxx/test/features.py +++ b/libcxx/utils/libcxx/test/features.py @@ -41,6 +41,7 @@ Feature(name='has-fobjc-arc', when=lambda cfg: hasCompileFlag(cfg, '-xobjective-c++ -fobjc-arc') and sys.platform.lower().strip() == 'darwin'), # TODO: this doesn't handle cross-compiling to Apple platforms. Feature(name='objective-c++', when=lambda cfg: hasCompileFlag(cfg, '-xobjective-c++ -fobjc-arc')), + Feature(name='verify-support', when=lambda cfg: supportsVerify(cfg)), Feature(name='non-lockfree-atomics', when=lambda cfg: sourceBuilds(cfg, """ diff --git a/libcxx/utils/libcxx/test/format.py b/libcxx/utils/libcxx/test/format.py --- a/libcxx/utils/libcxx/test/format.py +++ b/libcxx/utils/libcxx/test/format.py @@ -12,21 +12,6 @@ import pipes import re import shutil -import subprocess - -def _supportsVerify(config): - """ - Determine whether clang-verify is supported by the given configuration. - - This is done by checking whether the %{cxx} substitution in that - configuration supports certain compiler flags. - """ - command = "%{{cxx}} -xc++ {} -Werror -fsyntax-only -Xclang -verify-ignore-unexpected".format(os.devnull) - command = lit.TestRunner.applySubstitutions([command], config.substitutions, - recursion_limit=config.recursiveExpansionLimit)[0] - devNull = open(os.devnull, 'w') - result = subprocess.call(command, shell=True, stdout=devNull, stderr=devNull) - return result == 0 def _getTempPaths(test): """ @@ -216,7 +201,7 @@ def execute(self, test, litConfig): VERIFY_FLAGS = '-Xclang -verify -Xclang -verify-ignore-unexpected=note -ferror-limit=0' - supportsVerify = _supportsVerify(test.config) + supportsVerify = 'verify-support' in test.config.available_features filename = test.path_in_suite[-1] # TODO(ldionne): We currently disable tests that re-define _LIBCPP_ASSERT