mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
cmd/compile: mark memclrHasPointers calls as write barriers
There are two places where the compiler generates memclrHasPointers calls. These are effectively write barriers, but the compiler doesn't currently record them as such in the function. As a result code like for i := range a { a[i] = nil } inserts a write barrier for the assignment to a[i], but the compiler doesn't report this. Hence, it's not reported in the -d=wb output, and it's not checked against //go:nowritebarrier annotations. Change-Id: I40299ebc9824f05cf516cba494d4c086b80ffb53 Reviewed-on: https://go-review.googlesource.com/c/152722 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
162de6b5f0
commit
c8ca793176
|
@ -588,6 +588,7 @@ func arrayClear(n, v1, v2, a *Node) bool {
|
|||
var fn *Node
|
||||
if types.Haspointers(a.Type.Elem()) {
|
||||
// memclrHasPointers(hp, hn)
|
||||
Curfn.Func.setWBPos(stmt.Pos)
|
||||
fn = mkcall("memclrHasPointers", nil, nil, hp, hn)
|
||||
} else {
|
||||
// memclrNoHeapPointers(hp, hn)
|
||||
|
|
|
@ -2860,6 +2860,7 @@ func extendslice(n *Node, init *Nodes) *Node {
|
|||
hasPointers := types.Haspointers(elemtype)
|
||||
if hasPointers {
|
||||
clrname = "memclrHasPointers"
|
||||
Curfn.Func.setWBPos(n.Pos)
|
||||
}
|
||||
|
||||
var clr Nodes
|
||||
|
|
Loading…
Reference in a new issue