Commit 85dd62d5 authored by Matthew Dempsky's avatar Matthew Dempsky

cmd/compile: add missing write barriers for return statements

Copying return values to heap-escaped result parameters requires write
barriers.

Fixes #13587.

Change-Id: Ifa04ff7fa4adcc6393acdd82e527beb8f2a00a8b
Reviewed-on: https://go-review.googlesource.com/17762Reviewed-by: 's avatarKeith Randall <khr@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent bea9ae2f
......@@ -322,6 +322,9 @@ func walkstmt(np **Node) {
ll := ascompatee(n.Op, rl, n.List, &n.Ninit)
n.List = reorder3(ll)
for lr := n.List; lr != nil; lr = lr.Next {
lr.N = applywritebarrier(lr.N, &n.Ninit)
}
break
}
......
// errorcheck -0 -l -d=wb
// Copyright 2015 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 write barrier for implicit assignments to result parameters
// that have escaped to the heap.
package issue13587
import "errors"
func escape(p *error)
func F() (err error) {
escape(&err)
return errors.New("error") // ERROR "write barrier"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment