...
Run Format

Source file test/uintptrescapes2.go

Documentation: test

     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  //go:uintptrescapes
    24  //go:noinline
    25  func F3(uintptr) {} // ERROR "escaping uintptr"
    26  
    27  //go:uintptrescapes
    28  //go:noinline
    29  func F4(...uintptr) {} // ERROR "escaping ...uintptr"
    30  
    31  func G() {
    32  	var t int                        // ERROR "moved to heap"
    33  	F1(uintptr(unsafe.Pointer(&t)))  // ERROR "live at call to F1: .?autotmp" "&t escapes to heap"
    34  	var t2 int                       // ERROR "moved to heap"
    35  	F3(uintptr(unsafe.Pointer(&t2))) // ERROR "live at call to F3: .?autotmp" "&t2 escapes to heap"
    36  }
    37  
    38  func H() {
    39  	var v int                                 // ERROR "moved to heap"
    40  	F2(0, 1, uintptr(unsafe.Pointer(&v)), 2)  // ERROR "live at call to newobject: .?autotmp" "live at call to F2: .?autotmp" "escapes to heap"
    41  	var v2 int                                // ERROR "moved to heap"
    42  	F4(0, 1, uintptr(unsafe.Pointer(&v2)), 2) // ERROR "live at call to newobject: .?autotmp" "live at call to F4: .?autotmp" "escapes to heap"
    43  }
    44  

View as plain text