|  | // errorcheck -0 -m -l | 
|  |  | 
|  | // Copyright 2019 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // Test escape analysis for self assignments. | 
|  |  | 
|  | package escape | 
|  |  | 
|  | type S struct { | 
|  | i  int | 
|  | pi *int | 
|  | } | 
|  |  | 
|  | var sink S | 
|  |  | 
|  | func f(p *S) { // ERROR "leaking param: p" | 
|  | p.pi = &p.i | 
|  | sink = *p | 
|  | } | 
|  |  | 
|  | // BAD: "leaking param: p" is too conservative | 
|  | func g(p *S) { // ERROR "leaking param: p" | 
|  | p.pi = &p.i | 
|  | } | 
|  |  | 
|  | func h() { | 
|  | var s S // ERROR "moved to heap: s" | 
|  | g(&s) | 
|  | sink = s | 
|  | } |