Lit option for ignoring stderr output.

This is useful for testing a build a temporarily hand instrumented
build.
Patch by arrowdodger!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138804 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/lit.cfg b/test/lit.cfg
index ef56473..af04337 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -12,6 +12,9 @@
 # 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/utils/lit/lit/LitConfig.py b/utils/lit/lit/LitConfig.py
index bda9174..2cc2781 100644
--- a/utils/lit/lit/LitConfig.py
+++ b/utils/lit/lit/LitConfig.py
@@ -20,7 +20,7 @@
     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 @@
         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/utils/lit/lit/TestFormats.py b/utils/lit/lit/TestFormats.py
index 6dda2fd..d1c0558 100644
--- a/utils/lit/lit/TestFormats.py
+++ b/utils/lit/lit/TestFormats.py
@@ -125,7 +125,11 @@
                                         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/utils/lit/lit/TestRunner.py b/utils/lit/lit/TestRunner.py
index a40644c..0cc1f394 100644
--- a/utils/lit/lit/TestRunner.py
+++ b/utils/lit/lit/TestRunner.py
@@ -535,13 +535,13 @@
     # 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 @@
 
     # 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/utils/lit/lit/main.py b/utils/lit/lit/main.py
index 13d2630..e1a380c 100755
--- a/utils/lit/lit/main.py
+++ b/utils/lit/lit/main.py
@@ -328,6 +328,7 @@
                                     valgrindArgs = [],
                                     useTclAsSh = False,
                                     noExecute = False,
+                                    ignoreStdErr = False,
                                     debug = False,
                                     isWindows = (platform.system()=='Windows'),
                                     params = {})
@@ -485,6 +486,7 @@
                                     valgrindArgs = opts.valgrindArgs,
                                     useTclAsSh = opts.useTclAsSh,
                                     noExecute = opts.noExecute,
+                                    ignoreStdErr = False,
                                     debug = opts.debug,
                                     isWindows = (platform.system()=='Windows'),
                                     params = userParams)