]> Cypherpunks repositories - gostls13.git/commitdiff
gc: fix unsafe.Sizeof on ideal constants
authorRuss Cox <rsc@golang.org>
Mon, 24 May 2010 21:18:15 +0000 (14:18 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 24 May 2010 21:18:15 +0000 (14:18 -0700)
R=ken2
CC=golang-dev
https://golang.org/cl/1280041

src/cmd/gc/unsafe.c
test/fixedbugs/bug279.go [new file with mode: 0644]

index 5d27dd648d7b550552438eb650a2153baf11be24..423fc08c6ef64b36f2d52efc096bde4c702fb48b 100644 (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;
 
diff --git a/test/fixedbugs/bug279.go b/test/fixedbugs/bug279.go
new file mode 100644 (file)
index 0000000..af8e056
--- /dev/null
@@ -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
+       }
+}
+