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