1 //===- unittest/Tooling/RecursiveASTVisitorTests/CXXOperatorCallExprTraverser.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 CXXOperatorCallExprTraverser
17   : public ExpectedLocationVisitor<CXXOperatorCallExprTraverser> {
18 public:
19   // Use Traverse, not Visit, to check that data recursion optimization isn't
20   // bypassing the call of this function.
21   bool TraverseCXXOperatorCallExpr(CXXOperatorCallExpr *CE) {
22     Match(getOperatorSpelling(CE->getOperator()), CE->getExprLoc());
23     return ExpectedLocationVisitor<CXXOperatorCallExprTraverser>::
24         TraverseCXXOperatorCallExpr(CE);
25   }
26 };
27 
28 TEST(RecursiveASTVisitor, TraversesOverloadedOperator) {
29   CXXOperatorCallExprTraverser Visitor;
30   Visitor.ExpectMatch("()", 4, 9);
31   EXPECT_TRUE(Visitor.runOver(
32     "struct A {\n"
33     "  int operator()();\n"
34     "} a;\n"
35     "int k = a();\n"));
36 }
37 
38 } // end anonymous namespace
39