ymandel created this revision. ymandel added a reviewer: gribozavr2. ymandel requested review of this revision. Herald added a project: clang.
Currently, `hasUnaryOperand` fails for the overloaded `operator*`. This patch fixes the bug and adds tests for this case. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D104389 Files: clang/include/clang/ASTMatchers/ASTMatchersInternal.h clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp Index: clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp =================================================================== --- clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -1893,6 +1893,23 @@ cxxOperatorCallExpr( forFunction(functionDecl(hasName("plusIntOperator"))), hasOperatorName("+"), hasUnaryOperand(expr()))))); + + Code = R"cpp( +struct HasOpArrow +{ + int& operator*(); +}; +void foo() +{ + HasOpArrow s1; + *s1; +} +)cpp"; + + EXPECT_TRUE( + matches(Code, traverse(TK_IgnoreUnlessSpelledInSource, + cxxOperatorCallExpr(hasOperatorName("*"), + hasUnaryOperand(expr()))))); } TEST(Matcher, UnaryOperatorTypes) { Index: clang/include/clang/ASTMatchers/ASTMatchersInternal.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -2102,6 +2102,8 @@ return UO_Minus; case OO_Amp: return UO_AddrOf; + case OO_Star: + return UO_Deref; case OO_Tilde: return UO_Not; case OO_Exclaim:
Index: clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp =================================================================== --- clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -1893,6 +1893,23 @@ cxxOperatorCallExpr( forFunction(functionDecl(hasName("plusIntOperator"))), hasOperatorName("+"), hasUnaryOperand(expr()))))); + + Code = R"cpp( +struct HasOpArrow +{ + int& operator*(); +}; +void foo() +{ + HasOpArrow s1; + *s1; +} +)cpp"; + + EXPECT_TRUE( + matches(Code, traverse(TK_IgnoreUnlessSpelledInSource, + cxxOperatorCallExpr(hasOperatorName("*"), + hasUnaryOperand(expr()))))); } TEST(Matcher, UnaryOperatorTypes) { Index: clang/include/clang/ASTMatchers/ASTMatchersInternal.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -2102,6 +2102,8 @@ return UO_Minus; case OO_Amp: return UO_AddrOf; + case OO_Star: + return UO_Deref; case OO_Tilde: return UO_Not; case OO_Exclaim:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits