diff options
author | James Dennett <jdennett@google.com> | 2013-09-05 17:46:21 +0000 |
---|---|---|
committer | James Dennett <jdennett@google.com> | 2013-09-05 17:46:21 +0000 |
commit | 8f60cdd54b2a3450ffe749bee7972f5820119da0 (patch) | |
tree | 66198238b422e932db7557cad02b4872f25bc88c /clang/unittests/Tooling/RecursiveASTVisitorTest.cpp | |
parent | 6c0af64f0c1a7f2ff20ba6e769133587ee11f008 (diff) | |
download | bcm5719-llvm-8f60cdd54b2a3450ffe749bee7972f5820119da0.tar.gz bcm5719-llvm-8f60cdd54b2a3450ffe749bee7972f5820119da0.zip |
Mark lambda closure classes as being implicitly-generated.
Summary: Closure classes for C++ lambdas are always compiler-generated. This one-line change calls setImplicit(true) on them at creation time, such that a default RecursiveASTVisitor (or any for which shouldVisitImplicitCode returns false) will skip them.
Reviewers: rsmith, dblaikie
Reviewed By: dblaikie
CC: klimek, revane, cfe-commits, jordan_rose
Differential Revision: http://llvm-reviews.chandlerc.com/D1593
llvm-svn: 190073
Diffstat (limited to 'clang/unittests/Tooling/RecursiveASTVisitorTest.cpp')
-rw-r--r-- | clang/unittests/Tooling/RecursiveASTVisitorTest.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp index 2de9f15f226..b1d6f4a37c0 100644 --- a/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp +++ b/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp @@ -522,4 +522,30 @@ TEST(RecursiveASTVisitor, HasCaptureDefaultLoc) { LambdaDefaultCaptureVisitor::Lang_CXX11)); } +// Checks for lambda classes that are not marked as implicitly-generated. +// (There should be none.) +class ClassVisitor : public ExpectedLocationVisitor<ClassVisitor> { +public: + ClassVisitor() : SawNonImplicitLambdaClass(false) {} + bool VisitCXXRecordDecl(CXXRecordDecl* record) { + if (record->isLambda() && !record->isImplicit()) + SawNonImplicitLambdaClass = true; + return true; + } + + bool sawOnlyImplicitLambdaClasses() const { + return !SawNonImplicitLambdaClass; + } + +private: + bool SawNonImplicitLambdaClass; +}; + +TEST(RecursiveASTVisitor, LambdaClosureTypesAreImplicit) { + ClassVisitor Visitor; + EXPECT_TRUE(Visitor.runOver("auto lambda = []{};", + ClassVisitor::Lang_CXX11)); + EXPECT_TRUE(Visitor.sawOnlyImplicitLambdaClasses()); +} + } // end namespace clang |