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