// 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. package b import ( "io/ioutil" "./a" ) var G int // An inlinable function. To trigger the bug in question this needs // to be inlined here within the package and also inlined into some // other package that imports it. func ReadValues(data []byte) (vals map[string]interface{}, err error) { err = a.Unmarshal(data, &vals) if len(vals) == 0 { vals = map[string]interface{}{} } return } // A local call to the function above, which triggers the "move to heap" // of the output param. func CallReadValues(filename string) (map[string]interface{}, error) { defer func() { G++ }() data, err := ioutil.ReadFile(filename) if err != nil { return map[string]interface{}{}, err } return ReadValues(data) }