1 //===- unittest/Tooling/RecursiveASTVisitorTests/InitListExprPostOrder.cpp -==//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "TestVisitor.h"
12 using namespace clang;
16 class InitListExprPostOrderVisitor
17 : public ExpectedLocationVisitor<InitListExprPostOrderVisitor> {
19 bool shouldTraversePostOrder() const { return true; }
21 bool VisitInitListExpr(InitListExpr *ILE) {
22 Match(ILE->isSemanticForm() ? "semantic" : "syntactic", ILE->getLocStart());
27 TEST(RecursiveASTVisitor, InitListExprIsPostOrderVisitedTwice) {
28 InitListExprPostOrderVisitor Visitor;
29 Visitor.ExpectMatch("syntactic", 2, 21);
30 Visitor.ExpectMatch("semantic", 2, 21);
31 EXPECT_TRUE(Visitor.runOver("struct S { int x; };\n"
32 "static struct S s = {.x = 0};\n",
33 InitListExprPostOrderVisitor::Lang_C));
36 } // end anonymous namespace