cmd/gc: Don't claim type assertion would help when it wont.
Fixes #3465.
R=golang-dev, rsc, remyoudompheng, iant
CC=golang-dev
https://golang.org/cl/6448097
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index dfb425e..0cd7e6c 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -1219,7 +1219,7 @@
return 0;
}
if(src->etype == TINTER && dst->etype != TBLANK) {
- if(why != nil)
+ if(why != nil && implements(dst, src, &missing, &have, &ptr))
*why = ": need type assertion";
return 0;
}
diff --git a/test/interface/explicit.go b/test/interface/explicit.go
index d19480a..7822b88 100644
--- a/test/interface/explicit.go
+++ b/test/interface/explicit.go
@@ -40,7 +40,7 @@
// because i has an extra method
// that t does not, so i cannot contain a t.
i = t // ERROR "incompatible|missing M method"
- t = i // ERROR "incompatible|need type assertion"
+ t = i // ERROR "incompatible|assignment$"
i = i2 // ok
i2 = i // ERROR "incompatible|missing N method"