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)28 TEST(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