[PATCH] D92179: [clang-tidy] Catch more unwanted implicit conversions in performance-implicit-conversion-in-loop
Clement Courbet via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 26 06:48:37 PST 2020
courbet created this revision.
courbet added a reviewer: pilki.
Herald added subscribers: llvm-commits, xazax.hun, mgorny.
Herald added projects: clang, LLVM.
courbet requested review of this revision.
It turns out that there is no reason to restrict to loop variables. This
allows catching stuff like:
const std::pair<uint32, SomeLargeObject>& kv = *map.begin();
(did you notice the missing `const uint32_t`) ?
On our codebase, this roughly doubles the number of warnings compared to
the loop-only case.
The warnings mainly fall in two categories:
1. Lifetime extended temporary:
const std::function<...>& c = [](...) {};
Which is better written as one of:
const std::function<...> c = [](...) {}; // explicit
const auto c = [](...) {}; // no std::function
2. Copy + lifetime extension.
const std::pair<uint32, SomeLargeObject>& kv = *map.begin();
Better written as:
// no copy:
const std::pair<const uint32, SomeLargeObject>& kv = *map.begin();
const auto& kv = *map.begin();
// explicit
const std::pair<uint32, SomeLargeObject> kv = *map.begin();
// explicit, allows automatic move.
std::pair<uint32, SomeLargeObject> kv = *map.begin();
And rename the check.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D92179
Files:
clang-tools-extra/clang-tidy/performance/CMakeLists.txt
clang-tools-extra/clang-tidy/performance/ImplicitConversionCheck.cpp
clang-tools-extra/clang-tidy/performance/ImplicitConversionCheck.h
clang-tools-extra/clang-tidy/performance/ImplicitConversionInLoopCheck.cpp
clang-tools-extra/clang-tidy/performance/ImplicitConversionInLoopCheck.h
clang-tools-extra/clang-tidy/performance/PerformanceTidyModule.cpp
clang-tools-extra/docs/clang-tidy/checks/list.rst
clang-tools-extra/docs/clang-tidy/checks/performance-implicit-cast-in-loop.rst
clang-tools-extra/docs/clang-tidy/checks/performance-implicit-conversion-in-loop.rst
clang-tools-extra/docs/clang-tidy/checks/performance-implicit-conversion.rst
clang-tools-extra/test/clang-tidy/checkers/performance-implicit-conversion-in-loop.cpp
llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/performance/BUILD.gn
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92179.307860.patch
Type: text/x-patch
Size: 17097 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201126/c23710bf/attachment.bin>
More information about the cfe-commits
mailing list