From 3e54ca9a4624fda0bcd76192aa529e826ef12b4f Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Wed, 16 Mar 2016 18:22:58 -0400 Subject: 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 Reviewed-by: Keith Randall --- src/cmd/compile/internal/gc/walk.go | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/cmd') diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go index b4c38ec12b..69c8390fe0 100644 --- a/src/cmd/compile/internal/gc/walk.go +++ b/src/cmd/compile/internal/gc/walk.go @@ -2140,6 +2140,12 @@ func needwritebarrier(l *Node, r *Node) bool { return false } + // No write barrier for storing global function, which is live + // no matter what. + if r.Op == ONAME && r.Class == PFUNC { + return false + } + // Otherwise, be conservative and use write barrier. return true } -- cgit v1.3-5-g9baa