| // $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug159 | |
| // 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); | |
| } | |
| } |