don't try interface/structure conversion until
last resort, because it assumes every call is a
real use of the conversion.

R=ken
OCL=19026
CL=19026
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 13ad69a..e68833c 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -597,13 +597,6 @@
 		if(isptrarray(t) && isptrdarray(l->type))
 			goto ret;
 
-		// interface and structure
-		et = isandss(n->type, l);
-		if(et != Inone) {
-			indir(n, ifaceop(n->type, l, et));
-			goto ret;
-		}
-
 		// structure literal
 		if(t->etype == TSTRUCT) {
 			indir(n, structlit(n));
@@ -624,6 +617,13 @@
 			goto ret;
 		}
 
+		// interface and structure
+		et = isandss(n->type, l);
+		if(et != Inone) {
+			indir(n, ifaceop(n->type, l, et));
+			goto ret;
+		}
+
 		if(l->type != T)
 			yyerror("cannot convert %T to %T", l->type, t);
 		goto ret;