1
0
mirror of https://github.com/golang/go synced 2024-07-03 08:51:14 +00:00

cmd/8g: don't allocate a register early for cap(CHAN).

There is no reason to generate different code for cap and len.

Fixes #8025.
Fixes #8026.

LGTM=rsc
R=rsc, iant, khr
CC=golang-codereviews
https://golang.org/cl/93570044
This commit is contained in:
Rémy Oudompheng 2014-07-01 09:20:51 +02:00
parent 3cf83c182a
commit 1ec56062ef
2 changed files with 11 additions and 1 deletions

View File

@ -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);

View File

@ -337,3 +337,10 @@ func ChainDivConst(a int) int {
func ChainMulBytes(a, b, c byte) byte {
return a*(a*(a*(a*(a*(a*(a*(a*(a*b+c)+c)+c)+c)+c)+c)+c)+c) + c
}
func ChainCap() {
select {
case <-make(chan int, cap(make(chan int, cap(make(chan int, cap(make(chan int, cap(make(chan int))))))))):
default:
}
}