|  | // $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); | 
|  | } | 
|  | } |