summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorR?my Oudompheng <oudomphe@phare.normalesup.org>2014-07-01 09:20:51 +0200
committerR?my Oudompheng <oudomphe@phare.normalesup.org>2014-07-01 09:20:51 +0200
commitc2deeabade9ed68a67ff3428c954110e6cbe4a9a (patch)
treea381a99424d1f9b5b75df1c3949442f3f3807962 /src/cmd
parent2f2707c79d7a458ed0a170b41033fd42b3732a7f (diff)
downloadgo-c2deeabade9ed68a67ff3428c954110e6cbe4a9a.tar.gz
cmd/8g: don't allocate a register early for cap(CHAN).
There is no reason to generate different code for cap and len. Fixes issue 8025. Fixes issue 8026. LGTM=rsc R=rsc, iant, khr CC=golang-codereviews https://codereview.appspot.com/93570044
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/8g/cgen.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c
index d626c2eb0..5988a4328 100644
--- a/src/cmd/8g/cgen.c
+++ b/src/cmd/8g/cgen.c
@@ -347,8 +347,11 @@ cgen(Node *n, Node *res)
if(istype(nl->type, TCHAN)) {
// chan has cap in the second 32-bit word.
// a zero pointer means zero length
- regalloc(&n1, types[tptr], res);
+ tempname(&n1, types[tptr]);
cgen(nl, &n1);
+ regalloc(&n2, types[tptr], N);
+ gmove(&n1, &n2);
+ n1 = n2;
nodconst(&n2, types[tptr], 0);
gins(optoas(OCMP, types[tptr]), &n1, &n2);