[PATCH] D29515: [lit] Don't use bash on Windows. Pipeing stdout to Filecheck doesn't work.

Marcos Pividori via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 3 13:50:23 PST 2017

mpividori created this revision.
Herald added a reviewer: modocache.

I disable usage of bash for tests on Windows. Instead, lets use the cmd prompt.
When working on tests for libFuzzer on Windows, I found some problems when pipeing stdout to Filecheck. So, there is a problem between bash and Filecheck.

For example, this lit test fails when using bash on Windows:

  RUN: not LLVMFuzzer-NullDerefTest -print_coverage=1 2>&1 | FileCheck %s

But it works fine when using the command prompt.

If we redirect the stdout to a file and then read that file, it works fine, for example:

  RUN: not LLVMFuzzer-NullDerefTest -print_coverage=1 2>&1 > sometmpfile
  RUN: cat sometmpfile | FileCheck %s

If we try with tee, like:

  RUN: not LLVMFuzzer-NullDerefTest -print_coverage=1 2>&1 | tee sometmpfile
  RUN: cat sometmpfile | FileCheck %s

It works fine.

So the problem is when pipeing to Filecheck on bash on Windows.

I can see that FileCheck is using a MemoryBuffer to read stdin.
If I modify the function `getMemoryBufferForStream` in `lib/Support/MemoryBuffer.cpp`  to add a `sleep(1)` before reading, the tests works fine.
So, I guess there is some problem with `read()` returning 0 in an unexpected situation, before reading all the stdin.

Unfortunately I don't have the time to continue debugging to see what is the reason for the problem. So, I disable bash for tests on Windows.

I think this commit makes sense, since bash is not installed by default on Windows, and is not required for lit tests on: http://llvm.org/docs/GettingStartedVS.html#requirements 
We only require Python and GnuWin32. So, I think is preferable to use the same terminal for all tests in all Windows machines, instead of having different situations depending on having bash installed or not.



Index: utils/lit/lit/TestRunner.py
--- utils/lit/lit/TestRunner.py
+++ utils/lit/lit/TestRunner.py
@@ -572,7 +572,7 @@
 def executeScript(test, litConfig, tmpBase, commands, cwd):
     bashPath = litConfig.getBashPath()
-    isWin32CMDEXE = (litConfig.isWindows and not bashPath)
+    isWin32CMDEXE = litConfig.isWindows
     script = tmpBase + '.script'
     if isWin32CMDEXE:
         script += '.bat'

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29515.87010.patch
Type: text/x-patch
Size: 474 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170203/bde068ca/attachment.bin>

More information about the llvm-commits mailing list