• Matthew Dempsky's avatar
    cmd/compile: restore -m=2 diagnostics · 063d0f11
    Matthew Dempsky authored
    This is a rough attempt at restoring -m=2 escape analysis diagnostics
    on par with those that were available with esc.go. It's meant to be
    simple and non-invasive.
    
    For example, given this random example from bytes/reader.go:
    
    138	func (r *Reader) WriteTo(w io.Writer) (n int64, err error) {
    ...
    143	        b := r.s[r.i:]
    144	        m, err := w.Write(b)
    
    esc.go used to report:
    
    bytes/reader.go:138:7: leaking param content: r
    bytes/reader.go:138:7:       from r.s (dot of pointer) at bytes/reader.go:143:8
    bytes/reader.go:138:7:       from b (assigned) at bytes/reader.go:143:4
    bytes/reader.go:138:7:       from w.Write(b) (parameter to indirect call) at bytes/reader.go:144:19
    
    With this CL, escape.go now reports:
    
    bytes/reader.go:138:7: parameter r leaks to {heap} with derefs=1:
    bytes/reader.go:138:7:   flow: b = *r:
    bytes/reader.go:138:7:     from r.s (dot of pointer) at bytes/reader.go:143:8
    bytes/reader.go:138:7:     from r.s[r.i:] (slice) at bytes/reader.go:143:10
    bytes/reader.go:138:7:     from b := r.s[r.i:] (assign) at bytes/reader.go:143:4
    bytes/reader.go:138:7:   flow: {heap} = b:
    bytes/reader.go:138:7:     from w.Write(b) (call parameter) at bytes/reader.go:144:19
    
    Updates #31489.
    
    Change-Id: I0c2b943a0f9ce6345bfff61e1c635172a9290cbb
    Reviewed-on: https://go-review.googlesource.com/c/go/+/196959
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    Reviewed-by: default avatarDavid Chase <drchase@google.com>
    063d0f11
escape.go 36.7 KB