diff options
| -rw-r--r-- | clang/include/clang/AST/RecursiveASTVisitor.h | 3 | ||||
| -rw-r--r-- | clang/unittests/Tooling/RecursiveASTVisitorTestExprVisitor.cpp | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 71d7d19fed6..8c49785cd0f 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -2266,6 +2266,9 @@ DEF_TRAVERSE_STMT(LambdaExpr, { C != CEnd; ++C) { TRY_TO(TraverseLambdaCapture(S, C)); } + for (Expr *Init : S->capture_inits()) { + TRY_TO_TRAVERSE_OR_ENQUEUE_STMT(Init); + } TypeLoc TL = S->getCallOperator()->getTypeSourceInfo()->getTypeLoc(); FunctionProtoTypeLoc Proto = TL.castAs<FunctionProtoTypeLoc>(); diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTestExprVisitor.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTestExprVisitor.cpp index 7b62fc1571a..d39ca4b39a7 100644 --- a/clang/unittests/Tooling/RecursiveASTVisitorTestExprVisitor.cpp +++ b/clang/unittests/Tooling/RecursiveASTVisitorTestExprVisitor.cpp @@ -191,6 +191,14 @@ TEST(RecursiveASTVisitor, VisitsCallExpr) { "void x(); void y() { x(); }")); } +TEST(RecursiveASTVisitor, VisitsLambdaCaptureInit) { + DeclRefExprVisitor Visitor; + Visitor.ExpectMatch("i", 1, 20); + EXPECT_TRUE(Visitor.runOver( + "void f() { int i; [i]{}; };", + DeclRefExprVisitor::Lang_CXX11)); +} + /* FIXME: According to Richard Smith this is a bug in the AST. TEST(RecursiveASTVisitor, VisitsBaseClassTemplateArgumentsInInstantiation) { DeclRefExprVisitor Visitor; |

