diff options
-rw-r--r-- | doc/go_spec.html | 1 | ||||
-rw-r--r-- | src/cmd/gc/const.c | 4 | ||||
-rw-r--r-- | src/cmd/gc/subr.c | 7 | ||||
-rw-r--r-- | src/cmd/gc/typecheck.c | 2 | ||||
-rw-r--r-- | test/bugs/placeholder | 2 | ||||
-rw-r--r-- | test/fixedbugs/bug193.go (renamed from test/bugs/bug193.go) | 0 | ||||
-rw-r--r-- | test/golden.out | 3 | ||||
-rwxr-xr-x | test/run | 5 |
8 files changed, 13 insertions, 11 deletions
diff --git a/doc/go_spec.html b/doc/go_spec.html index 1f0b52090..40c65dfdb 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -9,6 +9,7 @@ Todo (struct{T} vs struct {T T} vs struct {t T}) [ ] need explicit language about the result type of operations [ ] may want to have some examples for the types of shift operations +[ ] should string(1<<s) and float(1<<s) be valid? [ ] should probably write something about evaluation order of statements even though obvious [ ] specify iteration direction for range clause diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index dd0cc15e5..582990419 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -96,7 +96,7 @@ convlit1(Node **np, Type *t, int explicit) break; case OLSH: case ORSH: - convlit(&n->left, t); + convlit1(&n->left, t, explicit); t = n->left->type; if(t != T && !isint[t->etype]) { yyerror("invalid operation: %#N (shift of type %T)", n, t); @@ -292,7 +292,7 @@ tostr(Val v) case CTFLT: yyerror("no float -> string"); - + case CTNIL: memset(&v, 0, sizeof v); v.ctype = CTSTR; diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index 06a05895b..ccb2b7653 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -1455,11 +1455,12 @@ Zconv(Fmt *fp) s += chartorune(&r, s); switch(r) { default: + if(r < ' ') { + fmtprint(fp, "\\x%02x", r); + break; + } fmtrune(fp, r); break; - case '\0': - fmtstrcpy(fp, "\\x00"); - break; case '\t': fmtstrcpy(fp, "\\t"); break; diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 6c90004cf..b87da5425 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -765,7 +765,7 @@ reswitch: doconv: ok |= Erv; typecheck(&n->left, Erv | (top & Eindir)); - defaultlit(&n->left, n->type); + convlit1(&n->left, n->type, 1); if((t = n->left->type) == T || n->type == T) goto error; n = typecheckconv(n, n->left, n->type, 1); diff --git a/test/bugs/placeholder b/test/bugs/placeholder new file mode 100644 index 000000000..b816d34fc --- /dev/null +++ b/test/bugs/placeholder @@ -0,0 +1,2 @@ +This file keeps Mercurial from deleting the directory +when there are no known bugs. diff --git a/test/bugs/bug193.go b/test/fixedbugs/bug193.go index f6b03e13d..f6b03e13d 100644 --- a/test/bugs/bug193.go +++ b/test/fixedbugs/bug193.go diff --git a/test/golden.out b/test/golden.out index 79c2990bb..c87d7e519 100644 --- a/test/golden.out +++ b/test/golden.out @@ -201,6 +201,3 @@ throw: interface conversion panic PC=xxx == bugs/ - -=========== bugs/bug193.go -BUG: errchk: bugs/bug193.go:14: missing expected error: 'shift' @@ -47,7 +47,7 @@ for dir in . ken chan interface nilptr fixedbugs bugs do echo echo '==' $dir'/' - for i in $dir/*.go + for i in $(ls $dir/*.go 2>/dev/null) do export F=$(basename $i .go) export D=$dir @@ -75,8 +75,9 @@ done | # clean up some stack noise egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' | sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/ s!'$RUNFILE'!$RUNFILE!g - s/ PC=0x[0-9a-f]*/ PC=xxx/ + s/^PC=0x[0-9a-f]*/pc: xxx/ s/^pc: 0x[0-9a-f]*/pc: xxx/ + s/PC=0x[0-9a-f]*/PC=xxx/ /^Trace\/breakpoint trap/d /^Trace\/BPT trap/d /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/ |