aaron.ballman added a comment.

In D95714#2532957 <https://reviews.llvm.org/D95714#2532957>, @poelmanc wrote:

> In D95714#2532565 <https://reviews.llvm.org/D95714#2532565>, @njames93 wrote:
>
>> This does highlight an issue where the mimicked std library stubs used for 
>> tests don't correspond exactly to what the stdlib actually looks like and 
>> can result in subtly different ASTs that have added/removed implicit nodes.
>>
>> Going a little off point here but a few months back I pushed a fix for 
>> another check that passed its tests. 
>> However the bug report was re-opened as the bug was still observable in the 
>> real word. 
>> Turned out the implementation of std::string used for the test had a trivial 
>> destructor resulting in the AST not needed to emit `CXXBindTemporaryExpr`s 
>> all over the place, which threw off the matching logic.
>>
>> Unfortunately this kind of disparity is hard to detect in tests so it may be 
>> wise to test this locally using the compare header from a real standard 
>> library implementation (preferably all 3 main ones if you have the machines) 
>> and see if this behaviour is correct.
>
> Indeed the //mimicked std library// approach has real advantages like running 
> fast and giving consistent results across platforms. But it also has 
> drawbacks like the replication of //mimicked std// code across tests, and 
> possible differences between test and real world behaviour. We could give 
> tests a `CLANG_TIDY_TEST_NATIVE_STD` macro to switch between //mimicked std// 
> code and real headers, and set up CI to test both ways, to catch these issues 
> at the expense of added complexity. But that's a broader discussion.

I think the benefits from the mimicked std library outweigh the problems from 
trying to test against a moving target in multiple dimensions, and so I think 
we want to keep the mimicked std library approach as the default for tests. 
However, I also think the lack of testing against real world STL 
implementations is a problem that hurts us, for all the reasons pointed out 
already. Ultimately, the problem with testing against a real STL will boil down 
to who is responsible for changes when a test case starts failing after the 
check author has moved on. However, we might be able to solve this with policy 
decisions like changing a test to an expected failure + bug report while 
waiting for someone to step up to solve the issue. But this is orthogonal to 
your patch and would require a larger community discussion.

In D95714#2533046 <https://reviews.llvm.org/D95714#2533046>, @steveire wrote:

> I think you should be able to correctly match everything. Try a matcher like 
> (can probably be cleaned up a bit):

Thank you for that matcher suggestion; you are a powerful wizard. :-)

Generally, the changes LGTM.



================
Comment at: clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp:58
+                // that if an implicit cast is found, it is not from another
+                // nested rewritten operator
+                expr().bind("matchBinopOperands"),
----------------



CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D95714/new/

https://reviews.llvm.org/D95714

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to