gc: interface error message fixes

Fixes #1526.

R=ken2
CC=golang-dev
https://golang.org/cl/4190051
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 0755ca3..49df503 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -1909,8 +1909,12 @@
 		return 0;
 	}
 	if(src->etype == TINTER && dst->etype != TBLANK) {
-		if(why != nil)
-			*why = ": need type assertion";
+		if(why != nil) {
+			if(isptrto(dst, TINTER))
+				*why = smprint(":\n\t%T is interface, not pointer to interface", src);
+			else	
+				*why = ": need type assertion";
+		}
 		return 0;
 	}
 
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 5edca96..731e5a4 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -1613,7 +1613,7 @@
 					exportassignok(tn->type, desc);
 					if(assignop(tn->type, tl->type->type, &why) == 0) {
 						if(call != N)
-							yyerror("cannot use %T as type %T in argument to %#N%s", tn->type, tl->type->type, desc, call, why);
+							yyerror("cannot use %T as type %T in argument to %#N%s", tn->type, tl->type->type, call, why);
 						else
 							yyerror("cannot use %T as type %T in %s%s", tn->type, tl->type->type, desc, why);
 					}
@@ -1625,7 +1625,7 @@
 			exportassignok(tn->type, desc);
 			if(assignop(tn->type, tl->type, &why) == 0) {
 				if(call != N)
-					yyerror("cannot use %T as type %T in argument to %#N%s", tn->type, tl->type, desc, call, why);
+					yyerror("cannot use %T as type %T in argument to %#N%s", tn->type, tl->type, call, why);
 				else
 					yyerror("cannot use %T as type %T in %s%s", tn->type, tl->type, desc, why);
 			}