summaryrefslogtreecommitdiff
path: root/src/cmd/cc/pgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/cc/pgen.c')
-rw-r--r--src/cmd/cc/pgen.c18
1 files changed, 5 insertions, 13 deletions
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;