From 92bbf96c970587d3847655552f1d998c53873634 Mon Sep 17 00:00:00 2001 From: Ivan Krasin Date: Fri, 2 Sep 2016 22:31:24 +0000 Subject: [PATCH] lit: print process output, if getting the list of google-tests failed. Summary: This is a follow up to r280455, where a check for the process exit code was introduced. Some ASAN bots throw this error now, but it's impossible to understand what's wrong with them, and the issue is not reproducible. Reviewers: vitalybuka Differential Revision: https://reviews.llvm.org/D24210 llvm-svn: 280550 --- llvm/utils/lit/lit/formats/googletest.py | 9 +++++---- llvm/utils/lit/lit/util.py | 8 ++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/llvm/utils/lit/lit/formats/googletest.py b/llvm/utils/lit/lit/formats/googletest.py index 8796eb5af222..0cfe964d6559 100644 --- a/llvm/utils/lit/lit/formats/googletest.py +++ b/llvm/utils/lit/lit/formats/googletest.py @@ -1,5 +1,6 @@ from __future__ import absolute_import import os +import subprocess import sys import lit.Test @@ -34,9 +35,10 @@ class GoogleTest(TestFormat): if kIsWindows: lines = lines.replace('\r', '') lines = lines.split('\n') - except: - litConfig.error("unable to discover google-tests in %r: %s" - % (path, sys.exc_info()[1])) + except Exception as exc: + out = exc.output if isinstance(exc, subprocess.CalledProcessError) else '' + litConfig.error("unable to discover google-tests in %r: %s. Process output: %s" + % (path, sys.exc_info()[1], out)) raise StopIteration nested_tests = [] @@ -136,4 +138,3 @@ class GoogleTest(TestFormat): return lit.Test.UNRESOLVED, msg return lit.Test.PASS,'' - diff --git a/llvm/utils/lit/lit/util.py b/llvm/utils/lit/lit/util.py index 288931a10ab9..b458a94fc1d4 100644 --- a/llvm/utils/lit/lit/util.py +++ b/llvm/utils/lit/lit/util.py @@ -69,9 +69,13 @@ def capture(args, env=None): exits with a non-zero status.""" p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - out,_ = p.communicate() + out, err = p.communicate() + out = convert_string(out) + err = convert_string(err) if p.returncode != 0: - raise subprocess.CalledProcessError(cmd=args, returncode=p.returncode) + raise subprocess.CalledProcessError(cmd=args, + returncode=p.returncode, + output="{}\n{}".format(out, err)) return convert_string(out) def which(command, paths = None):