Source file test/fixedbugs/issue30908.dir/b.go

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package b
     6  
     7  import (
     8  	"io/ioutil"
     9  
    10  	"./a"
    11  )
    12  
    13  var G int
    14  
    15  // An inlinable function. To trigger the bug in question this needs
    16  // to be inlined here within the package and also inlined into some
    17  // other package that imports it.
    18  func ReadValues(data []byte) (vals map[string]interface{}, err error) {
    19  	err = a.Unmarshal(data, &vals)
    20  	if len(vals) == 0 {
    21  		vals = map[string]interface{}{}
    22  	}
    23  	return
    24  }
    25  
    26  // A local call to the function above, which triggers the "move to heap"
    27  // of the output param.
    28  func CallReadValues(filename string) (map[string]interface{}, error) {
    29  	defer func() { G++ }()
    30  	data, err := ioutil.ReadFile(filename)
    31  	if err != nil {
    32  		return map[string]interface{}{}, err
    33  	}
    34  	return ReadValues(data)
    35  }
    36  

View as plain text