<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Feb 23, 2017 at 6:54 AM Michael Kruse via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@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">Hi all,<br class="gmail_msg">
<br class="gmail_msg">
quite a few tests use the pattern "2>&1 | FileCheck %s". AFAIK how<br class="gmail_msg">
stdout and stderr are merged into a single character stream is<br class="gmail_msg">
undefined and depends e.g. on whether stdout is buffered. I think we<br class="gmail_msg">
are often saved by the fact that standard output is written only at<br class="gmail_msg">
the end of the program and stderr is unbuffered, i.e. always written<br class="gmail_msg">
before stdout.<br class="gmail_msg">
<br class="gmail_msg">
A lot of tests disable stdout using either "-o /dev/null" or<br class="gmail_msg">
"-disable-output", but not all. For instance,<br class="gmail_msg">
test/Transforms/SLPVectorizer/X86/reduction_unrolled.ll does not. It<br class="gmail_msg">
checks for output from stdout and stderr using the same FileCheck. The<br class="gmail_msg">
stderr it is checking even comes from -debug, which has an additional<br class="gmail_msg">
buffering layer (circular_raw_ostream).<br class="gmail_msg">
<br class="gmail_msg">
The testing guide [1] does not mention how to test stderr.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
My questions:<br class="gmail_msg">
<br class="gmail_msg">
1. Are these tests, e.g. reduction_unrolled.ll fragile? Maybe I am<br class="gmail_msg">
missing something that says that interleaving stdout and stderr (and<br class="gmail_msg">
llvm::dbgs()) is well-defined in llvm-lit.<br class="gmail_msg">
<br class="gmail_msg">
2. Can -debug (or -debug-only) be used in regression tests at all? I<br class="gmail_msg">
understood them as debugging aids only. I would not like if<br class="gmail_msg">
adding/changing DEBUG(dbgs() << ...); lines causing regression tests<br class="gmail_msg">
to fail.<br class="gmail_msg">
<br class="gmail_msg"></blockquote><div><br></div><div>Rough guesses, based on no broad review of test cases. All of this seems OK except for the interleaved case(s) as you mentioned.<br><br>3f - generally it's probably best not to test for whether a source code line has executed. That would make the test fragile - the observable behavior should be tested instead. Though I would imagine it comes up sometimes as the best thing to do in a bad situation.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
3. What are the canonical ways to test...<br class="gmail_msg">
3a) opt -stat output (e.g. "2>&1 | FileCheck\n; REQUIRES: asserts")</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
3b) A statistic from -stat being zero<br class="gmail_msg">
3c) stderr only (and be sure that no lines from stdout will be<br class="gmail_msg">
interleaved with it)<br class="gmail_msg">
3d) stdout and stderr at the same time, but independently.<br class="gmail_msg">
3e) the output of DEBUG(dbgs() << ...) lines, if allowed to do so.<br class="gmail_msg">
3f) If not, how to replace it? Eg. how to test whether a source code<br class="gmail_msg">
line has been executed.<br class="gmail_msg">
<br class="gmail_msg">
Thanks in advance,<br class="gmail_msg">
Michael<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
[1] <a href="http://llvm.org/docs/TestingGuide.html" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/docs/TestingGuide.html</a><br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
LLVM Developers mailing list<br class="gmail_msg">
<a href="mailto:llvm-dev@lists.llvm.org" class="gmail_msg" target="_blank">llvm-dev@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="gmail_msg">
</blockquote></div></div>