1d488daa0SDavid Zarzycki //===- unittest/Tooling/RecursiveASTVisitorTests/CXXOperatorCallExprTraverser.cpp -===// 2d488daa0SDavid Zarzycki // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6d488daa0SDavid Zarzycki // 7d488daa0SDavid Zarzycki //===----------------------------------------------------------------------===// 8d488daa0SDavid Zarzycki 9d488daa0SDavid Zarzycki #include "TestVisitor.h" 10d488daa0SDavid Zarzycki 11d488daa0SDavid Zarzycki using namespace clang; 12d488daa0SDavid Zarzycki 13d488daa0SDavid Zarzycki namespace { 14d488daa0SDavid Zarzycki 15d488daa0SDavid Zarzycki class CXXOperatorCallExprTraverser 16d488daa0SDavid Zarzycki : public ExpectedLocationVisitor<CXXOperatorCallExprTraverser> { 17d488daa0SDavid Zarzycki public: 18d488daa0SDavid Zarzycki // Use Traverse, not Visit, to check that data recursion optimization isn't 19d488daa0SDavid Zarzycki // bypassing the call of this function. TraverseCXXOperatorCallExpr(CXXOperatorCallExpr * CE)20d488daa0SDavid Zarzycki bool TraverseCXXOperatorCallExpr(CXXOperatorCallExpr *CE) { 21d488daa0SDavid Zarzycki Match(getOperatorSpelling(CE->getOperator()), CE->getExprLoc()); 22d488daa0SDavid Zarzycki return ExpectedLocationVisitor<CXXOperatorCallExprTraverser>:: 23d488daa0SDavid Zarzycki TraverseCXXOperatorCallExpr(CE); 24d488daa0SDavid Zarzycki } 25d488daa0SDavid Zarzycki }; 26d488daa0SDavid Zarzycki TEST(RecursiveASTVisitor,TraversesOverloadedOperator)27d488daa0SDavid ZarzyckiTEST(RecursiveASTVisitor, TraversesOverloadedOperator) { 28d488daa0SDavid Zarzycki CXXOperatorCallExprTraverser Visitor; 29d488daa0SDavid Zarzycki Visitor.ExpectMatch("()", 4, 9); 30d488daa0SDavid Zarzycki EXPECT_TRUE(Visitor.runOver( 31d488daa0SDavid Zarzycki "struct A {\n" 32d488daa0SDavid Zarzycki " int operator()();\n" 33d488daa0SDavid Zarzycki "} a;\n" 34d488daa0SDavid Zarzycki "int k = a();\n")); 35d488daa0SDavid Zarzycki } 36d488daa0SDavid Zarzycki 37d488daa0SDavid Zarzycki } // end anonymous namespace 38