]> granicus.if.org Git - clang/commitdiff
MultiTestRunner: Reenable --vg option.
authorDaniel Dunbar <daniel@zuster.org>
Wed, 29 Jul 2009 02:57:25 +0000 (02:57 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 29 Jul 2009 02:57:25 +0000 (02:57 +0000)
 - Simplified from before and using --error-exitcode so failures show up as
   failures.

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

utils/test/MultiTestRunner.py
utils/test/TestRunner.py

index 8b48d8d6c751443474038993795e3bf5d375526b..3ac40e15c13a1f33fbc1cb81532e8cffd86ecbba 100755 (executable)
@@ -9,6 +9,10 @@ TODO
  - Use a timeout / ulimit
  - Detect signaled failures (abort)
  - Better support for finding tests
+
+ - Support "disabling" tests? The advantage of making this distinct from XFAIL
+   is it makes it more obvious that it is a temporary measure (and MTR can put
+   in a separate category).
 """
 
 # TOD
@@ -157,7 +161,8 @@ class Tester(threading.Thread):
             else:
                 startTime = time.time()
                 code, output = TestRunner.runOneTest(path, base, 
-                                                     opts.clang, opts.clangcc)
+                                                     opts.clang, opts.clangcc,
+                                                     opts.useValgrind)
                 elapsed = time.time() - startTime
         except KeyboardInterrupt:
             # This is a sad hack. Unfortunately subprocess goes
@@ -242,9 +247,6 @@ def main():
 
     if not args:
         parser.error('No inputs specified')
-    if opts.useValgrind:
-        parser.error('Support for running with valgrind is '
-                     'temporarily disabled')
 
     # FIXME: Move into configuration object.
     TestRunner.kChildEnv["PATH"] = os.pathsep.join(opts.path + 
index 9aae55cedeb6d9c9ee57b77b628777d000a9e749..854d60bb408d4773dca3c1fe7caef9f73bc02c8b 100755 (executable)
@@ -57,7 +57,7 @@ def mkdir_p(path):
             if e.errno != errno.EEXIST:
                 raise
 
-def executeScript(script, commands, cwd):
+def executeScript(script, commands, cwd, useValgrind):
     # Write script file
     f = open(script,'w')
     if kSystemName == 'Windows':
@@ -71,6 +71,12 @@ def executeScript(script, commands, cwd):
         command = ['cmd','/c', script]
     else:
         command = ['/bin/sh', script]
+        if useValgrind:
+            # FIXME: Running valgrind on sh is overkill. We probably could just
+            # ron on clang with no real loss.
+            command = ['valgrind', '-q',
+                       '--tool=memcheck', '--leak-check=no', '--trace-children=yes',
+                       '--error-exitcode=123'] + command
 
     p = subprocess.Popen(command, cwd=cwd,
                          stdin=subprocess.PIPE,
@@ -87,7 +93,7 @@ def executeScript(script, commands, cwd):
     return out, err, exitCode
 
 import StringIO
-def runOneTest(testPath, tmpBase, clang, clangcc):
+def runOneTest(testPath, tmpBase, clang, clangcc, useValgrind):
     # Make paths absolute.
     tmpBase = os.path.abspath(tmpBase)
     testPath = os.path.abspath(testPath)
@@ -149,7 +155,8 @@ def runOneTest(testPath, tmpBase, clang, clangcc):
         scriptLines[i] = ln[:-2]
 
     out, err, exitCode = executeScript(script, scriptLines, 
-                                       cwd=os.path.dirname(testPath))
+                                       os.path.dirname(testPath),
+                                       useValgrind)
     if xfailLines:
         ok = exitCode != 0
         status = (TestStatus.XPass, TestStatus.XFail)[ok]