lit: print process output, if getting the list of google-tests failed.
authorIvan Krasin <krasin@chromium.org>
Fri, 2 Sep 2016 22:31:24 +0000 (22:31 +0000)
committerIvan Krasin <krasin@chromium.org>
Fri, 2 Sep 2016 22:31:24 +0000 (22:31 +0000)
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
llvm/utils/lit/lit/util.py

index 8796eb5af222881c33484d15eaa5dc70dd3e2e1b..0cfe964d65591567ea353ddb9e2ed15b9341e11f 100644 (file)
@@ -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,''
-
index 288931a10ab9e4a31c09a5c711d5698adfce2a07..b458a94fc1d4b57ce2ddcf06e8e31c8808498a7d 100644 (file)
@@ -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):