From: Shenghou Ma Date: Thu, 7 Aug 2014 22:34:25 +0000 (-0400) Subject: [dev.power64] cmd/9c: fix switch bug X-Git-Tag: go1.5beta1~2684^2~25^2~92 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=95e8a3a1da2ba736c685424ecd9f23f6e78f27aa;p=gostls13.git [dev.power64] cmd/9c: fix switch bug The cmd/cc bundled with 9c has additional code compared to our cmd/cc, and without those code, 9c couldn't handle switch statement where the expression is not just a simple int32 or int64 variable (e.g. g->status or int8 variable). All credit goes to rsc. LGTM=rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/125840043 --- diff --git a/src/cmd/9c/swt.c b/src/cmd/9c/swt.c index c912cd5ed8..83058e7ab9 100644 --- a/src/cmd/9c/swt.c +++ b/src/cmd/9c/swt.c @@ -32,11 +32,19 @@ void swit1(C1 *q, int nc, int32 def, Node *n) { - Node tn; - + Node tn, nod; + + regalloc(&nod, n, Z); + /* always signed */ + if(typev[n->type->etype]) + nod.type = types[TVLONG]; + else + nod.type = types[TLONG]; + cgen(n, &nod); regalloc(&tn, ®node, Z); - swit2(q, nc, def, n, &tn); + swit2(q, nc, def, &nod, &tn); regfree(&tn); + regfree(&nod); } void