Index: test/fixedbugs/issue4313.go |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/test/fixedbugs/issue4313.go |
@@ -0,0 +1,28 @@ |
+// 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) |
+} |