1
0
mirror of https://github.com/golang/go synced 2024-11-22 01:44:40 -07:00

gc: fix unsafe.Sizeof on ideal constants

R=ken2
CC=golang-dev
https://golang.org/cl/1280041
This commit is contained in:
Russ Cox 2010-05-24 14:18:15 -07:00
parent 2034f72139
commit 80ac15ec12
2 changed files with 38 additions and 4 deletions

View File

@ -32,9 +32,8 @@ unsafenmagic(Node *fn, NodeList *args)
if(strcmp(s->name, "Sizeof") == 0) {
typecheck(&r, Erv);
defaultlit(&r, T);
tr = r->type;
if(r->op == OLITERAL && r->val.ctype == CTSTR)
tr = types[TSTRING];
if(tr == T)
goto no;
v = tr->width;
@ -49,9 +48,8 @@ unsafenmagic(Node *fn, NodeList *args)
}
if(strcmp(s->name, "Alignof") == 0) {
typecheck(&r, Erv);
defaultlit(&r, T);
tr = r->type;
if(r->op == OLITERAL && r->val.ctype == CTSTR)
tr = types[TSTRING];
if(tr == T)
goto no;

36
test/fixedbugs/bug279.go Normal file
View File

@ -0,0 +1,36 @@
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2010 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.
// http://code.google.com/p/go/issues/detail?id=799
package main
import "unsafe"
func main() {
n := unsafe.Sizeof(0)
if n != 4 && n != 8 {
println("BUG sizeof 0", n)
return
}
n = unsafe.Alignof(0)
if n != 4 && n != 8 {
println("BUG alignof 0", n)
return
}
n = unsafe.Sizeof("")
if n != 8 && n != 16 {
println("BUG sizeof \"\"", n)
return
}
n = unsafe.Alignof("")
if n != 4 && n != 8 {
println("BUG alignof \"\"", n)
return
}
}