summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2014-02-26 12:25:13 -0800
committerJosh Bleecher Snyder <josharian@gmail.com>2014-02-26 12:25:13 -0800
commit8fad972163af95723c7b53d83ce46a45261f4c46 (patch)
tree20a3e17667f20cf08d2736d09ea7fe9fd7a3e783
parentda2fe8deff666387ed72dab99263740d3c83874f (diff)
downloadgo-8fad972163af95723c7b53d83ce46a45261f4c46.tar.gz
cmd/gc: fix bad checknil with ints on 32 bit compilers
Fixes issue 7413. LGTM=rsc R=remyoudompheng CC=golang-codereviews, r, rsc https://codereview.appspot.com/69180044
-rw-r--r--src/cmd/gc/pgen.c4
-rw-r--r--test/nilptr4.go24
2 files changed, 26 insertions, 2 deletions
diff --git a/src/cmd/gc/pgen.c b/src/cmd/gc/pgen.c
index 1048a62cc..d05471ee3 100644
--- a/src/cmd/gc/pgen.c
+++ b/src/cmd/gc/pgen.c
@@ -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
index 000000000..3dd7d4e02
--- /dev/null
+++ b/test/nilptr4.go
@@ -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() {}