]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/gc: fix bad checknil with ints on 32 bit compilers
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 26 Feb 2014 20:25:13 +0000 (12:25 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 26 Feb 2014 20:25:13 +0000 (12:25 -0800)
Fixes #7413.

LGTM=rsc
R=remyoudompheng
CC=golang-codereviews, r, rsc
https://golang.org/cl/69180044

src/cmd/gc/pgen.c
test/nilptr4.go [new file with mode: 0644]

index 1048a62cc8bb158f9f10b1d602e90aa90081dc3a..d05471ee301135032d8cd322a81c453610c81c65 100644 (file)
@@ -471,8 +471,8 @@ cgen_checknil(Node *n)
 
        if(disable_checknil)
                return;
-       // Ideally we wouldn't see any TUINTPTR here, but we do.
-       if(n->type == T || (!isptr[n->type->etype] && n->type->etype != TUINTPTR && n->type->etype != TUNSAFEPTR)) {
+       // Ideally we wouldn't see any integer types here, but we do.
+       if(n->type == T || (!isptr[n->type->etype] && !isint[n->type->etype] && n->type->etype != TUNSAFEPTR)) {
                dump("checknil", n);
                fatal("bad checknil");
        }
diff --git a/test/nilptr4.go b/test/nilptr4.go
new file mode 100644 (file)
index 0000000..3dd7d4e
--- /dev/null
@@ -0,0 +1,24 @@
+// build
+
+// Copyright 2014 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.
+
+// Test that the compiler does not crash during compilation.
+
+package main
+
+import "unsafe"
+
+// Issue 7413
+func f1() {
+       type t struct {
+               i int
+       }
+
+       var v *t
+       _ = int(uintptr(unsafe.Pointer(&v.i)))
+       _ = int32(uintptr(unsafe.Pointer(&v.i)))
+}
+
+func main() {}