]> Cypherpunks.ru repositories - gostls13.git/commitdiff
runtime/internal/atomic: remove bad go:noescape annotations on Loadp
authorMatthew Dempsky <mdempsky@google.com>
Wed, 17 Apr 2019 18:23:53 +0000 (11:23 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 17 Apr 2019 19:09:15 +0000 (19:09 +0000)
The //go:noescape directive says that arguments don't leak at all,
which is too aggressive of a claim for functions that return pointers
derived from their parameters.

Remove the directive for now. Long term fix will require a new
directive that allows more fine-grained control over escape analysis
information supplied for functions implemented in assembly.

Also, update the BAD comments in the test cases for Loadp: we really
want that *ptr leaks to the result parameter, not that *ptr leaks to
the heap.

Updates #31525.

Change-Id: Ibfa61f2b70daa7ed3223056b57eeee777eef2e31
Reviewed-on: https://go-review.googlesource.com/c/go/+/172578
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/internal/atomic/atomic_arm.go
src/runtime/internal/atomic/atomic_arm64.go
src/runtime/internal/atomic/atomic_mips64x.go
src/runtime/internal/atomic/atomic_mipsx.go
src/runtime/internal/atomic/atomic_ppc64x.go
test/escape_runtime_atomic.go
test/escape_sync_atomic.go

index 51b42ba23846b5625cb7fdd78b0c217bf4a0df5f..abedee0e351be59f14fc634055baa95b58960227 100644 (file)
@@ -181,7 +181,7 @@ func armcas(ptr *uint32, old, new uint32) bool
 //go:noescape
 func Load(addr *uint32) uint32
 
-//go:noescape
+// NO go:noescape annotation; *addr escapes if result escapes (#31525)
 func Loadp(addr unsafe.Pointer) unsafe.Pointer
 
 //go:noescape
index a2da27e7ed4eb8f9d7dd5ff709eea8e029270935..8e83cc6f53df4c5bbbbf587a6a5663067baa8008 100644 (file)
@@ -32,7 +32,7 @@ func Load(ptr *uint32) uint32
 //go:noescape
 func Load64(ptr *uint64) uint64
 
-//go:noescape
+// NO go:noescape annotation; *ptr escapes if result escapes (#31525)
 func Loadp(ptr unsafe.Pointer) unsafe.Pointer
 
 //go:noescape
index 98a8fca929186c5d338fe19a7138206b9fcdd87d..ca2e509266dc5d9107ab40ec0e4b25fd965baf56 100644 (file)
@@ -32,7 +32,7 @@ func Load(ptr *uint32) uint32
 //go:noescape
 func Load64(ptr *uint64) uint64
 
-//go:noescape
+// NO go:noescape annotation; *ptr escapes if result escapes (#31525)
 func Loadp(ptr unsafe.Pointer) unsafe.Pointer
 
 //go:noescape
index 1cd6d9a9ce33b5e3b7f347c26693ff349b9684ea..79eb5822320aab317d8324ae34e898a94dc25e6e 100644 (file)
@@ -116,7 +116,7 @@ func Xchguintptr(ptr *uintptr, new uintptr) uintptr
 //go:noescape
 func Load(ptr *uint32) uint32
 
-//go:noescape
+// NO go:noescape annotation; *ptr escapes if result escapes (#31525)
 func Loadp(ptr unsafe.Pointer) unsafe.Pointer
 
 //go:noescape
index 4f1a95c5bd8437e453e1eadc7bb09b96b76dda3b..0e9a51f6a1a9a1ffd32b7c37e495bda4b32d8493 100644 (file)
@@ -32,7 +32,7 @@ func Load(ptr *uint32) uint32
 //go:noescape
 func Load64(ptr *uint64) uint64
 
-//go:noescape
+// NO go:noescape annotation; *ptr escapes if result escapes (#31525)
 func Loadp(ptr unsafe.Pointer) unsafe.Pointer
 
 //go:noescape
index 6dfd4aa211aa66f7ef22b5056d6b8e455ad775fc..efe2013fb9659a92040399ac7e781c422b83df0d 100644 (file)
@@ -13,8 +13,8 @@ import (
        "unsafe"
 )
 
-// BAD: should be "leaking param content".
-func Loadp(addr unsafe.Pointer) unsafe.Pointer { // ERROR "leaking param: addr"
+// BAD: should always be "leaking param: addr to result ~r1 level=1$".
+func Loadp(addr unsafe.Pointer) unsafe.Pointer { // ERROR "leaking param: addr( to result ~r1 level=1)?$"
        return atomic.Loadp(addr)
 }
 
index 8da71a0ccf39e1d7aca3d7f41f1bad3a07d4e512..e509b3751143cb307af91bc86bb787cbd54fc5e8 100644 (file)
@@ -13,8 +13,8 @@ import (
        "unsafe"
 )
 
-// BAD: should be "leaking param content".
-func LoadPointer(addr *unsafe.Pointer) unsafe.Pointer { // ERROR "leaking param: addr"
+// BAD: should be "leaking param: addr to result ~r1 level=1$".
+func LoadPointer(addr *unsafe.Pointer) unsafe.Pointer { // ERROR "leaking param: addr$"
        return atomic.LoadPointer(addr)
 }