[clang] [clang][NFC] Extract LookupOverloadedUnaryOp (PR #210567)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 18 19:26:37 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Matthias Wippich (Tsche)
<details>
<summary>Changes</summary>
This patch extracts `LookupOverloadedUnaryOp` from `CreateOverloadedUnaryOp` for consistency with `LookupOverloadedBinOp`/`CreateOverloadedBinOp`.
---
Full diff: https://github.com/llvm/llvm-project/pull/210567.diff
2 Files Affected:
- (modified) clang/include/clang/Sema/Sema.h (+6)
- (modified) clang/lib/Sema/SemaOverload.cpp (+27-16)
``````````diff
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);
``````````
</details>
https://github.com/llvm/llvm-project/pull/210567
More information about the cfe-commits
mailing list