brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · ae952c3 Raw
52 lines · cpp
1//=- unittest/Tooling/RecursiveASTVisitorTests/ImplicitCtorInitializer.cpp -=//2//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "TestVisitor.h"10 11using namespace clang;12 13namespace {14 15class CXXCtorInitializerVisitor : public ExpectedLocationVisitor {16public:17  CXXCtorInitializerVisitor(bool VisitImplicitCode) {18    ShouldVisitImplicitCode = VisitImplicitCode;19  }20 21  bool TraverseConstructorInitializer(CXXCtorInitializer *Init) override {22    if (!Init->isWritten())23      VisitedImplicitInitializer = true;24    Match("initializer", Init->getSourceLocation());25    return ExpectedLocationVisitor::TraverseConstructorInitializer(Init);26  }27 28  bool VisitedImplicitInitializer = false;29};30 31// Check to ensure that CXXCtorInitializer is not visited when implicit code32// should not be visited and that it is visited when implicit code should be33// visited.34TEST(RecursiveASTVisitor, CXXCtorInitializerVisitNoImplicit) {35  for (bool VisitImplCode : {true, false}) {36    CXXCtorInitializerVisitor Visitor(VisitImplCode);37    Visitor.ExpectMatch("initializer", 7, 17);38    llvm::StringRef Code = R"cpp(39        class A {};40        class B : public A {41          B() {};42        };43        class C : public A {44          C() : A() {}45        };46      )cpp";47    EXPECT_TRUE(Visitor.runOver(Code, CXXCtorInitializerVisitor::Lang_CXX));48    EXPECT_EQ(Visitor.VisitedImplicitInitializer, VisitImplCode);49  }50}51} // end anonymous namespace52