Home | History | Annotate | Download | only in test
      1 // errorcheck -0 -m -live
      2 
      3 // +build !windows
      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 
     11 package p
     12 
     13 import (
     14 	"syscall"
     15 	"unsafe"
     16 )
     17 
     18 func f(uintptr) // ERROR "f assuming arg#1 is unsafe uintptr"
     19 
     20 func g() {
     21 	var t int
     22 	f(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to f: .?autotmp" "g &t does not escape"
     23 }
     24 
     25 func h() {
     26 	var v int
     27 	syscall.Syscall(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to Syscall: .?autotmp" "h &v does not escape"
     28 }
     29 
     30 func i() {
     31 	var t int
     32 	p := unsafe.Pointer(&t) // ERROR "i &t does not escape"
     33 	f(uintptr(p))           // ERROR "live at call to f: .?autotmp"
     34 }
     35 
     36 func j() {
     37 	var v int
     38 	p := unsafe.Pointer(&v)              // ERROR "j &v does not escape"
     39 	syscall.Syscall(0, 1, uintptr(p), 2) // ERROR "live at call to Syscall: .?autotmp"
     40 }
     41