diff options
Diffstat (limited to 'src')
-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 |
3 files changed, 7 insertions, 6 deletions
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); |