summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd/gc/const.c4
-rw-r--r--src/cmd/gc/subr.c7
-rw-r--r--src/cmd/gc/typecheck.c2
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);