Skip to content

Commit d221401

Browse files
committed
Improve diagnostics in failed binop lookup by detecting previously
emitted errors and doing the right thing.
1 parent be3cec7 commit d221401

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

lib/Sema/TypeCheckExpr.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,12 @@ static InfixData getInfixData(TypeChecker &TC, DeclContext *DC, Expr *E) {
182182
E->getLoc()))
183183
return op->getInfixData();
184184
}
185-
186-
TC.diagnose(E->getLoc(), diag::unknown_binop);
185+
186+
// If E is already an ErrorExpr, then we've diagnosed it as invalid already,
187+
// otherwise emit an error.
188+
if (!isa<ErrorExpr>(E))
189+
TC.diagnose(E->getLoc(), diag::unknown_binop);
190+
187191
// Recover with an infinite-precedence left-associative operator.
188192
return InfixData((unsigned char)~0U, Associativity::Left,
189193
/*assignment*/ false);

test/decl/operators.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,8 @@ func ??= <T>(inout result : T?, rhs : Int) { // ok
174174

175175

176176
_ = n*-4 // expected-error {{use of unresolved operator '*-'}}
177-
// expected-error @-1 2 {{operator is not a known binary operator}}
178177

179178
if n==-1 {} // expected-error {{use of unresolved operator '==-'}}
180-
// expected-error @-1 {{operator is not a known binary operator}}
181179

182180
prefix operator ☃⃠ {}
183181
prefix func☃⃠(a : Int) -> Int { return a }
@@ -187,9 +185,7 @@ postfix func☃⃠(a : Int) -> Int { return a }
187185
_ = n☃⃠ ☃⃠ n // Ok.
188186
_ = n ☃⃠ ☃⃠n // Ok.
189187
_ = n☃⃠☃⃠n // expected-error {{use of unresolved operator '☃⃠☃⃠'}}
190-
// expected-error @-1 2 {{operator is not a known binary operator}}
191188
_ = n ☃⃠☃⃠ n // expected-error {{use of unresolved operator '☃⃠☃⃠'}}
192-
// expected-error @-1 2 {{operator is not a known binary operator}}
193189

194190

195191

0 commit comments

Comments
 (0)