4 "honnef.co/go/tools/ir"
7 func Reachable(from, to *ir.BasicBlock) bool {
11 if from.Dominates(to) {
16 Walk(from, func(b *ir.BasicBlock) bool {
26 func Walk(b *ir.BasicBlock, fn func(*ir.BasicBlock) bool) {
27 seen := map[*ir.BasicBlock]bool{}
28 wl := []*ir.BasicBlock{b}
39 wl = append(wl, b.Succs...)
43 func Vararg(x *ir.Slice) ([]ir.Value, bool) {
45 slice, ok := x.X.(*ir.Alloc)
49 for _, ref := range *slice.Referrers() {
53 if ref.Block() != x.Block() {
56 idx, ok := ref.(*ir.IndexAddr)
60 if len(*idx.Referrers()) != 1 {
63 store, ok := (*idx.Referrers())[0].(*ir.Store)
67 out = append(out, store.Val)