summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/gc/walk.c22
-rw-r--r--src/lib/io/pipe_test.go2
2 files changed, 11 insertions, 13 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 73872213f..13e915fc1 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -1955,7 +1955,7 @@ ascompat(Type *dst, Type *src)
if(eqtype(dst, src, 0))
return 1;
- if(isslice(dst) && isfixedarray(src))
+ if(isslice(dst) && isfixedarray(src) && eqtype(dst->type, src->type, 0))
return 1;
if(isnilinter(dst) || isnilinter(src))
@@ -2080,6 +2080,8 @@ makecompat(Node *n)
if(t != T)
switch(t->etype) {
case TARRAY:
+ if(!isslice(t))
+ goto bad;
return arrayop(n, Erv);
case TMAP:
return mapop(n, Erv);
@@ -2087,15 +2089,11 @@ makecompat(Node *n)
return chanop(n, Erv);
}
- /*
- * ken had code to malloc here,
- * but rsc cut it out so that make(int)
- * is diagnosed as an error (probably meant new).
- * might come back once we know the
- * language semantics for make(int).
- */
-
- yyerror("cannot make(%T)", t);
+bad:
+ if(!n->diag) {
+ n->diag = 1;
+ yyerror("cannot make(%T)", t);
+ }
return n;
}
@@ -3223,7 +3221,7 @@ dorange(Node *nn)
ary:
hk = nod(OXXX, N, N); // hidden key
tempname(hk, types[TINT]);
-
+
ha = nod(OXXX, N, N); // hidden array
tempname(ha, t);
@@ -3305,7 +3303,7 @@ chan:
hc = nod(OXXX, N, N); // hidden chan
tempname(hc, t);
-
+
hv = nod(OXXX, N, N); // hidden value
tempname(hv, t->type);
diff --git a/src/lib/io/pipe_test.go b/src/lib/io/pipe_test.go
index 981197600..df2ed8941 100644
--- a/src/lib/io/pipe_test.go
+++ b/src/lib/io/pipe_test.go
@@ -148,7 +148,7 @@ func testPipeReadClose(t *testing.T, async bool) {
} else {
delayClose(t, w, c);
}
- var buf [64]int;
+ var buf [64]byte;
n, err := r.Read(buf);
<-c;
if err != nil {