gc: fix unsafe.Sizeof

Fixes #1608.
Fixes #1787.

R=ken2
CC=golang-dev
https://golang.org/cl/4530045
This commit is contained in:
Russ Cox 2011-05-10 17:00:15 -04:00
parent 0389051aac
commit 3f335f80b4
3 changed files with 43 additions and 0 deletions

View File

@ -41,6 +41,7 @@ unsafenmagic(Node *nn)
tr = r->type;
if(tr == T)
goto bad;
dowidth(tr);
v = tr->width;
goto yes;
}

22
test/fixedbugs/bug338.go Normal file
View File

@ -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
*/

20
test/fixedbugs/bug339.go Normal file
View File

@ -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)
}
}