2019-04-14 14:26:28 -07:00
|
|
|
package pass_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
2026-03-06 20:14:02 +00:00
|
|
|
"sources.truenas.cloud/code/avo/build"
|
|
|
|
|
"sources.truenas.cloud/code/avo/internal/test"
|
|
|
|
|
"sources.truenas.cloud/code/avo/ir"
|
|
|
|
|
"sources.truenas.cloud/code/avo/pass"
|
2019-04-14 14:26:28 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// BuildFunction is a helper to compile a build context containing a single
|
|
|
|
|
// function and (optionally) apply a list of FunctionPasses to it.
|
|
|
|
|
func BuildFunction(t *testing.T, ctx *build.Context, passes ...pass.FunctionPass) *ir.Function {
|
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
|
|
f, err := ctx.Result()
|
|
|
|
|
if err != nil {
|
|
|
|
|
build.LogError(test.Logger(t), err, 0)
|
|
|
|
|
t.FailNow()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fns := f.Functions()
|
|
|
|
|
if len(fns) != 1 {
|
|
|
|
|
t.Fatalf("expect 1 function")
|
|
|
|
|
}
|
|
|
|
|
fn := fns[0]
|
|
|
|
|
|
|
|
|
|
for _, p := range passes {
|
|
|
|
|
if err := p(fn); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fn
|
|
|
|
|
}
|