From: Russ Cox Date: Mon, 24 May 2010 21:18:15 +0000 (-0700) Subject: gc: fix unsafe.Sizeof on ideal constants X-Git-Tag: weekly.2010-05-27~32 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=80ac15ec12e265f2958195e7fad7030dac4de3d7;p=gostls13.git gc: fix unsafe.Sizeof on ideal constants R=ken2 CC=golang-dev https://golang.org/cl/1280041 --- diff --git a/src/cmd/gc/unsafe.c b/src/cmd/gc/unsafe.c index 5d27dd648d..423fc08c6e 100644 --- a/src/cmd/gc/unsafe.c +++ b/src/cmd/gc/unsafe.c @@ -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; diff --git a/test/fixedbugs/bug279.go b/test/fixedbugs/bug279.go new file mode 100644 index 0000000000..af8e056d97 --- /dev/null +++ b/test/fixedbugs/bug279.go @@ -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 + } +} +