1// run
2
3// Copyright 2012 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Order of operations in select.
8
9package main
10
11func main() {
12	c := make(chan int, 1)
13	x := 0
14	select {
15	case c <- x: // should see x = 0, not x = 42 (after makec)
16	case <-makec(&x): // should be evaluated only after c and x on previous line
17	}
18	y := <-c
19	if y != 0 {
20		panic(y)
21	}
22}
23
24func makec(px *int) chan bool {
25	if false { for {} }
26	*px = 42
27	return make(chan bool, 0)
28}
29