1 //===- unittest/Tooling/RecursiveASTVisitorTests/Class.cpp ----------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "TestVisitor.h"
11 using namespace clang
;
15 // Checks for lambda classes that are not marked as implicitly-generated.
16 // (There should be none.)
17 class ClassVisitor
: public ExpectedLocationVisitor
<ClassVisitor
> {
19 ClassVisitor() : SawNonImplicitLambdaClass(false) {}
20 bool VisitCXXRecordDecl(CXXRecordDecl
* record
) {
21 if (record
->isLambda() && !record
->isImplicit())
22 SawNonImplicitLambdaClass
= true;
26 bool sawOnlyImplicitLambdaClasses() const {
27 return !SawNonImplicitLambdaClass
;
31 bool SawNonImplicitLambdaClass
;
34 TEST(RecursiveASTVisitor
, LambdaClosureTypesAreImplicit
) {
36 EXPECT_TRUE(Visitor
.runOver("auto lambda = []{};", ClassVisitor::Lang_CXX11
));
37 EXPECT_TRUE(Visitor
.sawOnlyImplicitLambdaClasses());
40 } // end anonymous namespace