Imports #
"fmt"
"example.com/pgo/devirtualize/mult.pkg"
"fmt"
"example.com/pgo/devirtualize/mult.pkg"
var sink int
type AddFunc func(int, int) int
type Adder interface {
Add(a int, b int) int
}
type Add struct {
}
type Sub struct {
}
func (Add) Add(a int, b int) int
func (Sub) Add(a int, b int) int
go:noinline
func AddClosure() AddFunc
func AddFn(a int, b int) int
ExerciseFuncClosure calls mostly a1 and m1. This is a simplified version of ExerciseFuncConcrete, but we need two distinct call sites to test two different types of function values. go:noinline
func ExerciseFuncClosure(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) int
ExerciseFuncConcrete calls mostly a1 and m1. go:noinline
func ExerciseFuncConcrete(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) int
ExerciseFuncField calls mostly a1 and m1. This is a simplified version of ExerciseFuncConcrete, but accessing the function values via a struct field. go:noinline
func ExerciseFuncField(iter int, a1 AddFunc, a2 AddFunc, m1 mult.MultFunc, m2 mult.MultFunc) int
ExerciseIface calls mostly a1 and m1. go:noinline
func ExerciseIface(iter int, a1 Adder, a2 Adder, m1 mult.Multiplier, m2 mult.Multiplier) int
go:noinline
func SubClosure() AddFunc
func SubFn(a int, b int) int
Generated with Arrow