mirror of
https://github.com/golang/go
synced 2024-11-18 12:54:44 -07:00
840fad13ec
The package unsafe docs say it's safe to convert an unsafe.Pointer to uintptr in the argument list to an assembly function, but it was erroneously only detecting normal pointers converted to unsafe.Pointer and then to intptr. Fixes #23051. Change-Id: Id1be19f6d8f26f2d17ba815191717d2f4f899732 Reviewed-on: https://go-review.googlesource.com/82817 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
41 lines
991 B
Go
41 lines
991 B
Go
// errorcheck -0 -m -live
|
|
|
|
// +build !windows
|
|
|
|
// Copyright 2015 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 syscall.Syscall-like functions.
|
|
|
|
package p
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
func f(uintptr) // ERROR "f assuming arg#1 is unsafe uintptr"
|
|
|
|
func g() {
|
|
var t int
|
|
f(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to f: .?autotmp" "g &t does not escape"
|
|
}
|
|
|
|
func h() {
|
|
var v int
|
|
syscall.Syscall(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to Syscall: .?autotmp" "h &v does not escape"
|
|
}
|
|
|
|
func i() {
|
|
var t int
|
|
p := unsafe.Pointer(&t) // ERROR "i &t does not escape"
|
|
f(uintptr(p)) // ERROR "live at call to f: .?autotmp"
|
|
}
|
|
|
|
func j() {
|
|
var v int
|
|
p := unsafe.Pointer(&v) // ERROR "j &v does not escape"
|
|
syscall.Syscall(0, 1, uintptr(p), 2) // ERROR "live at call to Syscall: .?autotmp"
|
|
}
|