// run | |
// Copyright 2012 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. | |
// Order of operations in select. | |
package main | |
func main() { | |
c := make(chan int, 1) | |
x := 0 | |
select { | |
case c <- x: // should see x = 0, not x = 42 (after makec) | |
case <-makec(&x): // should be evaluated only after c and x on previous line | |
} | |
y := <-c | |
if y != 0 { | |
panic(y) | |
} | |
} | |
func makec(px *int) chan bool { | |
if false { for {} } | |
*px = 42 | |
return make(chan bool, 0) | |
} |