aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Morsing <daniel.morsing@gmail.com>2012-09-22 05:54:37 +1000
committerIan Lance Taylor <iant@golang.org>2012-09-22 05:54:37 +1000
commitc7c975809b53b8af0012a71334fa63c37348f592 (patch)
treea33d7f4f6bf65a2a8c62ada335418baf99ad9185
parentdde4af36555c8a0b25ea61103c337c16dbdc53bd (diff)
downloadgo-c7c975809b53b8af0012a71334fa63c37348f592.tar.gz
go-c7c975809b53b8af0012a71334fa63c37348f592.zip
[release-branch.go1] cmd/gc: Don't claim type assertion would help when it wont.
««« backport b76339cc168a 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 »»»
-rw-r--r--src/cmd/gc/subr.c2
-rw-r--r--test/interface/explicit.go2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index b56e848db7..c264974241 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -1214,7 +1214,7 @@ assignop(Type *src, Type *dst, char **why)
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 d19480a685..7822b88d08 100644
--- a/test/interface/explicit.go
+++ b/test/interface/explicit.go
@@ -40,7 +40,7 @@ func main() {
// 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"