1 //===- unittest/Tooling/RecursiveASTVisitorTests/InitListExprPreOrderNoQueue.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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "TestVisitor.h" 10 11 using namespace clang; 12 13 namespace { 14 15 class InitListExprPreOrderNoQueueVisitor 16 : public ExpectedLocationVisitor<InitListExprPreOrderNoQueueVisitor> { 17 public: TraverseInitListExpr(InitListExpr * ILE)18 bool TraverseInitListExpr(InitListExpr *ILE) { 19 return ExpectedLocationVisitor::TraverseInitListExpr(ILE); 20 } 21 VisitInitListExpr(InitListExpr * ILE)22 bool VisitInitListExpr(InitListExpr *ILE) { 23 Match(ILE->isSemanticForm() ? "semantic" : "syntactic", ILE->getBeginLoc()); 24 return true; 25 } 26 }; 27 TEST(RecursiveASTVisitor,InitListExprIsPreOrderNoQueueVisitedTwice)28TEST(RecursiveASTVisitor, InitListExprIsPreOrderNoQueueVisitedTwice) { 29 InitListExprPreOrderNoQueueVisitor Visitor; 30 Visitor.ExpectMatch("syntactic", 2, 21); 31 Visitor.ExpectMatch("semantic", 2, 21); 32 EXPECT_TRUE(Visitor.runOver("struct S { int x; };\n" 33 "static struct S s = {.x = 0};\n", 34 InitListExprPreOrderNoQueueVisitor::Lang_C)); 35 } 36 37 } // end anonymous namespace 38