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
+       }
+}
+