From: Daniel Dunbar Date: Wed, 29 Jul 2009 02:57:25 +0000 (+0000) Subject: MultiTestRunner: Reenable --vg option. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a676b7544b4670bdefbe594b08926d5618d4559;p=clang MultiTestRunner: Reenable --vg option. - 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 --- diff --git a/utils/test/MultiTestRunner.py b/utils/test/MultiTestRunner.py index 8b48d8d6c7..3ac40e15c1 100755 --- a/utils/test/MultiTestRunner.py +++ b/utils/test/MultiTestRunner.py @@ -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 + diff --git a/utils/test/TestRunner.py b/utils/test/TestRunner.py index 9aae55cede..854d60bb40 100755 --- a/utils/test/TestRunner.py +++ b/utils/test/TestRunner.py @@ -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]