cmd/compile: omit write barrier when assigning global function

Currently we generate write barriers when the right side of an
assignment is a global function. This doesn't fall into the existing
case of storing an address of a global because we haven't lowered the
function to a pointer yet.

This write barrier is unnecessary, so eliminate it.

Fixes #13901.

Change-Id: Ibc10e00a8803db0fd75224b66ab94c3737842a79
Reviewed-on: https://go-review.googlesource.com/20772
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
diff --git a/test/writebarrier.go b/test/writebarrier.go
index dcd20a0..e591eaa 100644
--- a/test/writebarrier.go
+++ b/test/writebarrier.go
@@ -158,3 +158,13 @@
 	}
 	return nil
 }
+
+type T17 struct {
+	f func(*T17)
+}
+
+func f17(x *T17) {
+	// See golang.org/issue/13901
+	x.f = f17                      // no barrier
+	x.f = func(y *T17) { *y = *x } // ERROR "write barrier"
+}