diff options
Diffstat (limited to 'src/cmd/cc')
| -rw-r--r-- | src/cmd/cc/godefs.c | 6 | ||||
| -rw-r--r-- | src/cmd/cc/pgen.c | 18 | ||||
| -rw-r--r-- | src/cmd/cc/pswt.c | 2 |
3 files changed, 9 insertions, 17 deletions
diff --git a/src/cmd/cc/godefs.c b/src/cmd/cc/godefs.c index 3ba979c8a..4274c5626 100644 --- a/src/cmd/cc/godefs.c +++ b/src/cmd/cc/godefs.c @@ -124,11 +124,11 @@ Uconv(Fmt *fp) if(s && *s) { if(upper) - str[0] = toupper(*s); + str[0] = toupper((uchar)*s); else - str[0] = tolower(*s); + str[0] = tolower((uchar)*s); for(i = 1; i < STRINGSZ && s[i] != 0; i++) - str[i] = tolower(s[i]); + str[i] = tolower((uchar)s[i]); str[i] = 0; } diff --git a/src/cmd/cc/pgen.c b/src/cmd/cc/pgen.c index 0e5e8c059..3a686102f 100644 --- a/src/cmd/cc/pgen.c +++ b/src/cmd/cc/pgen.c @@ -266,7 +266,7 @@ loop: if(cases == C) diag(n, "case/default outside a switch"); if(l == Z) { - cas(); + newcase(); cases->val = 0; cases->def = 1; cases->label = pc; @@ -278,7 +278,7 @@ loop: goto rloop; if(l->op == OCONST) if(typeword[l->type->etype] && l->type->etype != TIND) { - cas(); + newcase(); cases->val = l->vconst; cases->def = 0; cases->label = pc; @@ -293,7 +293,7 @@ loop: complex(l); if(l->type == T) break; - if(!typeword[l->type->etype] || l->type->etype == TIND) { + if(!typechlvp[l->type->etype] || l->type->etype == TIND) { diag(n, "switch expression must be integer"); break; } @@ -303,7 +303,7 @@ loop: cn = cases; cases = C; - cas(); + newcase(); sbc = breakpc; breakpc = pc; @@ -320,15 +320,7 @@ loop: } patch(sp, pc); - regalloc(&nod, l, Z); - /* always signed */ - if(typev[l->type->etype]) - nod.type = types[TVLONG]; - else - nod.type = types[TLONG]; - cgen(l, &nod); - doswit(&nod); - regfree(&nod); + doswit(l); patch(spb, pc); cases = cn; diff --git a/src/cmd/cc/pswt.c b/src/cmd/cc/pswt.c index 0e402dea7..b94035faa 100644 --- a/src/cmd/cc/pswt.c +++ b/src/cmd/cc/pswt.c @@ -92,7 +92,7 @@ doswit(Node *n) } void -cas(void) +newcase(void) { Case *c; |
