From 95e8a3a1da2ba736c685424ecd9f23f6e78f27aa Mon Sep 17 00:00:00 2001 From: Shenghou Ma Date: Thu, 7 Aug 2014 18:34:25 -0400 Subject: [PATCH] [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 --- src/cmd/9c/swt.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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 -- 2.50.0