[PATCH] D138701: [clang-tidy] Ignore cxxRewrittenBinaryOperator in defaulted function decls in modernize-use-nullptr.

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 25 04:47:47 PST 2022


ilya-biryukov accepted this revision.
ilya-biryukov added a comment.
This revision is now accepted and ready to land.

LGTM, thanks!
Initially I thought that traversing with `TK_IgnoreUnlessSpelledInSource` might be appropriate. But that idea does not seem to work as we do need to match implicit casts to find the `nullptr`.

I am also not sure if we should show this warning when the generated code was written by hand. The check will keep suggesting to replace `(a <=> b) < 0` with `(a <=> b) < nullptr`.
Technically this will compile, but the C++ Standard explicitly mentions the comparisons must be implicitly rewritten to `(a <=> b) < 0`, not `nullptr`.
But let's not solve this problem until someone actually reports it.



================
Comment at: clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp:66
+                        .bind(CastSequence))),
+                unless(hasAncestor(functionDecl(isDefaulted()))))));
 }
----------------
NIT: maybe add a comment mentioning that this tries to find defaulted comparison operators.
Pre-C++20 one could only put `= default` constructors, destructors and assignment operators. So I suspect this might be a useful clarification for readers of the code.


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/modernize/use-nullptr-cxx20.cpp:6
+
+struct _CmpUnspecifiedParam {
+  consteval
----------------
NIT: add a comment mentioning that this mocks how STL defined the parameter.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D138701



More information about the cfe-commits mailing list