| // run |
| |
| // Copyright 2009 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. |
| |
| package main |
| |
| import "os" |
| |
| func main() { |
| ok := true; |
| var a, b, c, x, y, z int; |
| f := func() int { b--; return -b }; |
| |
| // this fails on 6g: apparently it rewrites |
| // the list into |
| // z = f(); |
| // y = f(); |
| // x = f(); |
| // so that the values come out backward. |
| x, y, z = f(), f(), f(); |
| if x != 1 || y != 2 || z != 3 { |
| println("xyz: expected 1 2 3 got", x, y, z); |
| ok = false; |
| } |
| |
| // this fails on 6g too. one of the function calls |
| // happens after assigning to b. |
| a, b, c = f(), f(), f(); |
| if a != 4 || b != 5 || c != 6 { |
| println("abc: expected 4 5 6 got", a, b, c); |
| ok = false; |
| } |
| |
| if !ok { |
| os.Exit(1); |
| } |
| } |