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