]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - unittests/Tooling/RecursiveASTVisitorTests/InitListExprPostOrder.cpp
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / unittests / Tooling / RecursiveASTVisitorTests / InitListExprPostOrder.cpp
1 //===- unittest/Tooling/RecursiveASTVisitorTests/InitListExprPostOrder.cpp -==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "TestVisitor.h"
11
12 using namespace clang;
13
14 namespace {
15
16 class InitListExprPostOrderVisitor
17     : public ExpectedLocationVisitor<InitListExprPostOrderVisitor> {
18 public:
19   bool shouldTraversePostOrder() const { return true; }
20
21   bool VisitInitListExpr(InitListExpr *ILE) {
22     Match(ILE->isSemanticForm() ? "semantic" : "syntactic", ILE->getLocStart());
23     return true;
24   }
25 };
26
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));
34 }
35
36 } // end anonymous namespace