| // 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 | |
| } |