Source file test/fixedbugs/issue27557.go

     1  // errorcheck -0 -l -m
     2  
     3  // Copyright 2019 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  package p
     8  
     9  var sink interface{}
    10  
    11  func f1() {
    12  	var t T
    13  	f := t.noescape // ERROR "t.noescape does not escape"
    14  	f()
    15  }
    16  
    17  func f2() {
    18  	var t T       // ERROR "moved to heap"
    19  	f := t.escape // ERROR "t.escape does not escape"
    20  	f()
    21  }
    22  
    23  func f3() {
    24  	var t T        // ERROR "moved to heap"
    25  	f := t.returns // ERROR "t.returns does not escape"
    26  	sink = f()
    27  }
    28  
    29  type T struct{}
    30  
    31  func (t *T) noescape()   {}           // ERROR "t does not escape"
    32  func (t *T) escape()     { sink = t } // ERROR "leaking param: t$"
    33  func (t *T) returns() *T { return t } // ERROR "leaking param: t to result ~r0 level=0"
    34  
    35  func (t *T) recursive() { // ERROR "leaking param: t$"
    36  	sink = t
    37  
    38  	var t2 T          // ERROR "moved to heap"
    39  	f := t2.recursive // ERROR "t2.recursive does not escape"
    40  	f()
    41  }
    42  

View as plain text