forked from OSchip/llvm-project
When complaining about ambiguous overload resolution for a unary or
binary operator, provide the types. llvm-svn: 119008
This commit is contained in:
parent
feea10bcdf
commit
052caec1f3
|
@ -1328,8 +1328,10 @@ def err_ref_init_ambiguous : Error<
|
|||
"reference initialization of type %0 with initializer of type %1 is ambiguous">;
|
||||
def err_ovl_deleted_init : Error<
|
||||
"call to %select{unavailable|deleted}0 constructor of %1">;
|
||||
def err_ovl_ambiguous_oper : Error<
|
||||
"use of overloaded operator '%0' is ambiguous">;
|
||||
def err_ovl_ambiguous_oper_unary : Error<
|
||||
"use of overloaded operator '%0' is ambiguous (operand type %1)">;
|
||||
def err_ovl_ambiguous_oper_binary : Error<
|
||||
"use of overloaded operator '%0' is ambiguous (with operand types %1 and %2)">;
|
||||
def err_ovl_no_viable_oper : Error<"no viable overloaded '%0'">;
|
||||
def err_ovl_deleted_oper : Error<
|
||||
"overload resolution selected %select{unavailable|deleted}0 operator '%1'">;
|
||||
|
|
|
@ -7163,8 +7163,9 @@ Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, unsigned OpcIn,
|
|||
break;
|
||||
|
||||
case OR_Ambiguous:
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper)
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary)
|
||||
<< UnaryOperator::getOpcodeStr(Opc)
|
||||
<< Input->getType()
|
||||
<< Input->getSourceRange();
|
||||
CandidateSet.NoteCandidates(*this, OCD_ViableCandidates,
|
||||
Args, NumArgs,
|
||||
|
@ -7401,8 +7402,9 @@ Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
|
|||
}
|
||||
|
||||
case OR_Ambiguous:
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper)
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper_binary)
|
||||
<< BinaryOperator::getOpcodeStr(Opc)
|
||||
<< Args[0]->getType() << Args[1]->getType()
|
||||
<< Args[0]->getSourceRange() << Args[1]->getSourceRange();
|
||||
CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2,
|
||||
BinaryOperator::getOpcodeStr(Opc), OpLoc);
|
||||
|
@ -7543,8 +7545,10 @@ Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
|
|||
}
|
||||
|
||||
case OR_Ambiguous:
|
||||
Diag(LLoc, diag::err_ovl_ambiguous_oper)
|
||||
<< "[]" << Args[0]->getSourceRange() << Args[1]->getSourceRange();
|
||||
Diag(LLoc, diag::err_ovl_ambiguous_oper_binary)
|
||||
<< "[]"
|
||||
<< Args[0]->getType() << Args[1]->getType()
|
||||
<< Args[0]->getSourceRange() << Args[1]->getSourceRange();
|
||||
CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, Args, 2,
|
||||
"[]", LLoc);
|
||||
return ExprError();
|
||||
|
@ -8013,8 +8017,8 @@ Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
|
|||
return ExprError();
|
||||
|
||||
case OR_Ambiguous:
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper)
|
||||
<< "->" << Base->getSourceRange();
|
||||
Diag(OpLoc, diag::err_ovl_ambiguous_oper_unary)
|
||||
<< "->" << Base->getType() << Base->getSourceRange();
|
||||
CandidateSet.NoteCandidates(*this, OCD_ViableCandidates, &Base, 1);
|
||||
return ExprError();
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ bool operator-(Z, Z); // expected-note{{candidate function}}
|
|||
|
||||
void g(Y y, Z z) {
|
||||
y = y + z;
|
||||
bool b = y - z; // expected-error{{use of overloaded operator '-' is ambiguous; candidates are:}}
|
||||
bool b = y - z; // expected-error{{use of overloaded operator '-' is ambiguous}}
|
||||
}
|
||||
|
||||
struct A {
|
||||
|
@ -37,7 +37,7 @@ bool operator==(A&, Z&); // expected-note 2{{candidate function}}
|
|||
|
||||
void h(A a, const A ac, Z z) {
|
||||
make_A() == z;
|
||||
a == z; // expected-error{{use of overloaded operator '==' is ambiguous; candidates are:}}
|
||||
a == z; // expected-error{{use of overloaded operator '==' is ambiguous}}
|
||||
ac == z; // expected-error{{invalid operands to binary expression ('const A' and 'Z')}}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue