assignment count mismatch: 2 = 1.

R=ken
OCL=23534
CL=23534
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 461c00b..abb08eb 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -185,6 +185,7 @@
 	uchar	iota;		// OLITERAL made from iota
 	uchar	embedded;	// ODCLFIELD embedded type
 	uchar	colas;		// OAS resulting from :=
+	uchar	diag;		// already printed error about this
 
 	// most nodes
 	Node*	left;
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 48ab2a6..99fe055 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -534,8 +534,10 @@
 			}
 			break;
 		}
-
-		yyerror("bad shape across assignment - cr=%d cl=%d\n", cr, cl);
+		if(l->diag == 0) {
+			l->diag = 1;
+			yyerror("assignment count mismatch: %d = %d", cl, cr);
+		}
 		goto ret;
 
 	case OBREAK:
@@ -3083,7 +3085,10 @@
 	return n;
 
 badt:
-	yyerror("shape error across :=");
+	if(nl->diag == 0) {
+		nl->diag = 1;
+		yyerror("assignment count mismatch: %d = %d", cl, cr);
+	}
 	return nl;
 }