From: Austin Clements Date: Tue, 9 Feb 2016 23:37:41 +0000 (-0500) Subject: runtime: remove noescape hacks from gcWork X-Git-Tag: go1.7beta1~1712 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=98130b39f50f51ac966201461b96a20f923c7d64;p=gostls13.git runtime: remove noescape hacks from gcWork When gcWork was first introduced, the compiler's escape analysis wasn't good enough to detect that that method receiver didn't escape, so we had to hack around this. Now that the compiler can figure out this for itself, remove these hacks. Change-Id: I9f73fab721e272410b8b6905b564e7abc03c0dfe Reviewed-on: https://go-review.googlesource.com/19634 Reviewed-by: Rick Hudson Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot --- diff --git a/src/runtime/mgcwork.go b/src/runtime/mgcwork.go index 340604fb36..e97039bed6 100644 --- a/src/runtime/mgcwork.go +++ b/src/runtime/mgcwork.go @@ -105,9 +105,7 @@ func (w *gcWork) init() { // put enqueues a pointer for the garbage collector to trace. // obj must point to the beginning of a heap object. //go:nowritebarrier -func (ww *gcWork) put(obj uintptr) { - w := (*gcWork)(noescape(unsafe.Pointer(ww))) // TODO: remove when escape analysis is fixed - +func (w *gcWork) put(obj uintptr) { wbuf := w.wbuf1.ptr() if wbuf == nil { w.init() @@ -133,9 +131,7 @@ func (ww *gcWork) put(obj uintptr) { // queue, tryGet returns 0. Note that there may still be pointers in // other gcWork instances or other caches. //go:nowritebarrier -func (ww *gcWork) tryGet() uintptr { - w := (*gcWork)(noescape(unsafe.Pointer(ww))) // TODO: remove when escape analysis is fixed - +func (w *gcWork) tryGet() uintptr { wbuf := w.wbuf1.ptr() if wbuf == nil { w.init() @@ -164,9 +160,7 @@ func (ww *gcWork) tryGet() uintptr { // if necessary to ensure all pointers from all queues and caches have // been retrieved. get returns 0 if there are no pointers remaining. //go:nowritebarrier -func (ww *gcWork) get() uintptr { - w := (*gcWork)(noescape(unsafe.Pointer(ww))) // TODO: remove when escape analysis is fixed - +func (w *gcWork) get() uintptr { wbuf := w.wbuf1.ptr() if wbuf == nil { w.init()