modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/live_syscall.go (about)

     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  }