1// errorcheck -0 -m -live 2 3// +build !windows,!js 4 5// Copyright 2015 The Go Authors. All rights reserved. 6// Use of this source code is governed by a BSD-style 7// license that can be found in the LICENSE file. 8 9// Test escape analysis and liveness inferred for syscall.Syscall-like functions. 10 11package p 12 13import ( 14 "syscall" 15 "unsafe" 16) 17 18func f(uintptr) // ERROR "assuming arg#1 is unsafe uintptr" 19 20func g() { // ERROR "can inline g" 21 var t int 22 f(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to f: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$" 23} 24 25func h() { // ERROR "can inline h" 26 var v int 27 syscall.Syscall(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to Syscall: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$" 28} 29 30func i() { // ERROR "can inline i" 31 var t int 32 p := unsafe.Pointer(&t) 33 f(uintptr(p)) // ERROR "live at call to f: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$" 34} 35 36func j() { // ERROR "can inline j" 37 var v int 38 p := unsafe.Pointer(&v) 39 syscall.Syscall(0, 1, uintptr(p), 2) // ERROR "live at call to Syscall: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$" 40} 41