[PATCH] D96975: [Sema] Add some basic lambda capture fix-its
Kirill Bobyrev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 8 00:35:03 PST 2021
kbobyrev accepted this revision.
kbobyrev added a comment.
This revision is now accepted and ready to land.
LGTM, thanks for implementing this and apologies for the review delay (was a tough week for me & my team).
The code is very easy to follow now and the only suggestions are stylistic nits.
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17431
+static void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI,
+ VarDecl *Var) {
+ // Don't offer Capture by copy of default capture by copy fixes if Var is
----------------
This code heavily relies on not having any default captures and I can see that all of the code paths are correct (this condition is checked before calling the function), but I think it's better to explicitly check this with an assert.
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17439
+ auto T = Var->getType();
+ // capturing a reference type by copy will still copy the underlying type.
+ if (T->isReferenceType())
----------------
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17445
+ return true;
+ if (RD->hasUserDeclaredCopyConstructor()) {
+ for (CXXConstructorDecl *CT : RD->ctors()) {
----------------
nit: the style seems to be omitting `{}` for single-line sequences of if/for/whiles, probably remove in this case?
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17446
+ if (RD->hasUserDeclaredCopyConstructor()) {
+ for (CXXConstructorDecl *CT : RD->ctors()) {
+ if (CT->isCopyConstructor())
----------------
nit: `CT` -> `Ctor`? `CT` looks a little unexpected.
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17487
+ if (Sema.getLangOpts().CPlusPlus17)
+ CanDefaultCopyCapture = LSI->getCXXThisCapture().isCopyCapture();
+ else
----------------
also allows removing enclosing `{}`
================
Comment at: clang/lib/Sema/SemaExpr.cpp:17495
+ // capture by copy.
+ if (llvm::none_of(LSI->Captures, [](Capture &C) {
+ return !C.isThisCapture() && !C.isInitCapture() &&
----------------
maybe just pull the outside if into the inner one? does not seem to hurt readability and reduces the indentation + LOC number.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96975/new/
https://reviews.llvm.org/D96975
More information about the cfe-commits
mailing list