mirror of
https://github.com/golang/go
synced 2024-11-05 15:06:09 -07:00
1357f548b0
The introduction of temporaries in order.c was not quite right for two corner cases: 1) The rewrite that pushed new variables on the lhs of a receive into the body of the case was dropping the declaration of the variables. If the variables escape, the declaration is what allocates them. Caught by escape analysis sanity check. In fact the declarations should move into the body always, so that we only allocate if the corresponding case is selected. Do that. (This is an optimization that was already present in Go 1.2. The new order code just made it stop working.) Fixes #7997. 2) The optimization to turn a single-recv select into an ordinary receive assumed it could take the address of the destination; not so if the destination is _. Fixes #7998. LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/100480043
24 lines
381 B
Go
24 lines
381 B
Go
// compile
|
|
|
|
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// /tmp/x.go:5: cannot use _ as value
|
|
|
|
package p
|
|
|
|
func f(ch chan int) bool {
|
|
select {
|
|
case _, ok := <-ch:
|
|
return ok
|
|
}
|
|
_, ok := <-ch
|
|
_ = ok
|
|
select {
|
|
case _, _ = <-ch:
|
|
return true
|
|
}
|
|
return false
|
|
}
|