[clang] 2941fa3 - [clang][HeuristicResolver] Only perform qualifier check for instance methods (#125166)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 30 21:25:57 PST 2025
Author: Nathan Ridge
Date: 2025-01-31T00:25:53-05:00
New Revision: 2941fa39410f7492aeaf73c90b92c3bfb7115044
URL: https://github.com/llvm/llvm-project/commit/2941fa39410f7492aeaf73c90b92c3bfb7115044
DIFF: https://github.com/llvm/llvm-project/commit/2941fa39410f7492aeaf73c90b92c3bfb7115044.diff
LOG: [clang][HeuristicResolver] Only perform qualifier check for instance methods (#125166)
Fixes https://github.com/llvm/llvm-project/issues/125164
Added:
Modified:
clang/lib/Sema/HeuristicResolver.cpp
clang/unittests/Sema/HeuristicResolverTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/HeuristicResolver.cpp b/clang/lib/Sema/HeuristicResolver.cpp
index 0c57250e63df2e..36e5b44b8b12cc 100644
--- a/clang/lib/Sema/HeuristicResolver.cpp
+++ b/clang/lib/Sema/HeuristicResolver.cpp
@@ -482,7 +482,8 @@ std::vector<const NamedDecl *> HeuristicResolverImpl::resolveDependentMember(
if (!Filter(ND))
return false;
if (const auto *MD = dyn_cast<CXXMethodDecl>(ND)) {
- return MD->getMethodQualifiers().compatiblyIncludes(QT.getQualifiers(),
+ return !MD->isInstance() ||
+ MD->getMethodQualifiers().compatiblyIncludes(QT.getQualifiers(),
Ctx);
}
return true;
diff --git a/clang/unittests/Sema/HeuristicResolverTest.cpp b/clang/unittests/Sema/HeuristicResolverTest.cpp
index a0deb2d936756a..5c3459dbeb1018 100644
--- a/clang/unittests/Sema/HeuristicResolverTest.cpp
+++ b/clang/unittests/Sema/HeuristicResolverTest.cpp
@@ -155,6 +155,26 @@ TEST(HeuristicResolver, MemberExpr_SmartPointer_Qualified) {
cxxMethodDecl(hasName("find"), isConst()).bind("output"));
}
+TEST(HeuristicResolver, MemberExpr_Static_Qualified) {
+ std::string Code = R"cpp(
+ template <typename T>
+ struct Waldo {
+ static void find();
+ };
+ template <typename T>
+ void foo(const Waldo<T>& t) {
+ t.find();
+ }
+ )cpp";
+ // Test resolution of "find" in "t.find()".
+ // The object being `const` should have no bearing on a call to a static
+ // method.
+ expectResolution(
+ Code, &HeuristicResolver::resolveMemberExpr,
+ cxxDependentScopeMemberExpr(hasMemberName("find")).bind("input"),
+ cxxMethodDecl(hasName("find")).bind("output"));
+}
+
TEST(HeuristicResolver, MemberExpr_AutoTypeDeduction1) {
std::string Code = R"cpp(
template <typename T>
More information about the cfe-commits
mailing list