[llvm] r306833 - Revert "[lit] Clean output directories before running tests."

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 30 09:05:03 PDT 2017


Author: zturner
Date: Fri Jun 30 09:05:03 2017
New Revision: 306833

URL: http://llvm.org/viewvc/llvm-project?rev=306833&view=rev
Log:
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.

Removed:
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp
Modified:
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test
    llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test.dwo
    llvm/trunk/test/DebugInfo/llvm-symbolizer.test
    llvm/trunk/test/Other/lit-globbing.ll
    llvm/trunk/test/Unit/lit.cfg
    llvm/trunk/utils/lit/lit/Test.py
    llvm/trunk/utils/lit/lit/TestRunner.py
    llvm/trunk/utils/lit/lit/run.py

Removed: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp?rev=306832&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp (original)
+++ llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.cpp (removed)
@@ -1,7 +0,0 @@
-void f1();
-__attribute__((always_inline)) void f2() {
-  f1();
-}
-void f3() {
-  f2();
-}

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo (original) and llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.dwo Fri Jun 30 09:05:03 2017 differ

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o (original) and llvm/trunk/test/DebugInfo/Inputs/split-dwarf-addr-object-relocation.o Fri Jun 30 09:05:03 2017 differ

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo (original) and llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.dwo Fri Jun 30 09:05:03 2017 differ

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o (original) and llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu.o Fri Jun 30 09:05:03 2017 differ

Removed: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp?rev=306832&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp (original)
+++ llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu1.cpp (removed)
@@ -1,2 +0,0 @@
-extern int i;
-int i;

Removed: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp?rev=306832&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp (original)
+++ llvm/trunk/test/DebugInfo/Inputs/split-dwarf-multiple-cu2.cpp (removed)
@@ -1,7 +0,0 @@
-void f1();
-inline __attribute__((always_inline)) void f2() {
-  f1();
-}
-void f3() {
-  f2();
-}

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files - no diff available.

Modified: llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test.dwo
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Inputs/split-dwarf-test.dwo?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
Binary files - no diff available.

Modified: llvm/trunk/test/DebugInfo/llvm-symbolizer.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/llvm-symbolizer.test?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/llvm-symbolizer.test (original)
+++ llvm/trunk/test/DebugInfo/llvm-symbolizer.test Fri Jun 30 09:05:03 2017
@@ -20,8 +20,8 @@ RUN: echo "%p/Inputs/llvm-symbolizer-dwo
 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

Modified: llvm/trunk/test/Other/lit-globbing.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/lit-globbing.ll?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/test/Other/lit-globbing.ll (original)
+++ llvm/trunk/test/Other/lit-globbing.ll Fri Jun 30 09:05:03 2017
@@ -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

Modified: llvm/trunk/test/Unit/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Unit/lit.cfg?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/test/Unit/lit.cfg (original)
+++ llvm/trunk/test/Unit/lit.cfg Fri Jun 30 09:05:03 2017
@@ -39,11 +39,9 @@ for symbolizer in ['ASAN_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:

Modified: llvm/trunk/utils/lit/lit/Test.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/Test.py?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/Test.py (original)
+++ llvm/trunk/utils/lit/lit/Test.py Fri Jun 30 09:05:03 2017
@@ -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
 

Modified: llvm/trunk/utils/lit/lit/TestRunner.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/TestRunner.py?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/TestRunner.py (original)
+++ llvm/trunk/utils/lit/lit/TestRunner.py Fri Jun 30 09:05:03 2017
@@ -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, t
                         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, litConfi
                 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(so
     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, normal
             ('%/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, normal
                 ('%: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, normal
                 ('%: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, addi
         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, addi
             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, addi
 
     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, useEx
         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, useEx
     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

Modified: llvm/trunk/utils/lit/lit/run.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/run.py?rev=306833&r1=306832&r2=306833&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/run.py (original)
+++ llvm/trunk/utils/lit/lit/run.py Fri Jun 30 09:05:03 2017
@@ -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.




More information about the llvm-commits mailing list