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