[clang-tools-extra] r209141 - Improved llvm-namespace-comment check.

Sean Silva chisophugis at gmail.com
Tue May 20 22:22:53 PDT 2014


On Tue, May 20, 2014 at 7:34 PM, Alexander Kornienko <alexfh at google.com>wrote:

> We use lit tests for diagnostic messages. Currently they use FileCheck,
> but it probably makes sense to implement an analog of Clang's -verify in
> clang-tidy.
>
> As for the tests for fix-its, I consider unit tests to be more readable
> for this purpose.
>

I don't understand this. What could be more readable than something like:

namespace {
} // namespace asdf
// CHECK:      namespace {
// CHECK-NEXT: } // namespace

?? I certainly prefer it hands-down to:

+  EXPECT_EQ("namespace {\n"
+            "} // namespace",
+            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
+                                                  "} // namespace asdf"));

(actually I think FileCheck's default matching of allowing a match of a
partial line could be an issue here, but that can be worked around with a
regex. I think that even adding a CHECK-EXACT directive or similar to
support this in a very readable way might be worth it for this sort of test)


> They are also more isolated and closer to the check itself.
>

I don't understand this. The check is either 1) performing a particular
source code transformation or 2) providing a diagnostic message about a
questionable construct. In case 1) you want to verify that the output takes
a particular plaintext form, i.e. exactly what a FileCheck does. In case 2)
you can avoid rolling your own -verify and use the simpler but almost
surely sufficient facility built into FileCheck
http://llvm.org/docs/CommandGuide/FileCheck.html#filecheck-expressions


> In a lit test, if we verify the full text of the output, the FileCheck
> tests become quite bulky.
>

Could you give an example? It is generally possible to create minimal test
cases so that the actual output (and the input, in fact) are quite compact.
yaml2obj is probably a worst case in this respect but we've still found it
easy to keep the tests small and readable. E.g.

http://reviews.llvm.org/diffusion/L/browse/llvm/trunk/test/Object/yaml2obj-elf-symbol-LocalGlobalWeak.yaml
http://reviews.llvm.org/diffusion/L/browse/llvm/trunk/test/Object/yaml2obj-elf-bits-endian.test


Another reason to put these checks in the unit tests, is that each new lit
> test file has non-trivial run-time overhead.
>

Personally I've never found myself waiting on an incremental lit test run
(i.e. rerunning a particular failing test or relevant test directory for
the code I'm working on). I *have* found myself waiting significant amounts
of time for a unittest (gtest) compile and link in that same scenario.

-- Sean Silva


>
> On Tue, May 20, 2014 at 7:32 PM, Sean Silva <chisophugis at gmail.com> wrote:
>
>> Is there a particular reason that this is being tested with unittests
>> instead of the usual lit tests? This kind of thing seems like it would be a
>> lot more readable as a lit test.
>>
>> -- Sean Silva
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140520/e48b0f23/attachment.html>


More information about the cfe-commits mailing list