]> Cypherpunks repositories - gostls13.git/commitdiff
gc: fix unsafe.Sizeof
authorRuss Cox <rsc@golang.org>
Tue, 10 May 2011 21:00:15 +0000 (17:00 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 10 May 2011 21:00:15 +0000 (17:00 -0400)
Fixes #1608.
Fixes #1787.

R=ken2
CC=golang-dev
https://golang.org/cl/4530045

src/cmd/gc/unsafe.c
test/fixedbugs/bug338.go [new file with mode: 0644]
test/fixedbugs/bug339.go [new file with mode: 0644]

index 33f37563112b9036da4a585fe3c95e90795ab155..540994dddb12cd37abd0c4b8a374639cd483c5f4 100644 (file)
@@ -41,6 +41,7 @@ unsafenmagic(Node *nn)
                tr = r->type;
                if(tr == T)
                        goto bad;
+               dowidth(tr);
                v = tr->width;
                goto yes;
        }
diff --git a/test/fixedbugs/bug338.go b/test/fixedbugs/bug338.go
new file mode 100644 (file)
index 0000000..c368a7f
--- /dev/null
@@ -0,0 +1,22 @@
+// $G $D/$F.go
+
+// Copyright 2011 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.
+
+// Issue 1787.
+
+package main
+
+import "unsafe"
+
+const x = unsafe.Sizeof([8]byte{})
+
+func main() {
+       var b [x]int
+       _ = b
+}
+
+/*
+bug338.go:14: array bound must be non-negative
+*/
diff --git a/test/fixedbugs/bug339.go b/test/fixedbugs/bug339.go
new file mode 100644 (file)
index 0000000..eac7c5e
--- /dev/null
@@ -0,0 +1,20 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out
+
+// Copyright 2011 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.
+
+// Issue 1608.
+// Size used to be -1000000000.
+
+package main
+
+import "unsafe"
+
+func main() {
+       var a interface{} = 0
+       size := unsafe.Sizeof(a)
+       if size != 2*unsafe.Sizeof((*int)(nil)) {
+               println("wrong size: ", size)
+       }
+}