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:
parent
2034f72139
commit
80ac15ec12
@ -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
36
test/fixedbugs/bug279.go
Normal 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
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user