PR10867. lit would interpret

RUN: a
  RUN: b || true

as "a && (b || true)" in Tcl mode, and as "(a && b) || true" in sh mode.
Everyone seems to (quite reasonably) write tests assuming the Tcl behavior,
so use that in sh mode too.

llvm-svn: 169441
This commit is contained in:
Richard Smith 2012-12-05 22:54:26 +00:00
parent de872af437
commit 69c87b0914
2 changed files with 19 additions and 5 deletions

View File

@ -0,0 +1,9 @@
// This test should fail. lit used to interpret this as:
// (false && false) || true
// instead of the intended
// false && (false || true
//
// RUN: false
// RUN: false || true
//
// XFAIL: *

View File

@ -241,11 +241,16 @@ def executeShCmd(cmd, cfg, cwd, results):
return exitCode
def executeScriptInternal(test, litConfig, tmpBase, commands, cwd):
ln = ' &&\n'.join(commands)
try:
cmd = ShUtil.ShParser(ln, litConfig.isWindows).parse()
except:
return (Test.FAIL, "shell parser error on: %r" % ln)
cmds = []
for ln in commands:
try:
cmds.append(ShUtil.ShParser(ln, litConfig.isWindows).parse())
except:
return (Test.FAIL, "shell parser error on: %r" % ln)
cmd = cmds[0]
for c in cmds[1:]:
cmd = ShUtil.Seq(cmd, '&&', c)
results = []
try: