[PATCH] D60507: [clang-tidy] new check: bugprone-unhandled-self-assignment
Tamás Zolnai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 10 05:28:37 PDT 2019
ztamas added a comment.
On llvm source code the check finds three suspicious methods:
/home/zolnai/libreoffice/clang/llvm-project/clang/lib/AST/NestedNameSpecifier.cpp:534:1: warning: operator=() might not handle self-assignment properly [bugprone-unhandled-self-assignment]
operator=(const NestedNameSpecifierLocBuilder &Other) {
/home/zolnai/libreoffice/clang/llvm-project/llvm/unittests/ADT/ArrayRefTest.cpp:75:10: warning: operator=() might not handle self-assignment properly [bugprone-unhandled-self-assignment]
void operator=(const NonAssignable &RHS) { assert(RHS.Ptr != nullptr); }
/home/zolnai/libreoffice/clang/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp:594:47: warning: operator=() might not handle self-assignment properly [bugprone-unhandled-self-assignment]
TargetLibraryInfoImpl &TargetLibraryInfoImpl::operator=(const TargetLibraryInfoImpl &TLI) {
Two of them seems a good catch to me. NestedNameSpecifierLocBuilder and TargetLibraryInfoImpl are using `memcpy` without self-check, and using `memcpy` on overlapping regions leads to undefined behavior.
The third one is not an actual working copy assignment operator, as I see. It is used only for some testing purposes.
Repository:
rCTE Clang Tools Extra
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60507/new/
https://reviews.llvm.org/D60507
More information about the cfe-commits
mailing list