From 3f0ffa2c245a691361e7ce7644d423479680fcc3 Mon Sep 17 00:00:00 2001 From: Dan Katz Date: Thu, 12 Jun 2025 16:55:19 -0400 Subject: [PATCH] Fix overload resolution bug. --- clang/lib/Sema/SemaReflect.cpp | 9 ++++++--- clang/test/Reflection/lift-operator.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaReflect.cpp b/clang/lib/Sema/SemaReflect.cpp index 4ca5bf254f9a..482a4d8671bc 100644 --- a/clang/lib/Sema/SemaReflect.cpp +++ b/clang/lib/Sema/SemaReflect.cpp @@ -884,9 +884,12 @@ ExprResult Sema::ActOnCXXReflectExpr(SourceLocation OpLoc, if (Found.isAmbiguous()) { return ExprError(); } else if (Found.isOverloadedResult() && Found.end() - Found.begin() > 1) { - Diag(Id.StartLocation, diag::err_reflect_overload_set) - << Id.getSourceRange(); - return ExprError(); + Expr *Result = UnresolvedLookupExpr::Create( + Context, nullptr, SS.getWithLocInContext(Context), + SourceLocation(), NameInfo, false, TArgs, Found.begin(), + Found.end(), false, false); + + return BuildCXXReflectExpr(OpLoc, Result); } NamedDecl *ND = Found.getRepresentativeDecl(); diff --git a/clang/test/Reflection/lift-operator.cpp b/clang/test/Reflection/lift-operator.cpp index 19b745b582c5..2fd803a239b6 100644 --- a/clang/test/Reflection/lift-operator.cpp +++ b/clang/test/Reflection/lift-operator.cpp @@ -199,6 +199,18 @@ void fn(int p) { } } // namespace requires_expressions + // =================== + // overload_resolution + // =================== + +namespace overload_resolution { +template void fn() requires (^^T != ^^int); +template void fn() requires (^^T == ^^int); +template void fn() requires (sizeof(T) == sizeof(int)); + +[[maybe_unused]] constexpr auto a = ^^fn; // OK +} // namespace overload_resolution + // ======================================= // bb_clang_p2996_issue_35_regression_test // =======================================