diff options
17 files changed, 17 insertions, 190 deletions
diff --git a/llvm/docs/CommandGuide/lit.rst b/llvm/docs/CommandGuide/lit.rst index 0d39311152d..fbe1a9ab184 100644 --- a/llvm/docs/CommandGuide/lit.rst +++ b/llvm/docs/CommandGuide/lit.rst @@ -85,10 +85,6 @@ OUTPUT OPTIONS Echo all commands to stdout, as they are being executed. This can be valuable for debugging test failures, as the last echoed command will be the one which has failed. - :program:`lit` normally inserts a no-op command (``:`` in the case of bash) - with argument ``'RUN: at line N'`` before each command pipeline, and this - option also causes those no-op commands to be echoed to stdout to help you - locate the source line of the failed command. This option implies ``--verbose``. .. option:: -a, --show-all diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index 968598914f6..a6f9276f94e 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -40,17 +40,6 @@ kUseCloseFDs = not kIsWindows kAvoidDevNull = kIsWindows kDevNull = "/dev/null" -# A regex that matches %dbg(ARG), which lit inserts at the beginning of each -# run command pipeline such that ARG specifies the pipeline's source line -# number. lit later expands each %dbg(ARG) to a command that behaves as a null -# command in the target shell so that the line number is seen in lit's verbose -# mode. -# -# This regex captures ARG. ARG must not contain a right parenthesis, which -# terminates %dbg. ARG must not contain quotes, in which ARG might be enclosed -# during expansion. -kPdbgRegex = '%dbg\(([^)\'"]*)\)' - class ShellEnvironment(object): """Mutable shell environment containing things like CWD and env vars. @@ -800,13 +789,6 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper): results.append(cmdResult) return cmdResult.exitCode - if cmd.commands[0].args[0] == ':': - if len(cmd.commands) != 1: - raise InternalShellError(cmd.commands[0], "Unsupported: ':' " - "cannot be part of a pipeline") - results.append(ShellCommandResult(cmd.commands[0], '', '', 0, False)) - return 0; - procs = [] default_stdin = subprocess.PIPE stderrTempFiles = [] @@ -999,7 +981,6 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper): return exitCode def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): - commands = applySubstitutions(commands, [(kPdbgRegex, ": '\\1'")]) cmds = [] for ln in commands: try: @@ -1070,7 +1051,7 @@ def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): out += 'error: command reached timeout: %s\n' % ( str(result.timeoutReached),) - return out, err, exitCode, timeoutInfo, commands + return out, err, exitCode, timeoutInfo def executeScript(test, litConfig, tmpBase, commands, cwd): bashPath = litConfig.getBashPath() @@ -1085,15 +1066,9 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): mode += 'b' # Avoid CRLFs when writing bash scripts. f = open(script, mode) if isWin32CMDEXE: - commands = applySubstitutions(commands, [(kPdbgRegex, - "echo '\\1' > nul")]) - if litConfig.echo_all_commands: - f.write('@echo on\n') - else: - f.write('@echo off\n') - f.write('\n@if %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands)) + f.write('@echo off\n') + f.write('\nif %ERRORLEVEL% NEQ 0 EXIT\n'.join(commands)) else: - commands = applySubstitutions(commands, [(kPdbgRegex, ": '\\1'")]) if test.config.pipefail: f.write('set -o pipefail;') if litConfig.echo_all_commands: @@ -1118,9 +1093,9 @@ def executeScript(test, litConfig, tmpBase, commands, cwd): out, err, exitCode = lit.util.executeCommand(command, cwd=cwd, env=test.config.environment, timeout=litConfig.maxIndividualTestTime) - return (out, err, exitCode, None, commands) + return (out, err, exitCode, None) except lit.util.ExecuteCommandTimeoutException as e: - return (e.out, e.err, e.exitCode, e.msg, commands) + return (e.out, e.err, e.exitCode, e.msg) def parseIntegratedTestScriptCommands(source_path, keywords): """ @@ -1240,14 +1215,14 @@ def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False): ]) return substitutions -def applySubstitutions(script, substitutions, escapeForWindows=False): +def applySubstitutions(script, substitutions): """Apply substitutions to the script. Allow full regular expression syntax. Replace each matching occurrence of regular expression pattern a with substitution b in line ln.""" def processLine(ln): # Apply substitutions for a,b in substitutions: - if kIsWindows and escapeForWindows: + if kIsWindows: b = b.replace("\\","\\\\") ln = re.sub(a, b, ln) @@ -1326,9 +1301,7 @@ class IntegratedTestKeywordParser(object): self.parser = parser if kind == ParserKind.COMMAND: - self.parser = lambda line_number, line, output: \ - self._handleCommand(line_number, line, output, - self.keyword) + self.parser = self._handleCommand elif kind == ParserKind.LIST: self.parser = self._handleList elif kind == ParserKind.BOOLEAN_EXPR: @@ -1359,7 +1332,7 @@ class IntegratedTestKeywordParser(object): return (not line.strip() or output) @staticmethod - def _handleCommand(line_number, line, output, keyword): + def _handleCommand(line_number, line, output): """A helper for parsing COMMAND type keywords""" # Trim trailing whitespace. line = line.rstrip() @@ -1378,14 +1351,6 @@ class IntegratedTestKeywordParser(object): else: if output is None: output = [] - pdbg = "%dbg({keyword} at line {line_number})".format( - keyword=keyword, - line_number=line_number) - assert re.match(kPdbgRegex + "$", pdbg), \ - "kPdbgRegex expected to match actual %dbg usage" - line = "{pdbg} && {real_command}".format( - pdbg=pdbg, - real_command=line) output.append(line) return output @@ -1524,7 +1489,7 @@ def _runShTest(test, litConfig, useExternalSh, script, tmpBase): if isinstance(res, lit.Test.Result): return res - out,err,exitCode,timeoutInfo,script = res + out,err,exitCode,timeoutInfo = res if exitCode == 0: status = Test.PASS else: @@ -1565,7 +1530,7 @@ def executeShTest(test, litConfig, useExternalSh, substitutions = list(extra_substitutions) substitutions += getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=useExternalSh) - script = applySubstitutions(script, substitutions, True) + script = applySubstitutions(script, substitutions) # Re-run failed tests up to test_retry_attempts times. attempts = 1 diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/basic.txt b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/basic.txt deleted file mode 100644 index a359c996660..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/basic.txt +++ /dev/null @@ -1,6 +0,0 @@ -# These commands must run under both bash and windows cmd.exe (with GnuWin32 -# tools). - -# RUN: true -# RUN: false -# RUN: true diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/line-continuation.txt b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/line-continuation.txt deleted file mode 100644 index b11f0d759fe..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/line-continuation.txt +++ /dev/null @@ -1,12 +0,0 @@ -# These commands must run under both bash and windows cmd.exe (with GnuWin32 -# tools). - -# RUN: echo 'foo bar' \ -# RUN: | FileCheck %s -# RUN: echo \ -# RUN: 'foo baz' \ -# RUN: | FileCheck %s -# RUN: echo 'foo bar' \ -# RUN: | FileCheck %s - -# CHECK: foo bar diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/lit.local.cfg b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/lit.local.cfg deleted file mode 100644 index 5e87c729919..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/external-shell/lit.local.cfg +++ /dev/null @@ -1,2 +0,0 @@ -import lit.formats -config.test_format = lit.formats.ShTest(execute_external=True) diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/basic.txt b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/basic.txt deleted file mode 100644 index ba2695431bd..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/basic.txt +++ /dev/null @@ -1,3 +0,0 @@ -# RUN: true -# RUN: false -# RUN: true diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/line-continuation.txt b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/line-continuation.txt deleted file mode 100644 index 1e00bcb9616..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/line-continuation.txt +++ /dev/null @@ -1,11 +0,0 @@ -# RUN: : first line continued \ -# RUN: to second line -# RUN: echo 'foo bar' \ -# RUN: | FileCheck %s -# RUN: echo \ -# RUN: 'foo baz' \ -# RUN: | FileCheck %s -# RUN: echo 'foo bar' \ -# RUN: | FileCheck %s - -# CHECK: foo bar diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/lit.local.cfg b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/lit.local.cfg deleted file mode 100644 index b76b7a24c99..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/internal-shell/lit.local.cfg +++ /dev/null @@ -1,2 +0,0 @@ -import lit.formats -config.test_format = lit.formats.ShTest(execute_external=False) diff --git a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/lit.cfg b/llvm/utils/lit/tests/Inputs/shtest-run-at-line/lit.cfg deleted file mode 100644 index f4c7921b732..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-run-at-line/lit.cfg +++ /dev/null @@ -1,2 +0,0 @@ -config.name = 'shtest-run-at-line' -config.suffixes = ['.txt'] diff --git a/llvm/utils/lit/tests/Inputs/shtest-shell/colon-error.txt b/llvm/utils/lit/tests/Inputs/shtest-shell/colon-error.txt deleted file mode 100644 index 8b84c08ce09..00000000000 --- a/llvm/utils/lit/tests/Inputs/shtest-shell/colon-error.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Check error on an unsupported ":". (cannot be part of a pipeline) -# -# RUN: : | echo "hello" diff --git a/llvm/utils/lit/tests/lit.cfg b/llvm/utils/lit/tests/lit.cfg index a5ccc2c067e..75d1b5eac85 100644 --- a/llvm/utils/lit/tests/lit.cfg +++ b/llvm/utils/lit/tests/lit.cfg @@ -71,14 +71,3 @@ for attribute in ('llvm_tools_dir', 'lit_tools_dir'): if directory: path = os.path.pathsep.join((directory, path)) config.environment['PATH'] = path - -# These substitutions are needed only in tests where the external shell is used -# and could be either bash or windows cmd.exe. Substitutions are expected to -# be expanded in double quotes. -isWin32CMDEXE = lit_config.isWindows and not lit_config.getBashPath() -if isWin32CMDEXE: - config.substitutions.append(('%{pdbg0}', "echo '")) - config.substitutions.append(('%{pdbg1}', "' > nul")) -else: - config.substitutions.append(('%{pdbg0}', ": '")) - config.substitutions.append(('%{pdbg1}', "'")) diff --git a/llvm/utils/lit/tests/max-failures.py b/llvm/utils/lit/tests/max-failures.py index ca107bc29b9..1613eee8b5c 100644 --- a/llvm/utils/lit/tests/max-failures.py +++ b/llvm/utils/lit/tests/max-failures.py @@ -8,7 +8,7 @@ # # END. -# CHECK: Failing Tests (27) +# CHECK: Failing Tests (26) # CHECK: Failing Tests (1) # CHECK: Failing Tests (2) # CHECK: error: Setting --max-failures to 0 does not have any effect. diff --git a/llvm/utils/lit/tests/shtest-format.py b/llvm/utils/lit/tests/shtest-format.py index 33ed2fe44d6..94d74e3a920 100644 --- a/llvm/utils/lit/tests/shtest-format.py +++ b/llvm/utils/lit/tests/shtest-format.py @@ -39,7 +39,6 @@ # # CHECK: Command Output (stdout): # CHECK-NEXT: -- -# CHECK-NEXT: $ ":" "RUN: at line 1" # CHECK-NEXT: $ "printf" # CHECK-NEXT: # command output: # CHECK-NEXT: line 1: failed test output on stdout diff --git a/llvm/utils/lit/tests/shtest-output-printing.py b/llvm/utils/lit/tests/shtest-output-printing.py index 2344ef20036..2a85cf975c9 100644 --- a/llvm/utils/lit/tests/shtest-output-printing.py +++ b/llvm/utils/lit/tests/shtest-output-printing.py @@ -16,15 +16,12 @@ # # CHECK: Command Output # CHECK-NEXT: -- -# CHECK-NEXT: $ ":" "RUN: at line 1" # CHECK-NEXT: $ "true" -# CHECK-NEXT: $ ":" "RUN: at line 2" # CHECK-NEXT: $ "echo" "hi" # CHECK-NEXT: # command output: # CHECK-NEXT: hi # -# CHECK: $ ":" "RUN: at line 3" -# CHECK-NEXT: $ "wc" "missing-file" +# CHECK: $ "wc" "missing-file" # CHECK-NEXT: # redirected output from '{{.*(/|\\\\)}}basic.txt.tmp.out': # CHECK-NEXT: missing-file{{.*}} No such file or directory # CHECK: note: command had no output on stdout or stderr diff --git a/llvm/utils/lit/tests/shtest-run-at-line.py b/llvm/utils/lit/tests/shtest-run-at-line.py deleted file mode 100644 index adb7af81812..00000000000 --- a/llvm/utils/lit/tests/shtest-run-at-line.py +++ /dev/null @@ -1,70 +0,0 @@ -# Check that -vv makes the line number of the failing RUN command clear. -# (-v is actually sufficient in the case of the internal shell.) -# -# RUN: not %{lit} -j 1 -vv %{inputs}/shtest-run-at-line > %t.out -# RUN: FileCheck --input-file %t.out -Dpdbg0="%{pdbg0}" -Dpdbg1="%{pdbg1}" %s -# -# END. - - -# CHECK: Testing: 4 tests - - -# In the case of the external shell, we check for only RUN lines in stderr in -# case some shell implementations format "set -x" output differently. - -# CHECK-LABEL: FAIL: shtest-run-at-line :: external-shell/basic.txt - -# CHECK: Script: -# CHECK: [[pdbg0]]RUN: at line 4[[pdbg1]] && true -# CHECK-NEXT: [[pdbg0]]RUN: at line 5[[pdbg1]] && false -# CHECK-NEXT: [[pdbg0]]RUN: at line 6[[pdbg1]] && true - -# CHECK: RUN: at line 4 -# CHECK: RUN: at line 5 -# CHECK-NOT: RUN - -# CHECK-LABEL: FAIL: shtest-run-at-line :: external-shell/line-continuation.txt - -# CHECK: Script: -# CHECK: [[pdbg0]]RUN: at line 4[[pdbg1]] && echo 'foo bar' | FileCheck -# CHECK-NEXT: [[pdbg0]]RUN: at line 6[[pdbg1]] && echo 'foo baz' | FileCheck -# CHECK-NEXT: [[pdbg0]]RUN: at line 9[[pdbg1]] && echo 'foo bar' | FileCheck - -# CHECK: RUN: at line 4 -# CHECK: RUN: at line 6 -# CHECK-NOT: RUN - - -# CHECK-LABEL: FAIL: shtest-run-at-line :: internal-shell/basic.txt - -# CHECK: Script: -# CHECK: : 'RUN: at line 1' && true -# CHECK-NEXT: : 'RUN: at line 2' && false -# CHECK-NEXT: : 'RUN: at line 3' && true - -# CHECK: Command Output (stdout) -# CHECK: $ ":" "RUN: at line 1" -# CHECK-NEXT: $ "true" -# CHECK-NEXT: $ ":" "RUN: at line 2" -# CHECK-NEXT: $ "false" -# CHECK-NOT: RUN - -# CHECK-LABEL: FAIL: shtest-run-at-line :: internal-shell/line-continuation.txt - -# CHECK: Script: -# CHECK: : 'RUN: at line 1' && : first line continued to second line -# CHECK-NEXT: : 'RUN: at line 3' && echo 'foo bar' | FileCheck -# CHECK-NEXT: : 'RUN: at line 5' && echo 'foo baz' | FileCheck -# CHECK-NEXT: : 'RUN: at line 8' && echo 'foo bar' | FileCheck - -# CHECK: Command Output (stdout) -# CHECK: $ ":" "RUN: at line 1" -# CHECK-NEXT: $ ":" "first" "line" "continued" "to" "second" "line" -# CHECK-NEXT: $ ":" "RUN: at line 3" -# CHECK-NEXT: $ "echo" "foo bar" -# CHECK-NEXT: $ "FileCheck" "{{.*}}" -# CHECK-NEXT: $ ":" "RUN: at line 5" -# CHECK-NEXT: $ "echo" "foo baz" -# CHECK-NEXT: $ "FileCheck" "{{.*}}" -# CHECK-NOT: RUN diff --git a/llvm/utils/lit/tests/shtest-shell.py b/llvm/utils/lit/tests/shtest-shell.py index 016d1f6f108..b3d55a0c6a9 100644 --- a/llvm/utils/lit/tests/shtest-shell.py +++ b/llvm/utils/lit/tests/shtest-shell.py @@ -26,14 +26,6 @@ # CHECK: error: command failed with exit status: 1 # CHECK: *** -# CHECK: FAIL: shtest-shell :: colon-error.txt -# CHECK: *** TEST 'shtest-shell :: colon-error.txt' FAILED *** -# CHECK: $ ":" -# CHECK: # command stderr: -# CHECK: Unsupported: ':' cannot be part of a pipeline -# CHECK: error: command failed with exit status: 127 -# CHECK: *** - # CHECK: FAIL: shtest-shell :: diff-error-0.txt # CHECK: *** TEST 'shtest-shell :: diff-error-0.txt' FAILED *** # CHECK: $ "diff" "diff-error-0.txt" "diff-error-0.txt" @@ -161,7 +153,7 @@ # # CHECK: FAIL: shtest-shell :: error-1.txt # CHECK: *** TEST 'shtest-shell :: error-1.txt' FAILED *** -# CHECK: shell parser error on: ': \'RUN: at line 3\' && echo "missing quote' +# CHECK: shell parser error on: 'echo "missing quote' # CHECK: *** # CHECK: FAIL: shtest-shell :: error-2.txt @@ -227,4 +219,4 @@ # CHECK: PASS: shtest-shell :: sequencing-0.txt # CHECK: XFAIL: shtest-shell :: sequencing-1.txt # CHECK: PASS: shtest-shell :: valid-shell.txt -# CHECK: Failing Tests (27) +# CHECK: Failing Tests (26) diff --git a/llvm/utils/lit/tests/unit/TestRunner.py b/llvm/utils/lit/tests/unit/TestRunner.py index 4ade359790c..874bf275d4e 100644 --- a/llvm/utils/lit/tests/unit/TestRunner.py +++ b/llvm/utils/lit/tests/unit/TestRunner.py @@ -99,8 +99,8 @@ class TestIntegratedTestKeywordParser(unittest.TestCase): cmd_parser = self.get_parser(parsers, 'MY_RUN:') value = cmd_parser.getValue() self.assertEqual(len(value), 2) # there are only two run lines - self.assertEqual(value[0].strip(), "%dbg(MY_RUN: at line 4) && baz") - self.assertEqual(value[1].strip(), "%dbg(MY_RUN: at line 7) && foo bar") + self.assertEqual(value[0].strip(), 'baz') + self.assertEqual(value[1].strip(), 'foo bar') def test_custom(self): parsers = self.make_parsers() |