<div dir="ltr"><div>r333620 fixes it for me.  If there are more buildbot troubles, I'll take a look in the morning.<br></div><div><br></div><div>Joel<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 30, 2018 at 10:39 PM, Joel E. Denny <span dir="ltr"><<a href="mailto:jdenny.ornl@gmail.com" target="_blank">jdenny.ornl@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi Kostya,</div><div><br></div>Thanks.  It seems check-all doesn't run that.  I'll work on it.<span class="HOEnZb"><font color="#888888"><br><div><br></div><div>Joel<br></div></font></span><div><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 30, 2018 at 10:20 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi, <div><br></div><div>This change broke one of the libFuzzer tests:</div><div>ninja check-fuzzer (or just ninja fuzzer && llvm-lit -sv  ~/llvm/projects/compiler-rt/te<wbr>st/fuzzer/sigusr.test)</div><div>hangs now. </div><div><br></div><div>Reverting this change fixes the test. </div><div><br></div><div>Please take a look and either fix, revert, or suggest a fix in <span style="color:rgb(34,34,34);font-family:sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">projects/compiler-rt/test/f<wbr>uzzer/sigusr.test</span></div><div><span style="color:rgb(34,34,34);font-family:sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><br></span></div><div><span style="color:rgb(34,34,34);font-family:sans-serif;font-size:13px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">--kcc </span></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="m_-4018934803918402216HOEnZb"><div class="m_-4018934803918402216h5"><br><div class="gmail_quote"><div dir="ltr">On Wed, May 30, 2018 at 5:59 PM Joel E. Denny via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jdenny<br>
Date: Wed May 30 17:55:32 2018<br>
New Revision: 333614<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=333614&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=333614&view=rev</a><br>
Log:<br>
[lit] Report line number for failed RUN command<br>
<br>
(Relands r333584, reverted in 333592.)<br>
<br>
When debugging test failures with -vv (or -v in the case of the<br>
internal shell), this makes it easier to locate the RUN line that<br>
failed.  For example, clang's test/Driver/linux-ld.c has 892 total RUN<br>
lines, and clang's test/Driver/arm-cortex-cpus.c has 424 RUN lines<br>
after concatenation for line continuations.<br>
<br>
When reading the generated shell script, this also makes it easier to<br>
locate the RUN line that produced each command.<br>
<br>
To support reporting RUN line numbers in the case of the internal<br>
shell, this patch extends the internal shell to support the null<br>
command, ":", except pipelines are not supported.<br>
<br>
To support reporting RUN line numbers in the case of windows cmd.exe<br>
as the external shell, this patch extends -vv to set "echo on" instead<br>
of "echo off" in bat files.  (Support for windows cmd.exe as a lit<br>
external shell will likely be dropped later, but I found out too<br>
late.)<br>
<br>
Reviewed By: delcypher, asmith, stella.stamenova, jmorse, lebedev.ri, rnk<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D44598" rel="noreferrer" target="_blank">https://reviews.llvm.org/D4459<wbr>8</a><br>
<br>
Added:<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/basic.txt<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/line-continuation.txt<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/lit.local.cfg<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/basic.txt<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/line-continuation.txt<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/lit.local.cfg<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/lit.cfg<br>
    llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-shell/colon-error.<wbr>txt<br>
    llvm/trunk/utils/lit/tests/sht<wbr>est-run-at-line.py<br>
Modified:<br>
    llvm/trunk/docs/CommandGuide/l<wbr>it.rst<br>
    llvm/trunk/utils/lit/lit/TestR<wbr>unner.py<br>
    llvm/trunk/utils/lit/tests/lit<wbr>.cfg<br>
    llvm/trunk/utils/lit/tests/max<wbr>-failures.py<br>
    llvm/trunk/utils/lit/tests/sht<wbr>est-format.py<br>
    llvm/trunk/utils/lit/tests/sht<wbr>est-output-printing.py<br>
    llvm/trunk/utils/lit/tests/sht<wbr>est-shell.py<br>
    llvm/trunk/utils/lit/tests/uni<wbr>t/TestRunner.py<br>
<br>
Modified: llvm/trunk/docs/CommandGuide/l<wbr>it.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CommandGuide/lit.rst?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/docs/CommandG<wbr>uide/lit.rst?rev=333614&r1=<wbr>333613&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/docs/CommandGuide/l<wbr>it.rst (original)<br>
+++ llvm/trunk/docs/CommandGuide/l<wbr>it.rst Wed May 30 17:55:32 2018<br>
@@ -85,6 +85,10 @@ OUTPUT OPTIONS<br>
  Echo all commands to stdout, as they are being executed.<br>
  This can be valuable for debugging test failures, as the last echoed command<br>
  will be the one which has failed.<br>
+ :program:`lit` normally inserts a no-op command (``:`` in the case of bash)<br>
+ with argument ``'RUN: at line N'`` before each command pipeline, and this<br>
+ option also causes those no-op commands to be echoed to stdout to help you<br>
+ locate the source line of the failed command.<br>
  This option implies ``--verbose``.<br>
<br>
 .. option:: -a, --show-all<br>
<br>
Modified: llvm/trunk/utils/lit/lit/TestR<wbr>unner.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/TestRunner.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/lit<wbr>/TestRunner.py?rev=333614&r1=<wbr>333613&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/lit/TestR<wbr>unner.py (original)<br>
+++ llvm/trunk/utils/lit/lit/TestR<wbr>unner.py Wed May 30 17:55:32 2018<br>
@@ -40,6 +40,17 @@ kUseCloseFDs = not kIsWindows<br>
 kAvoidDevNull = kIsWindows<br>
 kDevNull = "/dev/null"<br>
<br>
+# A regex that matches %dbg(ARG), which lit inserts at the beginning of each<br>
+# run command pipeline such that ARG specifies the pipeline's source line<br>
+# number.  lit later expands each %dbg(ARG) to a command that behaves as a null<br>
+# command in the target shell so that the line number is seen in lit's verbose<br>
+# mode.<br>
+#<br>
+# This regex captures ARG.  ARG must not contain a right parenthesis, which<br>
+# terminates %dbg.  ARG must not contain quotes, in which ARG might be enclosed<br>
+# during expansion.<br>
+kPdbgRegex = '%dbg\(([^)\'"]*)\)'<br>
+<br>
 class ShellEnvironment(object):<br>
<br>
     """Mutable shell environment containing things like CWD and env vars.<br>
@@ -789,6 +800,13 @@ def _executeShCmd(cmd, shenv, results, t<br>
         results.append(cmdResult)<br>
         return cmdResult.exitCode<br>
<br>
+    if cmd.commands[0].args[0] == ':':<br>
+        if len(cmd.commands) != 1:<br>
+            raise InternalShellError(cmd.command<wbr>s[0], "Unsupported: ':' "<br>
+                                     "cannot be part of a pipeline")<br>
+        results.append(ShellCommandRes<wbr>ult(cmd.commands[0], '', '', 0, False))<br>
+        return 0;<br>
+<br>
     procs = []<br>
     default_stdin = subprocess.PIPE<br>
     stderrTempFiles = []<br>
@@ -982,7 +1000,8 @@ def _executeShCmd(cmd, shenv, results, t<br>
<br>
 def executeScriptInternal(test, litConfig, tmpBase, commands, cwd):<br>
     cmds = []<br>
-    for ln in commands:<br>
+    for i, ln in enumerate(commands):<br>
+        ln = commands[i] = re.sub(kPdbgRegex, ": '\\1'", ln)<br>
         try:<br>
             cmds.append(ShUtil.ShParser(l<wbr>n, litConfig.isWindows,<br>
                                         test.config.pipefail).parse()<wbr>)<br>
@@ -1066,9 +1085,16 @@ def executeScript(test, litConfig, tmpBa<br>
       mode += 'b'  # Avoid CRLFs when writing bash scripts.<br>
     f = open(script, mode)<br>
     if isWin32CMDEXE:<br>
-        f.write('@echo off\n')<br>
-        f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands))<br>
+        for i, ln in enumerate(commands):<br>
+            commands[i] = re.sub(kPdbgRegex, "echo '\\1' > nul", ln)<br>
+        if litConfig.echo_all_commands:<br>
+            f.write('@echo on\n')<br>
+        else:<br>
+            f.write('@echo off\n')<br>
+        f.write('\n@if %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands))<br>
     else:<br>
+        for i, ln in enumerate(commands):<br>
+            commands[i] = re.sub(kPdbgRegex, ": '\\1'", ln)<br>
         if test.config.pipefail:<br>
             f.write('set -o pipefail;')<br>
         if litConfig.echo_all_commands:<br>
@@ -1301,7 +1327,9 @@ class IntegratedTestKeywordParser(ob<wbr>ject<br>
         self.parser = parser<br>
<br>
         if kind == ParserKind.COMMAND:<br>
-            self.parser = self._handleCommand<br>
+            self.parser = lambda line_number, line, output: \<br>
+                                 self._handleCommand(line_numb<wbr>er, line, output,<br>
+                                                     self.keyword)<br>
         elif kind == ParserKind.LIST:<br>
             self.parser = self._handleList<br>
         elif kind == ParserKind.BOOLEAN_EXPR:<br>
@@ -1332,7 +1360,7 @@ class IntegratedTestKeywordParser(ob<wbr>ject<br>
         return (not line.strip() or output)<br>
<br>
     @staticmethod<br>
-    def _handleCommand(line_number, line, output):<br>
+    def _handleCommand(line_number, line, output, keyword):<br>
         """A helper for parsing COMMAND type keywords"""<br>
         # Trim trailing whitespace.<br>
         line = line.rstrip()<br>
@@ -1351,6 +1379,14 @@ class IntegratedTestKeywordParser(ob<wbr>ject<br>
         else:<br>
             if output is None:<br>
                 output = []<br>
+            pdbg = "%dbg({keyword} at line {line_number})".format(<br>
+                keyword=keyword,<br>
+                line_number=line_number)<br>
+            assert re.match(kPdbgRegex + "$", pdbg), \<br>
+                   "kPdbgRegex expected to match actual %dbg usage"<br>
+            line = "{pdbg} && {real_command}".format(<br>
+                pdbg=pdbg,<br>
+                real_command=line)<br>
             output.append(line)<br>
         return output<br>
<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/basic.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/basic.txt?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>external-shell/basic.txt?rev=<wbr>333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/basic.txt (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/basic.txt Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,6 @@<br>
+# These commands must run under both bash and windows cmd.exe (with GnuWin32<br>
+# tools).<br>
+<br>
+# RUN: true<br>
+# RUN: false<br>
+# RUN: true<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/line-continuation.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/line-continuation.txt?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>external-shell/line-continuati<wbr>on.txt?rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/line-continuation.txt (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/line-continuation.txt Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,12 @@<br>
+# These commands must run under both bash and windows cmd.exe (with GnuWin32<br>
+# tools).<br>
+<br>
+# RUN: echo 'foo bar' \<br>
+# RUN: | FileCheck %s<br>
+# RUN: echo \<br>
+# RUN: 'foo baz' \<br>
+# RUN: | FileCheck %s<br>
+# RUN: echo 'foo bar' \<br>
+# RUN: | FileCheck %s<br>
+<br>
+# CHECK: foo bar<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/lit.local.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/lit.local.cfg?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>external-shell/lit.local.cfg?<wbr>rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/lit.local.cfg (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/externa<wbr>l-shell/lit.local.cfg Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,2 @@<br>
+import lit.formats<br>
+config.test_format = lit.formats.ShTest(execute_ext<wbr>ernal=True)<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/basic.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/basic.txt?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>internal-shell/basic.txt?rev=<wbr>333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/basic.txt (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/basic.txt Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,3 @@<br>
+# RUN: true<br>
+# RUN: false<br>
+# RUN: true<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/line-continuation.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/line-continuation.txt?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>internal-shell/line-continuati<wbr>on.txt?rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/line-continuation.txt (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/line-continuation.txt Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,11 @@<br>
+# RUN: : first line continued \<br>
+# RUN:   to second line<br>
+# RUN: echo 'foo bar' \<br>
+# RUN: | FileCheck %s<br>
+# RUN: echo \<br>
+# RUN: 'foo baz' \<br>
+# RUN: | FileCheck %s<br>
+# RUN: echo 'foo bar' \<br>
+# RUN: | FileCheck %s<br>
+<br>
+# CHECK: foo bar<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/lit.local.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/lit.local.cfg?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>internal-shell/lit.local.cfg?<wbr>rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/lit.local.cfg (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/interna<wbr>l-shell/lit.local.cfg Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,2 @@<br>
+import lit.formats<br>
+config.test_format = lit.formats.ShTest(execute_ext<wbr>ernal=False)<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/lit.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-run-at-line/lit.cfg?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-run-at-line/<wbr>lit.cfg?rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/lit.cfg (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-run-at-line/lit.cfg Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,2 @@<br>
+<a href="http://config.name" rel="noreferrer" target="_blank">config.name</a> = 'shtest-run-at-line'<br>
+config.suffixes = ['.txt']<br>
<br>
Added: llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-shell/colon-error.<wbr>txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/Inputs/shtest-shell/colon-error.txt?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/Inputs/shtest-shell/colon-<wbr>error.txt?rev=333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-shell/colon-error.<wbr>txt (added)<br>
+++ llvm/trunk/utils/lit/tests/Inp<wbr>uts/shtest-shell/colon-error.<wbr>txt Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,3 @@<br>
+# Check error on an unsupported ":". (cannot be part of a pipeline)<br>
+#<br>
+# RUN: : | echo "hello"<br>
<br>
Modified: llvm/trunk/utils/lit/tests/lit<wbr>.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/lit.cfg?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/lit.cfg?rev=333614&r1=33361<wbr>3&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/lit<wbr>.cfg (original)<br>
+++ llvm/trunk/utils/lit/tests/lit<wbr>.cfg Wed May 30 17:55:32 2018<br>
@@ -71,3 +71,14 @@ for attribute in ('llvm_tools_dir', 'lit<br>
     if directory:<br>
         path = os.path.pathsep.join((director<wbr>y, path))<br>
 config.environment['PATH'] = path<br>
+<br>
+# These substitutions are needed only in tests where the external shell is used<br>
+# and could be either bash or windows cmd.exe.  Substitutions are expected to<br>
+# be expanded in double quotes.<br>
+isWin32CMDEXE = lit_config.isWindows and not lit_config.getBashPath()<br>
+if isWin32CMDEXE:<br>
+    config.substitutions.append(('<wbr>%{pdbg0}', "echo '"))<br>
+    config.substitutions.append(('<wbr>%{pdbg1}', "' > nul"))<br>
+else:<br>
+    config.substitutions.append(('<wbr>%{pdbg0}', ": '"))<br>
+    config.substitutions.append(('<wbr>%{pdbg1}', "'"))<br>
<br>
Modified: llvm/trunk/utils/lit/tests/max<wbr>-failures.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/max-failures.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/max-failures.py?rev=333614&<wbr>r1=333613&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/max<wbr>-failures.py (original)<br>
+++ llvm/trunk/utils/lit/tests/max<wbr>-failures.py Wed May 30 17:55:32 2018<br>
@@ -8,7 +8,7 @@<br>
 #<br>
 # END.<br>
<br>
-# CHECK: Failing Tests (26)<br>
+# CHECK: Failing Tests (27)<br>
 # CHECK: Failing Tests (1)<br>
 # CHECK: Failing Tests (2)<br>
 # CHECK: error: Setting --max-failures to 0 does not have any effect.<br>
<br>
Modified: llvm/trunk/utils/lit/tests/sht<wbr>est-format.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-format.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/shtest-format.py?rev=333614<wbr>&r1=333613&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/sht<wbr>est-format.py (original)<br>
+++ llvm/trunk/utils/lit/tests/sht<wbr>est-format.py Wed May 30 17:55:32 2018<br>
@@ -39,6 +39,7 @@<br>
 #<br>
 # CHECK: Command Output (stdout):<br>
 # CHECK-NEXT: --<br>
+# CHECK-NEXT: $ ":" "RUN: at line 1"<br>
 # CHECK-NEXT: $ "printf"<br>
 # CHECK-NEXT: # command output:<br>
 # CHECK-NEXT: line 1: failed test output on stdout<br>
<br>
Modified: llvm/trunk/utils/lit/tests/sht<wbr>est-output-printing.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-output-printing.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/shtest-output-printing.py?<wbr>rev=333614&r1=333613&r2=333614<wbr>&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/sht<wbr>est-output-printing.py (original)<br>
+++ llvm/trunk/utils/lit/tests/sht<wbr>est-output-printing.py Wed May 30 17:55:32 2018<br>
@@ -16,12 +16,15 @@<br>
 #<br>
 # CHECK:      Command Output<br>
 # CHECK-NEXT: --<br>
+# CHECK-NEXT: $ ":" "RUN: at line 1"<br>
 # CHECK-NEXT: $ "true"<br>
+# CHECK-NEXT: $ ":" "RUN: at line 2"<br>
 # CHECK-NEXT: $ "echo" "hi"<br>
 # CHECK-NEXT: # command output:<br>
 # CHECK-NEXT: hi<br>
 #<br>
-# CHECK:      $ "wc" "missing-file"<br>
+# CHECK:      $ ":" "RUN: at line 3"<br>
+# CHECK-NEXT: $ "wc" "missing-file"<br>
 # CHECK-NEXT: # redirected output from '{{.*(/|\\\\)}}basic.txt.tmp.o<wbr>ut':<br>
 # CHECK-NEXT: missing-file{{.*}} No such file or directory<br>
 # CHECK:      note: command had no output on stdout or stderr<br>
<br>
Added: llvm/trunk/utils/lit/tests/sht<wbr>est-run-at-line.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-run-at-line.py?rev=333614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/shtest-run-at-line.py?rev=<wbr>333614&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/sht<wbr>est-run-at-line.py (added)<br>
+++ llvm/trunk/utils/lit/tests/sht<wbr>est-run-at-line.py Wed May 30 17:55:32 2018<br>
@@ -0,0 +1,70 @@<br>
+# Check that -vv makes the line number of the failing RUN command clear.<br>
+# (-v is actually sufficient in the case of the internal shell.)<br>
+#<br>
+# RUN: not %{lit} -j 1 -vv %{inputs}/shtest-run-at-line > %t.out<br>
+# RUN: FileCheck --input-file %t.out -Dpdbg0="%{pdbg0}" -Dpdbg1="%{pdbg1}" %s<br>
+#<br>
+# END.<br>
+<br>
+<br>
+# CHECK: Testing: 4 tests<br>
+<br>
+<br>
+# In the case of the external shell, we check for only RUN lines in stderr in<br>
+# case some shell implementations format "set -x" output differently.<br>
+<br>
+# CHECK-LABEL: FAIL: shtest-run-at-line :: external-shell/basic.txt<br>
+<br>
+# CHECK:      Script:<br>
+# CHECK:      [[pdbg0]]RUN: at line 4[[pdbg1]] &&  true<br>
+# CHECK-NEXT: [[pdbg0]]RUN: at line 5[[pdbg1]] &&  false<br>
+# CHECK-NEXT: [[pdbg0]]RUN: at line 6[[pdbg1]] &&  true<br>
+<br>
+# CHECK:     RUN: at line 4<br>
+# CHECK:     RUN: at line 5<br>
+# CHECK-NOT: RUN<br>
+<br>
+# CHECK-LABEL: FAIL: shtest-run-at-line :: external-shell/line-continuati<wbr>on.txt<br>
+<br>
+# CHECK:      Script:<br>
+# CHECK:      [[pdbg0]]RUN: at line 4[[pdbg1]] &&  echo 'foo bar'  | FileCheck<br>
+# CHECK-NEXT: [[pdbg0]]RUN: at line 6[[pdbg1]] &&  echo  'foo baz'  | FileCheck<br>
+# CHECK-NEXT: [[pdbg0]]RUN: at line 9[[pdbg1]] &&  echo 'foo bar'  | FileCheck<br>
+<br>
+# CHECK:     RUN: at line 4<br>
+# CHECK:     RUN: at line 6<br>
+# CHECK-NOT: RUN<br>
+<br>
+<br>
+# CHECK-LABEL: FAIL: shtest-run-at-line :: internal-shell/basic.txt<br>
+<br>
+# CHECK:      Script:<br>
+# CHECK:      : 'RUN: at line 1' &&  true<br>
+# CHECK-NEXT: : 'RUN: at line 2' &&  false<br>
+# CHECK-NEXT: : 'RUN: at line 3' &&  true<br>
+<br>
+# CHECK:      Command Output (stdout)<br>
+# CHECK:      $ ":" "RUN: at line 1"<br>
+# CHECK-NEXT: $ "true"<br>
+# CHECK-NEXT: $ ":" "RUN: at line 2"<br>
+# CHECK-NEXT: $ "false"<br>
+# CHECK-NOT:  RUN<br>
+<br>
+# CHECK-LABEL: FAIL: shtest-run-at-line :: internal-shell/line-continuati<wbr>on.txt<br>
+<br>
+# CHECK:      Script:<br>
+# CHECK:      : 'RUN: at line 1' &&  : first line continued to second line<br>
+# CHECK-NEXT: : 'RUN: at line 3' &&  echo 'foo bar'  | FileCheck<br>
+# CHECK-NEXT: : 'RUN: at line 5' &&  echo  'foo baz'  | FileCheck<br>
+# CHECK-NEXT: : 'RUN: at line 8' &&  echo 'foo bar'  | FileCheck<br>
+<br>
+# CHECK:      Command Output (stdout)<br>
+# CHECK:      $ ":" "RUN: at line 1"<br>
+# CHECK-NEXT: $ ":" "first" "line" "continued" "to" "second" "line"<br>
+# CHECK-NEXT: $ ":" "RUN: at line 3"<br>
+# CHECK-NEXT: $ "echo" "foo bar"<br>
+# CHECK-NEXT: $ "FileCheck" "{{.*}}"<br>
+# CHECK-NEXT: $ ":" "RUN: at line 5"<br>
+# CHECK-NEXT: $ "echo" "foo baz"<br>
+# CHECK-NEXT: $ "FileCheck" "{{.*}}"<br>
+# CHECK-NOT:  RUN<br>
<br>
Modified: llvm/trunk/utils/lit/tests/sht<wbr>est-shell.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/shtest-shell.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/shtest-shell.py?rev=333614&<wbr>r1=333613&r2=333614&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/sht<wbr>est-shell.py (original)<br>
+++ llvm/trunk/utils/lit/tests/sht<wbr>est-shell.py Wed May 30 17:55:32 2018<br>
@@ -26,6 +26,14 @@<br>
 # CHECK: error: command failed with exit status: 1<br>
 # CHECK: ***<br>
<br>
+# CHECK: FAIL: shtest-shell :: colon-error.txt<br>
+# CHECK: *** TEST 'shtest-shell :: colon-error.txt' FAILED ***<br>
+# CHECK: $ ":"<br>
+# CHECK: # command stderr:<br>
+# CHECK: Unsupported: ':' cannot be part of a pipeline<br>
+# CHECK: error: command failed with exit status: 127<br>
+# CHECK: ***<br>
+<br>
 # CHECK: FAIL: shtest-shell :: diff-error-0.txt<br>
 # CHECK: *** TEST 'shtest-shell :: diff-error-0.txt' FAILED ***<br>
 # CHECK: $ "diff" "diff-error-0.txt" "diff-error-0.txt"<br>
@@ -153,7 +161,7 @@<br>
 #<br>
 # CHECK: FAIL: shtest-shell :: error-1.txt<br>
 # CHECK: *** TEST 'shtest-shell :: error-1.txt' FAILED ***<br>
-# CHECK: shell parser error on: 'echo "missing quote'<br>
+# CHECK: shell parser error on: ': \'RUN: at line 3\' && echo "missing quote'<br>
 # CHECK: ***<br>
<br>
 # CHECK: FAIL: shtest-shell :: error-2.txt<br>
@@ -219,4 +227,4 @@<br>
 # CHECK: PASS: shtest-shell :: sequencing-0.txt<br>
 # CHECK: XFAIL: shtest-shell :: sequencing-1.txt<br>
 # CHECK: PASS: shtest-shell :: valid-shell.txt<br>
-# CHECK: Failing Tests (26)<br>
+# CHECK: Failing Tests (27)<br>
<br>
Modified: llvm/trunk/utils/lit/tests/uni<wbr>t/TestRunner.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/tests/unit/TestRunner.py?rev=333614&r1=333613&r2=333614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/llvm/trunk/utils/lit/tes<wbr>ts/unit/TestRunner.py?rev=3336<wbr>14&r1=333613&r2=333614&view=<wbr>diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/utils/lit/tests/uni<wbr>t/TestRunner.py (original)<br>
+++ llvm/trunk/utils/lit/tests/uni<wbr>t/TestRunner.py Wed May 30 17:55:32 2018<br>
@@ -99,8 +99,8 @@ class TestIntegratedTestKeywordParse<wbr>r(un<br>
         cmd_parser = self.get_parser(parsers, 'MY_RUN:')<br>
         value = cmd_parser.getValue()<br>
         self.assertEqual(len(value), 2)  # there are only two run lines<br>
-        self.assertEqual(value[0].stri<wbr>p(), 'baz')<br>
-        self.assertEqual(value[1].stri<wbr>p(), 'foo  bar')<br>
+        self.assertEqual(value[0].stri<wbr>p(), "%dbg(MY_RUN: at line 4) &&  baz")<br>
+        self.assertEqual(value[1].stri<wbr>p(), "%dbg(MY_RUN: at line 7) &&  foo  bar")<br>
<br>
     def test_custom(self):<br>
         parsers = self.make_parsers()<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>