1// run
2
3// Copyright 2009 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
7package main
8
9import "os"
10
11func main() {
12	ok := true;
13	var a, b, c, x, y, z int;
14	f := func() int { b--; return -b };
15
16	// this fails on 6g: apparently it rewrites
17	// the list into
18	//	z = f();
19	//	y = f();
20	//	x = f();
21	// so that the values come out backward.
22	x, y, z = f(), f(), f();
23	if x != 1 || y != 2 || z != 3 {
24		println("xyz: expected 1 2 3 got", x, y, z);
25		ok = false;
26	}
27
28	// this fails on 6g too.  one of the function calls
29	// happens after assigning to b.
30	a, b, c = f(), f(), f();
31	if a != 4 || b != 5 || c != 6 {
32		println("abc: expected 4 5 6 got", a, b, c);
33		ok = false;
34	}
35
36	if !ok {
37		os.Exit(1);
38	}
39}
40