diff options
author | Russ Cox <rsc@golang.org> | 2009-04-16 23:07:30 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-04-16 23:07:30 -0700 |
commit | df02778ccda228c665179d0ff3dac77217ad6633 (patch) | |
tree | f2cd2aa5dfc0822885e98ff8f7e1419129c2c30a | |
parent | 5d2e2e64ba963e53d35350de8e2d4ba2891c9555 (diff) | |
download | golang-df02778ccda228c665179d0ff3dac77217ad6633.tar.gz |
make string(array) take []byte only (and thus *[10]byte but not [10]byte)
R=ken
OCL=27581
CL=27585
-rw-r--r-- | src/cmd/gc/walk.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 1fa07dec0..f64ada8a4 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -1230,8 +1230,9 @@ walkconv(Node *n) indir(n, stringop(n, Erv)); return; } - if(et == TARRAY) - if(istype(l->type->type, TUINT8)) { + // can convert []byte and *[10]byte + if((isptr[et] && isfixedarray(l->type->type) && istype(l->type->type->type, TUINT8)) + || (isslice(l->type) && istype(l->type->type, TUINT8))) { n->op = OARRAY; indir(n, stringop(n, Erv)); return; @@ -1267,6 +1268,9 @@ walkconv(Node *n) } bad: + if(n->diag) + return; + n->diag = 1; if(l->type != T) yyerror("invalid conversion: %T to %T", l->type, t); else @@ -2204,8 +2208,6 @@ stringop(Node *n, int top) case OARRAY: // arraystring([]byte) string; r = n->left; - if(isfixedarray(r->type)) - r = nod(OADDR, r, N); on = syslook("arraystring", 0); r = nod(OCALL, on, r); break; |