mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +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:
parent
3cf83c182a
commit
1ec56062ef
@ -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);
|
||||
|
@ -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:
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user