diff options
author | Zachary Turner <zturner@google.com> | 2017-06-30 16:05:03 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-06-30 16:05:03 +0000 |
commit | e9db96e6d9eb2fd03d35d884e53998861b80a178 (patch) | |
tree | c05ee8879dcddb936cc75fce51451e829d03cffb | |
parent | 0955739b36bf64c96bf55c3b49335c1a54ed1b2d (diff) | |
download | bcm5719-llvm-e9db96e6d9eb2fd03d35d884e53998861b80a178.tar.gz bcm5719-llvm-e9db96e6d9eb2fd03d35d884e53998861b80a178.zip |
Revert "[lit] Clean output directories before running tests."
This reverts commit da6318a92fba793e4f2447ec478b001392d57d43.
This is causing failures on some build bots due to what appears
to be some kind of lit ordering dependency.
llvm-svn: 306833
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp | 7 | ||||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo | bin | 1056 -> 1056 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o | bin | 3360 -> 2968 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo | bin | 1168 -> 1040 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o | bin | 3728 -> 2992 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp | 2 | ||||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp | 7 | ||||
-rwxr-xr-x | llvm/test/DebugInfo/Inputs/split-dwarf-test | bin | 9624 -> 9208 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo | bin | 1088 -> 1377 bytes | |||
-rw-r--r-- | llvm/test/DebugInfo/llvm-symbolizer.test | 8 | ||||
-rw-r--r-- | llvm/test/Other/lit-globbing.ll | 56 | ||||
-rw-r--r-- | llvm/test/Unit/lit.cfg | 8 | ||||
-rw-r--r-- | llvm/utils/lit/lit/Test.py | 16 | ||||
-rw-r--r-- | llvm/utils/lit/lit/TestRunner.py | 54 | ||||
-rw-r--r-- | llvm/utils/lit/lit/run.py | 20 |
15 files changed, 74 insertions, 104 deletions
diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp b/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp deleted file mode 100644 index d7361f475a2..00000000000 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp +++ /dev/null @@ -1,7 +0,0 @@ -void f1(); -__attribute__((always_inline)) void f2() { - f1(); -} -void f3() { - f2(); -} diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo b/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo Binary files differindex 44bdaf4bffe..2a3bc57caa6 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o b/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o Binary files differindex 540302785c2..b6993c6cae2 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo Binary files differindex 94cc3e9d0f7..4df9894b089 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o Binary files differindex dd0cda4a8ff..aa4ab4bc76f 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp deleted file mode 100644 index 9bed4bf8b5e..00000000000 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp +++ /dev/null @@ -1,2 +0,0 @@ -extern int i; -int i; diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp b/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp deleted file mode 100644 index 1d17cf38037..00000000000 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp +++ /dev/null @@ -1,7 +0,0 @@ -void f1(); -inline __attribute__((always_inline)) void f2() { - f1(); -} -void f3() { - f2(); -} diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-test b/llvm/test/DebugInfo/Inputs/split-dwarf-test Binary files differindex 0e9d4c880bb..4d6aa0cd98a 100755 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-test +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-test diff --git a/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo b/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo Binary files differindex fb5eb9c0ffa..588374d7d21 100644 --- a/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo +++ b/llvm/test/DebugInfo/Inputs/split-dwarf-test.dwo diff --git a/llvm/test/DebugInfo/llvm-symbolizer.test b/llvm/test/DebugInfo/llvm-symbolizer.test index 49da075a451..2c64804659f 100644 --- a/llvm/test/DebugInfo/llvm-symbolizer.test +++ b/llvm/test/DebugInfo/llvm-symbolizer.test @@ -20,8 +20,8 @@ RUN: echo "%p/Inputs/llvm-symbolizer-dwo-test 0x400514" >> %t.input RUN: echo "%p/Inputs/fission-ranges.elf-x86_64 0x720" >> %t.input RUN: echo "%p/Inputs/arange-overlap.elf-x86_64 0x714" >> %t.input RUN: cp %p/Inputs/split-dwarf-test.dwo %T -RUN: echo "%p/Inputs/split-dwarf-test 0x400504" >> %t.input -RUN: echo "%p/Inputs/split-dwarf-test 0x4004f0" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test 0x4005d4" >> %t.input +RUN: echo "%p/Inputs/split-dwarf-test 0x4005c4" >> %t.input RUN: echo "%p/Inputs/cross-cu-inlining.x86_64-macho.o 0x17" >> %t.input RUN: cp %p/Inputs/split-dwarf-multiple-cu.dwo %T RUN: echo "%p/Inputs/split-dwarf-multiple-cu.o 0x4" >> %t.input @@ -141,9 +141,9 @@ CHECK-NEXT: main CHECK-NEXT: /tmp{{[/\\]}}cross-cu-inlining.c:11:0 CHECK: f2 -CHECK-NEXT: split-dwarf-multiple-cu2.cpp:3:3 +CHECK-NEXT: b.cpp:3:3 CHECK-NEXT: f3 -CHECK-NEXT: split-dwarf-multiple-cu2.cpp:6:0 +CHECK-NEXT: b.cpp:6:0 CHECK: f2 CHECK-NEXT: split-dwarf-addr-object-relocation.cpp:3:3 diff --git a/llvm/test/Other/lit-globbing.ll b/llvm/test/Other/lit-globbing.ll index b60510ab8b2..5a668a90a40 100644 --- a/llvm/test/Other/lit-globbing.ll +++ b/llvm/test/Other/lit-globbing.ll @@ -1,28 +1,28 @@ -RUN: echo XXA > %T/XXA.txt -RUN: echo XXB > %T/XXB.txt -RUN: echo XXAB > %T/XXAB.txt - -RUN: echo %T/XXA* | FileCheck -check-prefix=STAR %s -RUN: echo %T/'XXA'* | FileCheck -check-prefix=STAR %s -RUN: echo %T/XX'A'* | FileCheck -check-prefix=STAR %s - -RUN: echo %T/XX?.txt | FileCheck -check-prefix=QUESTION %s -RUN: echo %T/'XX'?.txt | FileCheck -check-prefix=QUESTION %s - -RUN: echo %T/XX??.txt | FileCheck -check-prefix=QUESTION2 %s -RUN: echo %T/'XX'??.txt | FileCheck -check-prefix=QUESTION2 %s - -RUN: echo 'XX*' 'XX?.txt' 'XX??.txt' | FileCheck -check-prefix=QUOTEDARGS %s - -STAR-NOT: XXB.txt -STAR: {{(XXA.txt.*XXAB.txt|XXAB.txt.*XXA.txt)}} - -QUESTION-NOT: XXAB.txt -QUESTION: {{(XXA.txt.*XXB.txt|XXB.txt.*XXA.txt)}} - -QUESTION2-NOT: XXA.txt -QUESTION2-NOT: XXB.txt -QUESTION2: XXAB.txt - -QUOTEDARGS-NOT: .txt -QUOTEDARGS: XX* XX?.txt XX??.txt +RUN: echo TA > %T/TA.txt
+RUN: echo TB > %T/TB.txt
+RUN: echo TAB > %T/TAB.txt
+
+RUN: echo %T/TA* | FileCheck -check-prefix=STAR %s
+RUN: echo %T/'TA'* | FileCheck -check-prefix=STAR %s
+RUN: echo %T/T'A'* | FileCheck -check-prefix=STAR %s
+
+RUN: echo %T/T?.txt | FileCheck -check-prefix=QUESTION %s
+RUN: echo %T/'T'?.txt | FileCheck -check-prefix=QUESTION %s
+
+RUN: echo %T/T??.txt | FileCheck -check-prefix=QUESTION2 %s
+RUN: echo %T/'T'??.txt | FileCheck -check-prefix=QUESTION2 %s
+
+RUN: echo 'T*' 'T?.txt' 'T??.txt' | FileCheck -check-prefix=QUOTEDARGS %s
+
+STAR-NOT: TB.txt
+STAR: {{(TA.txt.*TAB.txt|TAB.txt.*TA.txt)}}
+
+QUESTION-NOT: TAB.txt
+QUESTION: {{(TA.txt.*TB.txt|TB.txt.*TA.txt)}}
+
+QUESTION2-NOT: TA.txt
+QUESTION2-NOT: TB.txt
+QUESTION2: TAB.txt
+
+QUOTEDARGS-NOT: .txt
+QUOTEDARGS: T* T?.txt T??.txt
diff --git a/llvm/test/Unit/lit.cfg b/llvm/test/Unit/lit.cfg index a3c00d6d18c..dac0bf829ba 100644 --- a/llvm/test/Unit/lit.cfg +++ b/llvm/test/Unit/lit.cfg @@ -39,11 +39,9 @@ for symbolizer in ['ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH']: config.environment[symbolizer] = os.environ[symbolizer] # Win32 seeks DLLs along %PATH%. -if sys.platform in ['win32', 'cygwin']: - shlibdir = getattr(config, 'shlibdir', None) - if shlibdir is not None and os.path.isdir(shlibdir): - config.environment['PATH'] = os.path.pathsep.join(( - config.shlibdir, config.environment['PATH'])) +if sys.platform in ['win32', 'cygwin'] and os.path.isdir(config.shlibdir): + config.environment['PATH'] = os.path.pathsep.join(( + config.shlibdir, config.environment['PATH'])) # Win32 may use %SYSTEMDRIVE% during file system shell operations, so propogate. if sys.platform == 'win32' and 'SYSTEMDRIVE' in os.environ: diff --git a/llvm/utils/lit/lit/Test.py b/llvm/utils/lit/lit/Test.py index dc82670358a..1a9e3fe80fb 100644 --- a/llvm/utils/lit/lit/Test.py +++ b/llvm/utils/lit/lit/Test.py @@ -172,7 +172,7 @@ class TestSuite: return os.path.join(self.source_root, *components) def getExecPath(self, components): - return os.path.join(self.exec_root, "Output", *components) + return os.path.join(self.exec_root, *components) class Test: """Test - Information on a single test instance.""" @@ -222,13 +222,10 @@ class Test: # Syntax error in an XFAIL line. self.result.code = UNRESOLVED self.result.output = str(e) - + def getFullName(self): return self.suite.config.name + ' :: ' + '/'.join(self.path_in_suite) - def getTestBaseName(self): - return self.path_in_suite[-1] - def getFilePath(self): if self.file_path: return self.file_path @@ -237,11 +234,8 @@ class Test: def getSourcePath(self): return self.suite.getSourcePath(self.path_in_suite) - def getTempFilePrefix(self): - return self.suite.getExecPath(self.path_in_suite) + ".tmp" - - def getTempFileDir(self): - return os.path.dirname(self.getTempFilePrefix()) + def getExecPath(self): + return self.suite.getExecPath(self.path_in_suite) def isExpectedToFail(self): """ @@ -353,7 +347,7 @@ class Test: safe_name = self.suite.name.replace(".","-") if safe_test_path: - class_name = safe_name + "." + "/".join(safe_test_path) + class_name = safe_name + "." + "/".join(safe_test_path) else: class_name = safe_name + "." + safe_name diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index e72be025308..37b03cc19f8 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -123,7 +123,7 @@ class ShellCommandResult(object): self.exitCode = exitCode self.timeoutReached = timeoutReached self.outputFiles = list(outputFiles) - + def executeShCmd(cmd, shenv, results, timeout=0): """ Wrapper around _executeShCmd that handles @@ -501,7 +501,7 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper): data = None if data is not None: output_files.append((name, path, data)) - + results.append(ShellCommandResult( cmd.commands[i], out, err, res, timeoutHelper.timeoutReached(), output_files)) @@ -573,7 +573,7 @@ def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): else: out += data out += "\n" - + if result.stdout.strip(): out += '# command output:\n%s\n' % (result.stdout,) if result.stderr.strip(): @@ -690,28 +690,37 @@ def parseIntegratedTestScriptCommands(source_path, keywords): finally: f.close() -def getDefaultSubstitutions(test, normalize_slashes=False): +def getTempPaths(test): + """Get the temporary location, this is always relative to the test suite + root, not test source root.""" + execpath = test.getExecPath() + execdir,execbase = os.path.split(execpath) + tmpDir = os.path.join(execdir, 'Output') + tmpBase = os.path.join(tmpDir, execbase) + return tmpDir, tmpBase + +def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False): sourcepath = test.getSourcePath() sourcedir = os.path.dirname(sourcepath) - tmpDir = test.getTempFileDir() - tmpPrefix = test.getTempFilePrefix() - baseName = test.getTestBaseName() # Normalize slashes, if requested. if normalize_slashes: sourcepath = sourcepath.replace('\\', '/') sourcedir = sourcedir.replace('\\', '/') tmpDir = tmpDir.replace('\\', '/') + tmpBase = tmpBase.replace('\\', '/') # We use #_MARKER_# to hide %% while we do the other substitutions. substitutions = [] substitutions.extend([('%%', '#_MARKER_#')]) substitutions.extend(test.config.substitutions) + tmpName = tmpBase + '.tmp' + baseName = os.path.basename(tmpBase) substitutions.extend([('%s', sourcepath), ('%S', sourcedir), ('%p', sourcedir), ('%{pathsep}', os.pathsep), - ('%t', tmpPrefix), + ('%t', tmpName), ('%basename_t', baseName), ('%T', tmpDir), ('#_MARKER_#', '%')]) @@ -721,7 +730,7 @@ def getDefaultSubstitutions(test, normalize_slashes=False): ('%/s', sourcepath.replace('\\', '/')), ('%/S', sourcedir.replace('\\', '/')), ('%/p', sourcedir.replace('\\', '/')), - ('%/t', tmpPrefix.replace('\\', '/')), + ('%/t', tmpBase.replace('\\', '/') + '.tmp'), ('%/T', tmpDir.replace('\\', '/')), ]) @@ -731,7 +740,7 @@ def getDefaultSubstitutions(test, normalize_slashes=False): ('%:s', re.sub(r'^(.):', r'\1', sourcepath)), ('%:S', re.sub(r'^(.):', r'\1', sourcedir)), ('%:p', re.sub(r'^(.):', r'\1', sourcedir)), - ('%:t', re.sub(r'^(.):', r'\1', tmpPrefix)), + ('%:t', re.sub(r'^(.):', r'\1', tmpBase) + '.tmp'), ('%:T', re.sub(r'^(.):', r'\1', tmpDir)), ]) else: @@ -739,7 +748,7 @@ def getDefaultSubstitutions(test, normalize_slashes=False): ('%:s', sourcepath), ('%:S', sourcedir), ('%:p', sourcedir), - ('%:t', tmpPrefix), + ('%:t', tmpBase + '.tmp'), ('%:T', tmpDir), ]) return substitutions @@ -770,7 +779,7 @@ class ParserKind(object): TAG: A keyword taking no value. Ex 'END.' COMMAND: A keyword taking a list of shell commands. Ex 'RUN:' LIST: A keyword taking a comma-separated list of values. - BOOLEAN_EXPR: A keyword taking a comma-separated list of + BOOLEAN_EXPR: A keyword taking a comma-separated list of boolean expressions. Ex 'XFAIL:' CUSTOM: A keyword with custom parsing semantics. """ @@ -942,14 +951,14 @@ def parseIntegratedTestScript(test, additional_parsers=[], IntegratedTestKeywordParser('REQUIRES:', ParserKind.BOOLEAN_EXPR, initial_value=test.requires), IntegratedTestKeywordParser('REQUIRES-ANY:', ParserKind.CUSTOM, - IntegratedTestKeywordParser._handleRequiresAny, - initial_value=test.requires), + IntegratedTestKeywordParser._handleRequiresAny, + initial_value=test.requires), IntegratedTestKeywordParser('UNSUPPORTED:', ParserKind.BOOLEAN_EXPR, initial_value=test.unsupported), IntegratedTestKeywordParser('END.', ParserKind.TAG) ] keyword_parsers = {p.keyword: p for p in builtin_parsers} - + # Install user-defined additional parsers. for parser in additional_parsers: if not isinstance(parser, IntegratedTestKeywordParser): @@ -959,7 +968,7 @@ def parseIntegratedTestScript(test, additional_parsers=[], raise ValueError("Parser for keyword '%s' already exists" % parser.keyword) keyword_parsers[parser.keyword] = parser - + # Collect the test lines from the script. sourcepath = test.getSourcePath() for line_number, command_type, ln in \ @@ -1005,8 +1014,12 @@ def parseIntegratedTestScript(test, additional_parsers=[], return script + def _runShTest(test, litConfig, useExternalSh, script, tmpBase): - execdir = os.path.dirname(test.getTempFileDir()) + # Create the output directory if it does not already exist. + lit.util.mkdir_p(os.path.dirname(tmpBase)) + + execdir = os.path.dirname(test.getExecPath()) if useExternalSh: res = executeScript(test, litConfig, tmpBase, script, execdir) else: @@ -1050,8 +1063,10 @@ def executeShTest(test, litConfig, useExternalSh, return script if litConfig.noExecute: return lit.Test.Result(Test.PASS) + + tmpDir, tmpBase = getTempPaths(test) substitutions = list(extra_substitutions) - substitutions += getDefaultSubstitutions(test, + substitutions += getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=useExternalSh) script = applySubstitutions(script, substitutions) @@ -1060,8 +1075,7 @@ def executeShTest(test, litConfig, useExternalSh, if hasattr(test.config, 'test_retry_attempts'): attempts += test.config.test_retry_attempts for i in range(attempts): - res = _runShTest(test, litConfig, useExternalSh, script, - test.getTempFilePrefix()) + res = _runShTest(test, litConfig, useExternalSh, script, tmpBase) if res.code != Test.FAIL: break # If we had to run the test more than once, count it as a flaky pass. These diff --git a/llvm/utils/lit/lit/run.py b/llvm/utils/lit/lit/run.py index bdaf1415a1c..1290c142c83 100644 --- a/llvm/utils/lit/lit/run.py +++ b/llvm/utils/lit/lit/run.py @@ -1,5 +1,4 @@ import os -import shutil import sys import threading import time @@ -75,25 +74,6 @@ class Run(object): if not self.tests or jobs == 0: return - # Create fresh output directories for each test we're going to run. - # This guarantees that test runs will not remnants of previous test - # runs' output. - clean_paths = set() - for test in self.tests: - clean_paths.add(os.path.normpath(test.getTempFileDir())) - clean_paths = list(clean_paths) - # Sort by number of path components, to ensure that parent directories - # get deleted and re-created before child directories. - clean_paths.sort(key=lambda x: len(x.split(os.sep))) - for base in clean_paths: - if os.path.exists(base): - if not os.path.islink(base) and os.path.isdir(base): - shutil.rmtree(base, True) - else: - os.unlink(os.path) - if not os.path.exists(base): - lit.util.mkdir_p(base) - # Set up semaphores to limit parallelism of certain classes of tests. # For example, some ASan tests require lots of virtual memory and run # faster with less parallelism on OS X. |