https://github.com/Tsche updated https://github.com/llvm/llvm-project/pull/210567
>From 558056f40a202e6df9e5dac0136ff74b12a37671 Mon Sep 17 00:00:00 2001 From: Matthias Wippich <[email protected]> Date: Sun, 19 Jul 2026 04:31:21 +0200 Subject: [PATCH] [clang][NFC] Extract LookupOverloadedUnaryOp --- clang/include/clang/Sema/Sema.h | 6 +++++ clang/lib/Sema/SemaOverload.cpp | 43 +++++++++++++++++++++------------ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index d43b6954196a2..8a30f6319bcef 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -10924,6 +10924,12 @@ class Sema final : public SemaBase { const UnresolvedSetImpl &Fns, bool PerformADL = true); + /// Perform lookup for an overloaded unary operator. + void LookupOverloadedUnaryOp(OverloadCandidateSet &CandidateSet, + OverloadedOperatorKind Op, + const UnresolvedSetImpl &Fns, + ArrayRef<Expr *> Args, bool RequiresADL = true); + /// Create a unary operation that may resolve to an overloaded /// operator. /// diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index eafda32198f11..0e92a6535ae52 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -15221,6 +15221,32 @@ ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl, return CheckForImmediateInvocation(CE, CE->getDirectCallee()); } +void Sema::LookupOverloadedUnaryOp(OverloadCandidateSet &CandidateSet, + OverloadedOperatorKind Op, + const UnresolvedSetImpl &Fns, + ArrayRef<Expr *> Args, bool PerformADL) { + assert(Op != OO_None && "Invalid opcode for overloaded unary operator"); + + SourceLocation OpLoc = CandidateSet.getLocation(); + DeclarationName OpName = Context.DeclarationNames.getCXXOperatorName(Op); + + // Add the candidates from the given function set. + AddNonMemberOperatorCandidates(Fns, Args, CandidateSet); + + // Add operator candidates that are member functions. + AddMemberOperatorCandidates(Op, OpLoc, Args, CandidateSet); + + // Add candidates from ADL. + if (PerformADL) { + AddArgumentDependentLookupCandidates(OpName, OpLoc, Args, + /*ExplicitTemplateArgs*/ nullptr, + CandidateSet); + } + + // Add builtin operator candidates. + AddBuiltinOperatorCandidates(Op, OpLoc, Args, CandidateSet); +} + ExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, @@ -15274,22 +15300,7 @@ Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, // Build an empty overload set. OverloadCandidateSet CandidateSet(OpLoc, OverloadCandidateSet::CSK_Operator); - - // Add the candidates from the given function set. - AddNonMemberOperatorCandidates(Fns, ArgsArray, CandidateSet); - - // Add operator candidates that are member functions. - AddMemberOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet); - - // Add candidates from ADL. - if (PerformADL) { - AddArgumentDependentLookupCandidates(OpName, OpLoc, ArgsArray, - /*ExplicitTemplateArgs*/nullptr, - CandidateSet); - } - - // Add builtin operator candidates. - AddBuiltinOperatorCandidates(Op, OpLoc, ArgsArray, CandidateSet); + LookupOverloadedUnaryOp(CandidateSet, Op, Fns, ArgsArray, PerformADL); bool HadMultipleCandidates = (CandidateSet.size() > 1); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
