]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: omit write barriers for slice clears of go:notinheap pointers
authorAustin Clements <austin@google.com>
Wed, 5 Dec 2018 20:23:26 +0000 (15:23 -0500)
committerAustin Clements <austin@google.com>
Wed, 5 Dec 2018 21:54:54 +0000 (21:54 +0000)
commit6454a09a97ff583bd81d59733777a000caf8b79a
treecc9a95229bd3da89f3db56b9ea8972b289721045
parentc8ca793176cfae8a9fc501d6e37896304f483f2e
cmd/compile: omit write barriers for slice clears of go:notinheap pointers

Currently,

  for i := range a {
    a[i] = nil
  }

will compile to have write barriers even if a is a slice of pointers
to go:notinheap types. This happens because the optimization that
transforms this into a memclr only asks it a's element type has
pointers, and not if it specifically has heap pointers.

Fix this by changing arrayClear to use HasHeapPointer instead of
types.Haspointers. We probably shouldn't have both of these functions,
since a pointer to a notinheap type is effectively a uintptr, but
that's not going to change in this CL.

Change-Id: I284b85bdec6ae1e641f894e8f577989facdb0cf1
Reviewed-on: https://go-review.googlesource.com/c/152723
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/gc/range.go
test/notinheap3.go