aboutsummaryrefslogtreecommitdiff
path: root/test/live.go
diff options
context:
space:
mode:
authorKeith Randall <khr@google.com>2018-02-27 13:46:03 -0800
committerKeith Randall <khr@golang.org>2018-02-27 22:58:32 +0000
commit2413b5488841903ad99463962f50f85221733c30 (patch)
tree46a242b1f8cf5fc9c158cf3d562d4b9291c556a5 /test/live.go
parentb80b4a23d135c12d91e71ba51e906cb5783f4d61 (diff)
downloadgo-2413b5488841903ad99463962f50f85221733c30.tar.gz
go-2413b5488841903ad99463962f50f85221733c30.zip
cmd/compile: mark the first word of an interface as a uintptr
The first word of an interface is a pointer, but for the purposes of GC we don't need to treat it as such. 1. If it is a non-empty interface, the pointer points to an itab which is always in persistentalloc space. 2. If it is an empty interface, the pointer points to a _type. a. If it is a compile-time-allocated type, it points into the read-only data section. b. If it is a reflect-allocated type, it points into the Go heap. Reflect is responsible for keeping a reference to the underlying type so it won't be GCd. If we ever have a moving GC, we need to change this for 2b (as well as scan itabs to update their itab._type fields). Write barriers on the first word of interfaces have already been removed. Change-Id: I643e91d7ac4de980ac2717436eff94097c65d959 Reviewed-on: https://go-review.googlesource.com/97518 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'test/live.go')
-rw-r--r--test/live.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/test/live.go b/test/live.go
index e54336ead7..ecab83e276 100644
--- a/test/live.go
+++ b/test/live.go
@@ -141,7 +141,7 @@ var i9 interface{}
func f9() bool {
g8()
x := i9
- y := interface{}(str()) // ERROR "live at call to convT2Estring: .autotmp_[0-9]+ x.data x.type$" "live at call to str: x.data x.type$"
+ y := interface{}(str()) // ERROR "live at call to convT2Estring: .autotmp_[0-9]+ x.data$" "live at call to str: x.data$"
i9 = y // make y escape so the line above has to call convT2E
return x != y
}