]> Cypherpunks repositories - gostls13.git/commitdiff
- 2 bugs with composite literals
authorRobert Griesemer <gri@golang.org>
Fri, 12 Sep 2008 00:11:16 +0000 (17:11 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 12 Sep 2008 00:11:16 +0000 (17:11 -0700)
R=r
OCL=15179
CL=15179

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

diff --git a/test/bugs/bug096.go b/test/bugs/bug096.go
new file mode 100644 (file)
index 0000000..f66caa5
--- /dev/null
@@ -0,0 +1,25 @@
+// $G $D/$F.go || echo BUG should compile
+
+// 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
+
+type A []int;
+
+func main() {
+       a := &A{0};
+       b := &A{0, 1};
+}
+
+/*
+uetli:~/Source/go1/test/bugs gri$ 6g bug096.go && 6l bug096.6 && 6.out
+Trace/BPT trap
+uetli:~/Source/go1/test/bugs gri$ 
+*/
+
+/*
+It appears that the first assignment changes the size of A from open
+into a fixed array.
+*/
diff --git a/test/bugs/bug097.go b/test/bugs/bug097.go
new file mode 100644 (file)
index 0000000..2137683
--- /dev/null
@@ -0,0 +1,47 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG wrong result
+
+// 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
+
+type A []int;
+
+func main() {
+       var a [3]*A;
+       for i := 0; i < 3; i++ {
+               a[i] = &A{i};
+       }
+       if a[0][0] != 0 { panic(); }
+       if a[1][0] != 1 { panic(); }
+       if a[2][0] != 2 { panic(); }
+}
+
+/*
+uetli:~/Source/go1/test/bugs gri$ 6g bug097.go && 6l bug097.6 && 6.out
+
+panic on line 342 PC=0x13c2
+0x13c2?zi
+       main·main(1, 0, 1606416416, ...)
+       main·main(0x1, 0x7fff5fbff820, 0x0, ...)
+SIGTRAP: trace trap
+Faulting address: 0x4558
+pc: 0x4558
+
+0x4558?zi
+       sys·breakpoint(40960, 0, 45128, ...)
+       sys·breakpoint(0xa000, 0xb048, 0xa000, ...)
+0x156a?zi
+       sys·panicl(342, 0, 0, ...)
+       sys·panicl(0x156, 0x300000000, 0xb024, ...)
+0x13c2?zi
+       main·main(1, 0, 1606416416, ...)
+       main·main(0x1, 0x7fff5fbff820, 0x0, ...)
+*/
+
+/* An array composite literal needs to be created freshly every time.
+   It is a "construction" of an array after all. If I pass the address
+   of the array to some function, it may store it globally. Same applies
+   to struct literals.
+*/
index ab68f8b054ea00119662d323346b4885a0a12693..39273b2257649dab8c7966c26bb1a78d266e7aa6 100644 (file)
@@ -156,6 +156,15 @@ panic on line 342 PC=0x139e
 BUG wrong result
 Trace/BPT trap          ./$A.out
 
+=========== bugs/bug097.go
+
+panic on line 344 PC=0x13c2
+0x13c2?zi
+       main·main(1, 0, 1606416392, ...)
+       main·main(0x1, 0x7fff5fbff808, 0x0, ...)
+BUG wrong result
+Trace/BPT trap          ./$A.out
+
 =========== fixedbugs/bug015.go
 fixedbugs/bug015.go:7: overflow converting constant to <int64>INT64