diff --git a/llvm/test/lit.cfg b/llvm/test/lit.cfg index ef56473af587..af0433723282 100644 --- a/llvm/test/lit.cfg +++ b/llvm/test/lit.cfg @@ -12,6 +12,9 @@ config.name = 'LLVM' # testFormat: The test format to use to interpret tests. config.test_format = lit.formats.TclTest() +# To ignore test output on stderr so it doesn't trigger failures uncomment this: +#config.test_format = lit.formats.TclTest(ignoreStdErr=True) + # suffixes: A list of file extensions to treat as test files, this is actually # set by on_clone(). config.suffixes = [] diff --git a/llvm/utils/lit/lit/LitConfig.py b/llvm/utils/lit/lit/LitConfig.py index bda91744cce3..2cc278111991 100644 --- a/llvm/utils/lit/lit/LitConfig.py +++ b/llvm/utils/lit/lit/LitConfig.py @@ -20,7 +20,7 @@ class LitConfig: def __init__(self, progname, path, quiet, useValgrind, valgrindLeakCheck, valgrindArgs, useTclAsSh, - noExecute, debug, isWindows, + noExecute, ignoreStdErr, debug, isWindows, params): # The name of the test runner. self.progname = progname @@ -32,6 +32,7 @@ class LitConfig: self.valgrindUserArgs = list(valgrindArgs) self.useTclAsSh = bool(useTclAsSh) self.noExecute = noExecute + self.ignoreStdErr = ignoreStdErr self.debug = debug self.isWindows = bool(isWindows) self.params = dict(params) diff --git a/llvm/utils/lit/lit/TestFormats.py b/llvm/utils/lit/lit/TestFormats.py index 6dda2fdb608d..d1c0558b5f37 100644 --- a/llvm/utils/lit/lit/TestFormats.py +++ b/llvm/utils/lit/lit/TestFormats.py @@ -125,7 +125,11 @@ class ShTest(FileBasedTest): self.execute_external) class TclTest(FileBasedTest): + def __init__(self, ignoreStdErr=False): + self.ignoreStdErr = ignoreStdErr + def execute(self, test, litConfig): + litConfig.ignoreStdErr = self.ignoreStdErr return TestRunner.executeTclTest(test, litConfig) ### diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index a40644cd187d..0cc1f394d47e 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -535,13 +535,13 @@ def executeTclTest(test, litConfig): # considered to fail if there is any standard error output. out,err,exitCode = res if isXFail: - ok = exitCode != 0 or err + ok = exitCode != 0 or err and not litConfig.ignoreStdErr if ok: status = Test.XFAIL else: status = Test.XPASS else: - ok = exitCode == 0 and not err + ok = exitCode == 0 and (not err or litConfig.ignoreStdErr) if ok: status = Test.PASS else: @@ -552,7 +552,7 @@ def executeTclTest(test, litConfig): # Set a flag for formatTestOutput so it can explain why the test was # considered to have failed, despite having an exit code of 0. - failDueToStderr = exitCode == 0 and err + failDueToStderr = exitCode == 0 and err and not litConfig.ignoreStdErr return formatTestOutput(status, out, err, exitCode, failDueToStderr, script) diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py index 13d263009ddd..e1a380c3fcbc 100755 --- a/llvm/utils/lit/lit/main.py +++ b/llvm/utils/lit/lit/main.py @@ -328,6 +328,7 @@ def load_test_suite(inputs): valgrindArgs = [], useTclAsSh = False, noExecute = False, + ignoreStdErr = False, debug = False, isWindows = (platform.system()=='Windows'), params = {}) @@ -485,6 +486,7 @@ def main(builtinParameters = {}): # Bump the GIL check interval, its more imp valgrindArgs = opts.valgrindArgs, useTclAsSh = opts.useTclAsSh, noExecute = opts.noExecute, + ignoreStdErr = False, debug = opts.debug, isWindows = (platform.system()=='Windows'), params = userParams)