diff options
Diffstat (limited to 'clang/lib/AST')
-rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 1 | ||||
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 11 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 14 | ||||
-rw-r--r-- | clang/lib/AST/StmtProfile.cpp | 3 |
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 |