OSDN Git Service

[lit] Fix several Python 2/3 compatibility issues and tests
authorAaron Smith <aaron.smith@microsoft.com>
Sat, 7 Apr 2018 00:21:28 +0000 (00:21 +0000)
committerAaron Smith <aaron.smith@microsoft.com>
Sat, 7 Apr 2018 00:21:28 +0000 (00:21 +0000)
- In Python 2.x, basestring is the base string type, but in
  Python 3.x basestring is not defined and instead str includes
  unicode strings.

- When Python is in a path that includes spaces, it needs to
  be specified with quotes in the test files for it to run.

- The cache.ll test relies on files of a specific size being
  created by Python, but on some versions of Windows the
  files that are created by the current code are one byte
  larger than expected. To fix the test, update file creation
  to always make files of the expected size.

Patch by Stella Stamenova!

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

test/Other/opt-bisect-legacy-pass-manager.ll
test/ThinLTO/X86/cache.ll
utils/lit/lit/TestRunner.py

index bf89e80..560675e 100644 (file)
@@ -38,7 +38,7 @@
 ; utils/bisect) to locate the optimization that inlines the call to
 ; f2() in f3().
 
-; RUN: %python %S/opt-bisect-helper.py --start=0 --end=256 --optcmd=opt \
+; RUN: '%python' %S/opt-bisect-helper.py --start=0 --end=256 --optcmd=opt \
 ; RUN:         --filecheckcmd=FileCheck --test=%s \
 ; RUN:         --prefix=CHECK-BISECT-INLINE-HELPER \
 ; RUN:         | FileCheck %s --check-prefix=CHECK-BISECT-INLINE-RESULT
index f3fcaf3..6fddfb6 100644 (file)
 ; RUN: rm -Rf %t.cache && mkdir %t.cache
 ; Create cache files with different sizes.
 ; Only 8B, 16B and 76B files should stay after pruning.
-; RUN: %python -c "print(' ' * 1023)" > %t.cache/llvmcache-foo-1024
-; RUN: %python -c "print(' ' * 15)" > %t.cache/llvmcache-foo-16
-; RUN: %python -c "print(' ' * 7)" > %t.cache/llvmcache-foo-8
-; RUN: %python -c "print(' ' * 75)" > %t.cache/llvmcache-foo-76
-; RUN: %python -c "print(' ' * 76)" > %t.cache/llvmcache-foo-77
+; RUN: "%python" -c "with open(r'%t.cache/llvmcache-foo-1024', 'w') as file: file.truncate(1024)"
+; RUN: "%python" -c "with open(r'%t.cache/llvmcache-foo-16', 'w') as file: file.truncate(16)"
+; RUN: "%python" -c "with open(r'%t.cache/llvmcache-foo-8', 'w') as file: file.truncate(8)"
+; RUN: "%python" -c "with open(r'%t.cache/llvmcache-foo-76', 'w') as file: file.truncate(76)"
+; RUN: "%python" -c "with open(r'%t.cache/llvmcache-foo-77', 'w') as file: file.truncate(77)"
 ; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-bytes 100
 ; RUN: ls %t.cache/llvmcache-foo-16
 ; RUN: ls %t.cache/llvmcache-foo-8
 ; RUN: rm -Rf %t.cache && mkdir %t.cache
 ; Create cache files with different sizes.
 ; Only 8B and 16B files should stay after pruning.
-; RUN: %python -c "print(' ' * 1023)" > %t.cache/llvmcache-foo-1024
-; RUN: %python -c "print(' ' * 15)" > %t.cache/llvmcache-foo-16
-; RUN: %python -c "print(' ' * 7)" > %t.cache/llvmcache-foo-8
-; RUN: %python -c "print(' ' * 75)" > %t.cache/llvmcache-foo-76
-; RUN: %python -c "print(' ' * 76)" > %t.cache/llvmcache-foo-77
+; RUN: "%python" -c "print(' ' * 1023)" > %t.cache/llvmcache-foo-1024
+; RUN: "%python" -c "print(' ' * 15)" > %t.cache/llvmcache-foo-16
+; RUN: "%python" -c "print(' ' * 7)" > %t.cache/llvmcache-foo-8
+; RUN: "%python" -c "print(' ' * 75)" > %t.cache/llvmcache-foo-76
+; RUN: "%python" -c "print(' ' * 76)" > %t.cache/llvmcache-foo-77
 ; RUN: llvm-lto -thinlto-action=run -exported-symbol=globalfunc %t2.bc %t.bc -thinlto-cache-dir %t.cache --thinlto-cache-max-size-files 2
 ; RUN: ls %t.cache/llvmcache-foo-16
 ; RUN: ls %t.cache/llvmcache-foo-8
index 5eecb80..bfd1596 100644 (file)
@@ -845,8 +845,14 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper):
 
         # Replace uses of /dev/null with temporary files.
         if kAvoidDevNull:
+            # In Python 2.x, basestring is the base class for all string (including unicode)
+            # In Python 3.x, basestring no longer exist and str is always unicode
+            try:
+                str_type = basestring
+            except NameError:
+                str_type = str
             for i,arg in enumerate(args):
-                if isinstance(arg, basestring) and kDevNull in arg:
+                if isinstance(arg, str_type) and kDevNull in arg:
                     f = tempfile.NamedTemporaryFile(delete=False)
                     f.close()
                     named_temp_files.append(f.name)