Home | History | Annotate | Download | only in 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 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 }
     32