[PATCH] D48291: [analyzer][UninitializedObjectChecker] Fixed captured lambda variable name
George Karpenkov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 18 11:13:07 PDT 2018
george.karpenkov requested changes to this revision.
george.karpenkov added a comment.
This revision now requires changes to proceed.
Looks good overall, but some nits inline.
================
Comment at: lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp:682
+StringRef getVariableName(const FieldDecl *Field) {
+ const auto *CXXParent = dyn_cast<CXXRecordDecl>(Field->getParent());
----------------
Can we have a comment explaining the semantics? From my understanding, you find a corresponding capture using a source location, and get a name from there.
================
Comment at: lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp:685
+
+ if (CXXParent && CXXParent->isLambda()) {
+ CXXRecordDecl::capture_const_iterator CapturedVar =
----------------
CXXParent is guaranteed to be non-null at this stage, otherwise dyn_cast fails
================
Comment at: lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp:687
+ CXXRecordDecl::capture_const_iterator CapturedVar =
+ std::find_if(CXXParent->captures_begin(), CXXParent->captures_end(),
+ [&Field](const LambdaCapture &L) {
----------------
Could we just use a for-each here? Sorry for being opinionated, I'm pretty sure it would be both shorter and more readable.
================
Comment at: lib/StaticAnalyzer/Checkers/UninitializedObjectChecker.cpp:689
+ [&Field](const LambdaCapture &L) {
+ return Field->getLocation().getRawEncoding() ==
+ L.getLocation().getRawEncoding();
----------------
That's exactly the semantics of the equality operator on source locations, so why not `Field->getLocation() == L.getLocation()` ?
Repository:
rC Clang
https://reviews.llvm.org/D48291
More information about the cfe-commits
mailing list