lit: Catch (internal) exceptions when using --no-sh.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77830 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/utils/test/TestRunner.py b/utils/test/TestRunner.py
index e605ef6..4279909 100755
--- a/utils/test/TestRunner.py
+++ b/utils/test/TestRunner.py
@@ -26,20 +26,13 @@
     if isinstance(cmd, ShUtil.Seq):
         if cmd.op == ';':
             res = executeShCmd(cmd.lhs, cfg, cwd, results)
-            if res is None:
-                return res
-
             return executeShCmd(cmd.rhs, cfg, cwd, results)
 
         if cmd.op == '&':
-            Util.warning("unsupported test command: '&'")
-            return None
+            raise NotImplementedError,"unsupported test command: '&'"
 
         if cmd.op == '||':
             res = executeShCmd(cmd.lhs, cfg, cwd, results)
-            if res is None:
-                return res
-
             if res != 0:
                 res = executeShCmd(cmd.rhs, cfg, cwd, results)
             return res
@@ -72,7 +65,7 @@
             elif r[0] == ('<',):
                 stdin = open(r[1], 'r')
             else:
-                return None
+                raise NotImplementedError,"Unsupported redirect: %r" % r
 
         procs.append(subprocess.Popen(j.args, cwd=cwd,
                                       stdin = stdin,
@@ -120,9 +113,14 @@
     cmd = ShUtil.ShParser(' &&\n'.join(commands)).parse()
 
     results = []
-    exitCode = executeShCmd(cmd, cfg, cwd, results)
-    if exitCode is None:
-        return None
+    try:
+        exitCode = executeShCmd(cmd, cfg, cwd, results)
+    except:
+        import traceback
+
+        out = ''
+        err = 'Exception during script execution:\n%s\n' % traceback.format_exc()
+        return out, err, 127
 
     out = err = ''
     for i,(cmd, cmd_out,cmd_err,res) in enumerate(results):