[PATCH] D105421: [analyzer] Handle << operator for std::unique_ptr
Valeriy Savchenko via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 8 01:19:06 PDT 2021
vsavchenko added a comment.
Good job, great to see how you are going through the whole list of methods!
As for the patch, some tests and COMMENTS will be nice. Also, I think that for a checker that models quite a lot of functions and methods, we need to follow the pattern:
if (isMethodA(...)) {
return handleMethodA(...);
}
if (isMethodB(...)) {
return handleMethodB(...);
}
...
however small implementations for those methods are. It will give fast insight into which methods are actually supported.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:86
+bool hasStdClassWithName(const CXXRecordDecl *RD,
+ const SmallVectorImpl<StringRef> &Names) {
+ if (!RD || !RD->getDeclContext()->isStdNamespace())
----------------
When you change those vectors of names to global arrays, we can change it to `ArrayRef` to be more idiomatic LLVM code.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:111
+ return hasStdClassWithName(
+ RD, SmallVector<StringRef, 3>{"shared_ptr", "unique_ptr", "weak_ptr"});
+}
----------------
This is a compile-time constant, I don't think we should construct it every time in runtime. Global array of three names is totally fine.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:194
+ const auto *RD = E->getType()->getAsCXXRecordDecl();
+ return hasStdClassWithName(RD, SmallVector<StringRef, 1>{"basic_ostream"});
+}
----------------
Same goes here
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D105421/new/
https://reviews.llvm.org/D105421
More information about the cfe-commits
mailing list