3 //go:build !goexperiment.cgocheck2
4 // +build !goexperiment.cgocheck2
6 // Copyright 2016 The Go Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style
8 // license that can be found in the LICENSE file.
10 // Issue 15747: liveness analysis was marking heap-escaped params live too much,
11 // and worse was using the wrong bitmap bits to do so.
19 type T struct{ M string }
23 func f1(q *Q, xx []byte) interface{} { // ERROR "live at call to newobject: xx$" "live at entry to f1: xx$"
24 // xx was copied from the stack to the heap on the previous line:
25 // xx was live for the first two prints but then it switched to &xx
26 // being live. We should not see plain xx again.
30 xx, _, err := f2(xx, 5) // ERROR "live at call to f2: &xx$"
38 func f2(d []byte, n int) (odata, res []byte, e interface{}) { // ERROR "live at entry to f2: d$"
40 return d, nil, &T{M: "hello"} // ERROR "live at call to newobject: d"