[lit] Fix bug when using Python3 where a failing test would not show
authorDan Liew <dan@su-root.co.uk>
Thu, 19 Nov 2015 11:35:42 +0000 (11:35 +0000)
committerDan Liew <dan@su-root.co.uk>
Thu, 19 Nov 2015 11:35:42 +0000 (11:35 +0000)
the script when running a ShTest with an external or internal shell.

This bug is caused by use of the ``map`` function in Python 3 which
returns an iterable (rather than a list in Python 2). After the iterable
is exhausted it won't return any more output and consequently when
``_runShTest()`` tries to access the ``script`` which has already been
iterated over it is empty. Converting to a list immediatley after
calling ``map()`` fixes this.

This fixes the ``tests/shtest-format.py`` test when running under
Python3 which was previously failing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253556 91177308-0d34-0410-b5e6-96231b3b80d8

utils/lit/lit/TestRunner.py

index 19e2514f7c0df21ff4e8a3b0376294c2e359d43a..37e0dd35340d3e01e7453a3bd4acec6feb4759aa 100644 (file)
@@ -469,7 +469,9 @@ def applySubstitutions(script, substitutions):
 
         # Strip the trailing newline and any extra whitespace.
         return ln.strip()
 
         # Strip the trailing newline and any extra whitespace.
         return ln.strip()
-    return map(processLine, script)
+    # Note Python 3 map() gives an iterator rather than a list so explicitly
+    # convert to list before returning.
+    return list(map(processLine, script))
 
 def parseIntegratedTestScript(test, require_script=True):
     """parseIntegratedTestScript - Scan an LLVM/Clang style integrated test
 
 def parseIntegratedTestScript(test, require_script=True):
     """parseIntegratedTestScript - Scan an LLVM/Clang style integrated test