steveire updated this revision to Diff 340762. steveire added a comment. Update test
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D101346/new/ https://reviews.llvm.org/D101346 Files: clang/include/clang/AST/ExprCXX.h clang/unittests/AST/SourceLocationTest.cpp Index: clang/unittests/AST/SourceLocationTest.cpp =================================================================== --- clang/unittests/AST/SourceLocationTest.cpp +++ clang/unittests/AST/SourceLocationTest.cpp @@ -634,6 +634,35 @@ friendDecl())); } +TEST(CXXDependentScopeMemberExpr, ExprLocation) { + + llvm::Annotations Example(R"cpp( +template<typename T> +struct MyContainer +{ + template <typename U> + void pushBack(); +}; + +template<typename T> +void testCall() +{ + MyContainer<T> mc; + mc.template $member_name^pushBack<int>(); +} + )cpp"); + + auto AST = tooling::buildASTFromCode(Example.code()); + SourceManager &SM = AST->getSourceManager(); + auto &Ctx = AST->getASTContext(); + + auto *M = selectFirst<CXXDependentScopeMemberExpr>( + "mem", match(cxxDependentScopeMemberExpr().bind("mem"), Ctx)); + ASSERT_TRUE(M != nullptr); + + ASSERT_EQ(SM.getFileOffset(M->getExprLoc()), Example.point("member_name")); +} + TEST(FriendDecl, FriendTemplateClassRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 3, 14); Index: clang/include/clang/AST/ExprCXX.h =================================================================== --- clang/include/clang/AST/ExprCXX.h +++ clang/include/clang/AST/ExprCXX.h @@ -3774,6 +3774,8 @@ return MemberNameInfo.getEndLoc(); } + SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); } + static bool classof(const Stmt *T) { return T->getStmtClass() == CXXDependentScopeMemberExprClass; }
Index: clang/unittests/AST/SourceLocationTest.cpp =================================================================== --- clang/unittests/AST/SourceLocationTest.cpp +++ clang/unittests/AST/SourceLocationTest.cpp @@ -634,6 +634,35 @@ friendDecl())); } +TEST(CXXDependentScopeMemberExpr, ExprLocation) { + + llvm::Annotations Example(R"cpp( +template<typename T> +struct MyContainer +{ + template <typename U> + void pushBack(); +}; + +template<typename T> +void testCall() +{ + MyContainer<T> mc; + mc.template $member_name^pushBack<int>(); +} + )cpp"); + + auto AST = tooling::buildASTFromCode(Example.code()); + SourceManager &SM = AST->getSourceManager(); + auto &Ctx = AST->getASTContext(); + + auto *M = selectFirst<CXXDependentScopeMemberExpr>( + "mem", match(cxxDependentScopeMemberExpr().bind("mem"), Ctx)); + ASSERT_TRUE(M != nullptr); + + ASSERT_EQ(SM.getFileOffset(M->getExprLoc()), Example.point("member_name")); +} + TEST(FriendDecl, FriendTemplateClassRange) { RangeVerifier<FriendDecl> Verifier; Verifier.expectRange(2, 1, 3, 14); Index: clang/include/clang/AST/ExprCXX.h =================================================================== --- clang/include/clang/AST/ExprCXX.h +++ clang/include/clang/AST/ExprCXX.h @@ -3774,6 +3774,8 @@ return MemberNameInfo.getEndLoc(); } + SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); } + static bool classof(const Stmt *T) { return T->getStmtClass() == CXXDependentScopeMemberExprClass; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits