summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/AST')
-rw-r--r--clang/lib/AST/DeclCXX.cpp1
-rw-r--r--clang/lib/AST/ExprCXX.cpp11
-rw-r--r--clang/lib/AST/StmtPrinter.cpp14
-rw-r--r--clang/lib/AST/StmtProfile.cpp3
4 files changed, 5 insertions, 24 deletions
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 09ab8c916ab..33c7ff99b0e 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -992,6 +992,7 @@ void CXXRecordDecl::getCaptureFields(
else if (C->capturesVariable())
Captures[C->getCapturedVar()] = *Field;
}
+ assert(Field == field_end());
}
TemplateParameterList *
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp
index a13d6f79c86..069404aa7cb 100644
--- a/clang/lib/AST/ExprCXX.cpp
+++ b/clang/lib/AST/ExprCXX.cpp
@@ -905,26 +905,15 @@ LambdaExpr::Capture::Capture(SourceLocation Loc, bool Implicit,
case LCK_ByRef:
assert(Var && "capture must have a variable!");
break;
-
- case LCK_Init:
- llvm_unreachable("don't use this constructor for an init-capture");
}
DeclAndBits.setInt(Bits);
}
-LambdaExpr::Capture::Capture(FieldDecl *Field)
- : DeclAndBits(Field,
- Field->getType()->isReferenceType() ? 0 : Capture_ByCopy),
- Loc(Field->getLocation()), EllipsisLoc() {}
-
LambdaCaptureKind LambdaExpr::Capture::getCaptureKind() const {
Decl *D = DeclAndBits.getPointer();
if (!D)
return LCK_This;
- if (isa<FieldDecl>(D))
- return LCK_Init;
-
return (DeclAndBits.getInt() & Capture_ByCopy) ? LCK_ByCopy : LCK_ByRef;
}
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index c94ffab9716..1bbd4667fc5 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -1460,24 +1460,18 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) {
break;
case LCK_ByRef:
- if (Node->getCaptureDefault() != LCD_ByRef)
+ if (Node->getCaptureDefault() != LCD_ByRef || C->isInitCapture())
OS << '&';
OS << C->getCapturedVar()->getName();
break;
case LCK_ByCopy:
- if (Node->getCaptureDefault() != LCD_ByCopy)
- OS << '=';
OS << C->getCapturedVar()->getName();
break;
-
- case LCK_Init:
- if (C->getInitCaptureField()->getType()->isReferenceType())
- OS << '&';
- OS << C->getInitCaptureField()->getName();
- PrintExpr(Node->getInitCaptureInit(C));
- break;
}
+
+ if (C->isInitCapture())
+ PrintExpr(C->getCapturedVar()->getInit());
}
OS << ']';
diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp
index 7612bef58ae..35f37ddaa79 100644
--- a/clang/lib/AST/StmtProfile.cpp
+++ b/clang/lib/AST/StmtProfile.cpp
@@ -881,9 +881,6 @@ StmtProfiler::VisitLambdaExpr(const LambdaExpr *S) {
VisitDecl(C->getCapturedVar());
ID.AddBoolean(C->isPackExpansion());
break;
- case LCK_Init:
- VisitDecl(C->getInitCaptureField());
- break;
}
}
// Note: If we actually needed to be able to match lambda
OpenPOWER on IntegriCloud