]> Cypherpunks repositories - gostls13.git/commitdiff
bug in parallel assignment
authorRuss Cox <rsc@golang.org>
Thu, 4 Jun 2009 00:26:53 +0000 (17:26 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 4 Jun 2009 00:26:53 +0000 (17:26 -0700)
R=r
DELTA=40  (40 added, 0 deleted, 0 changed)
OCL=29850
CL=29855

test/bugs/bug159.go [new file with mode: 0644]
test/golden.out

diff --git a/test/bugs/bug159.go b/test/bugs/bug159.go
new file mode 100644 (file)
index 0000000..1aa6443
--- /dev/null
@@ -0,0 +1,39 @@
+// $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);
+       }
+}
index 34f2d75ad7951b7e391ccf60af3ff6b41f67c1fb..275fb7eb5735fa307d78f8830c7f773bbf88e87d 100644 (file)
@@ -101,6 +101,11 @@ BUG should compile
 5 7
 BUG: should crash
 
+=========== bugs/bug159.go
+xyz: expected 1 2 3 got 3 2 1
+abc: expected 4 5 6 got -4 4 4
+BUG: bug159
+
 =========== fixedbugs/bug016.go
 fixedbugs/bug016.go:7: constant -3 overflows uint