1
0
mirror of https://github.com/golang/go synced 2024-11-22 19:14:53 -07:00

test: add regress test for issue 28369

Also gofmt test/escape5.go.

Fixes #28369.

Change-Id: I0a11748fd2b5cf01cb5437ae15827d9db91c0c0d
Reviewed-on: https://go-review.googlesource.com/c/go/+/172358
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Ainar Garipov 2019-04-16 23:48:19 +03:00 committed by Matthew Dempsky
parent 5781df421e
commit 7cdacf558f

View File

@ -9,7 +9,10 @@
package foo package foo
import "runtime" import (
"runtime"
"unsafe"
)
func noleak(p *int) int { // ERROR "p does not escape" func noleak(p *int) int { // ERROR "p does not escape"
return *p return *p
@ -71,13 +74,13 @@ func f2() {
} }
func f3() { func f3() {
var x int // ERROR "moved to heap: x" var x int // ERROR "moved to heap: x"
p := leaktoret(&x) p := leaktoret(&x)
gp = p gp = p
} }
func f4() { func f4() {
var x int // ERROR "moved to heap: x" var x int // ERROR "moved to heap: x"
p, q := leaktoret2(&x) p, q := leaktoret2(&x)
gp = p gp = p
gp = q gp = q
@ -89,7 +92,7 @@ func f5() {
} }
func f6() { func f6() {
var x int // ERROR "moved to heap: x" var x int // ERROR "moved to heap: x"
px1, px2 := leaktoret22(leaktoret2(&x)) px1, px2 := leaktoret22(leaktoret2(&x))
gp = px1 gp = px1
_ = px2 _ = px2
@ -245,3 +248,17 @@ func g29000() {
x := 1 x := 1
f29000(2, x) // ERROR "x escapes to heap" f29000(2, x) // ERROR "x escapes to heap"
} }
// Issue 28369: taking an address of a parameter and converting it into a uintptr causes an
// unnecessary escape.
var sink28369 uintptr
func f28369(n int) int {
if n == 0 {
sink28369 = uintptr(unsafe.Pointer(&n))
return n
}
return 1 + f28369(n-1)
}