Source file test/escape_selfassign.go

     1  // errorcheck -0 -m -l
     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  // Test escape analysis for self assignments.
     8  
     9  package escape
    10  
    11  type S struct {
    12  	i  int
    13  	pi *int
    14  }
    15  
    16  var sink S
    17  
    18  func f(p *S) { // ERROR "leaking param: p"
    19  	p.pi = &p.i
    20  	sink = *p
    21  }
    22  
    23  // BAD: "leaking param: p" is too conservative
    24  func g(p *S) { // ERROR "leaking param: p"
    25  	p.pi = &p.i
    26  }
    27  
    28  func h() {
    29  	var s S // ERROR "moved to heap: s"
    30  	g(&s)
    31  	sink = s
    32  }
    33  

View as plain text