From 3f335f80b46d0a8fbaf8c3c56011e37c959ccf35 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 10 May 2011 17:00:15 -0400 Subject: [PATCH] gc: fix unsafe.Sizeof Fixes #1608. Fixes #1787. R=ken2 CC=golang-dev https://golang.org/cl/4530045 --- src/cmd/gc/unsafe.c | 1 + test/fixedbugs/bug338.go | 22 ++++++++++++++++++++++ test/fixedbugs/bug339.go | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 test/fixedbugs/bug338.go create mode 100644 test/fixedbugs/bug339.go diff --git a/src/cmd/gc/unsafe.c b/src/cmd/gc/unsafe.c index 33f37563112..540994dddb1 100644 --- a/src/cmd/gc/unsafe.c +++ b/src/cmd/gc/unsafe.c @@ -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 index 00000000000..c368a7fadc5 --- /dev/null +++ b/test/fixedbugs/bug338.go @@ -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 index 00000000000..eac7c5ee623 --- /dev/null +++ b/test/fixedbugs/bug339.go @@ -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) + } +}