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;
}
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;
--- /dev/null
+// $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
+ }
+}
+