1
0
mirror of https://github.com/golang/go synced 2024-11-22 22:30:02 -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
@ -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)
}