gc: bug325 / issue 1566
Fixes #1566.
R=ken2
CC=golang-dev
https://golang.org/cl/4259041
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 49df503..94e6dc5 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -203,7 +203,6 @@
flusherrors();
-*(int*)0=0;
print("%L: internal compiler error: ", lineno);
va_start(arg, fmt);
vfprint(1, fmt, arg);
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 731e5a4..3e8f358 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -318,7 +318,7 @@
n->left = N;
goto ret;
}
- if(!isptr[t->etype]) {
+ if(!isptr[t->etype] || (t->type != T && t->type->etype == TANY) /* unsafe.Pointer */) {
yyerror("invalid indirect of %+N", n->left);
goto error;
}
diff --git a/test/fixedbugs/bug325.go b/test/fixedbugs/bug325.go
new file mode 100644
index 0000000..23dbc8b
--- /dev/null
+++ b/test/fixedbugs/bug325.go
@@ -0,0 +1,14 @@
+// errchk $G $D/$F.go
+
+// Copyright 2011 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.
+
+package main
+
+import "unsafe"
+
+func main() {
+ var x unsafe.Pointer
+ println(*x) // ERROR "invalid indirect.*unsafe.Pointer"
+}