mirror of
https://github.com/golang/go
synced 2024-11-26 23:51:29 -07:00
b9704872d1
This CL moves parameter tagging to before escape analysis is complete, so we still have access to EscLocation. This will be useful once EscLocation starts tracking higher-fidelity escape details. Notably, this CL stops using n.Esc to record parameter escape analysis details. Now escape analysis only ever sets n.Esc to EscNone or EscHeap. (It still defaults to EscUnknown, and is set to EscNever in some places though.) Passes toolstash-check. Updates #33981. Change-Id: I50a91ea1e38c442092de6cd14e20b211f8f818c9 Reviewed-on: https://go-review.googlesource.com/c/go/+/193178 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
44 lines
1.4 KiB
Go
44 lines
1.4 KiB
Go
// errorcheck -0 -m -live
|
|
|
|
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Test escape analysis and liveness inferred for uintptrescapes functions.
|
|
|
|
package p
|
|
|
|
import (
|
|
"unsafe"
|
|
)
|
|
|
|
//go:uintptrescapes
|
|
//go:noinline
|
|
func F1(a uintptr) {} // ERROR "escaping uintptr"
|
|
|
|
//go:uintptrescapes
|
|
//go:noinline
|
|
func F2(a ...uintptr) {} // ERROR "escaping ...uintptr"
|
|
|
|
//go:uintptrescapes
|
|
//go:noinline
|
|
func F3(uintptr) {} // ERROR "escaping uintptr"
|
|
|
|
//go:uintptrescapes
|
|
//go:noinline
|
|
func F4(...uintptr) {} // ERROR "escaping ...uintptr"
|
|
|
|
func G() {
|
|
var t int // ERROR "moved to heap"
|
|
F1(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to F1: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$"
|
|
var t2 int // ERROR "moved to heap"
|
|
F3(uintptr(unsafe.Pointer(&t2))) // ERROR "live at call to F3: .?autotmp"
|
|
}
|
|
|
|
func H() {
|
|
var v int // ERROR "moved to heap"
|
|
F2(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F2: .?autotmp" "escapes to heap" "stack object .autotmp_[0-9]+ unsafe.Pointer$"
|
|
var v2 int // ERROR "moved to heap"
|
|
F4(0, 1, uintptr(unsafe.Pointer(&v2)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F4: .?autotmp" "escapes to heap"
|
|
}
|