Bring operator name lookup (as required for C++ operator overloading)
into the general name-lookup fold. This cleans up some ugly,
not-quite-working code in the handling of operator overloading.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63735 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index c1e4c0e..d408def 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -1190,7 +1190,8 @@
// Build the candidate set for overloading
OverloadCandidateSet CandidateSet;
- AddOperatorCandidates(OverOp, S, Args, 2, CandidateSet);
+ if (AddOperatorCandidates(OverOp, S, OpLoc, Args, 2, CandidateSet))
+ return ExprError();
// Perform overload resolution.
OverloadCandidateSet::iterator Best;
@@ -1281,7 +1282,9 @@
// to the candidate set.
OverloadCandidateSet CandidateSet;
Expr *Args[2] = { LHSExp, RHSExp };
- AddOperatorCandidates(OO_Subscript, S, Args, 2, CandidateSet);
+ if (AddOperatorCandidates(OO_Subscript, S, LLoc, Args, 2, CandidateSet,
+ SourceRange(LLoc, RLoc)))
+ return ExprError();
// Perform overload resolution.
OverloadCandidateSet::iterator Best;
@@ -3738,7 +3741,8 @@
// to the candidate set.
OverloadCandidateSet CandidateSet;
Expr *Args[2] = { lhs, rhs };
- AddOperatorCandidates(OverOp, S, Args, 2, CandidateSet);
+ if (AddOperatorCandidates(OverOp, S, TokLoc, Args, 2, CandidateSet))
+ return ExprError();
// Perform overload resolution.
OverloadCandidateSet::iterator Best;
@@ -3840,8 +3844,9 @@
// Add the appropriate overloaded operators (C++ [over.match.oper])
// to the candidate set.
OverloadCandidateSet CandidateSet;
- if (OverOp != OO_None)
- AddOperatorCandidates(OverOp, S, &Input, 1, CandidateSet);
+ if (OverOp != OO_None &&
+ AddOperatorCandidates(OverOp, S, OpLoc, &Input, 1, CandidateSet))
+ return ExprError();
// Perform overload resolution.
OverloadCandidateSet::iterator Best;