[clang] [clang][NFC] Extract LookupOverloadedUnaryOp (PR #210567)
Matthias Wippich via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 18 19:25:58 PDT 2026
https://github.com/Tsche created https://github.com/llvm/llvm-project/pull/210567
This patch extracts `LookupOverloadedUnaryOp` from `CreateOverloadedUnaryOp` for consistency with `LookupOverloadedBinOp`/`CreateOverloadedBinOp`.
>From 4bc2a4aff5293b4193cab00614e960aeae76ca87 Mon Sep 17 00:00:00 2001
From: Matthias Wippich <mfwippich at gmail.com>
Date: Tue, 30 Jun 2026 06:35:13 +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..4914b00c609b0 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);
More information about the cfe-commits
mailing list