github.com/karrick/go@v0.0.0-20170817181416-d5b0ec858b37/test/uintptrescapes2.go (about)

     1  // errorcheck -0 -m -live
     2  
     3  // Copyright 2016 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Test escape analysis and liveness inferred for uintptrescapes functions.
     8  
     9  package p
    10  
    11  import (
    12  	"unsafe"
    13  )
    14  
    15  //go:uintptrescapes
    16  //go:noinline
    17  func F1(a uintptr) {} // ERROR "escaping uintptr"
    18  
    19  //go:uintptrescapes
    20  //go:noinline
    21  func F2(a ...uintptr) {} // ERROR "escaping ...uintptr" "a does not escape"
    22  
    23  func G() {
    24  	var t int                       // ERROR "moved to heap"
    25  	F1(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to F1: .?autotmp" "&t escapes to heap"
    26  }
    27  
    28  func H() {
    29  	var v int                                // ERROR "moved to heap"
    30  	F2(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F2: .?autotmp" "escapes to heap"
    31  }