diff --git a/cl/_testrt/intgen/in.go b/cl/_testrt/intgen/in.go index 2b7b2159..cb6b8a47 100644 --- a/cl/_testrt/intgen/in.go +++ b/cl/_testrt/intgen/in.go @@ -4,6 +4,15 @@ import ( "github.com/goplus/llgo/internal/runtime/c" ) +type generator struct { + val c.Int +} + +func (g *generator) next() c.Int { + g.val++ + return g.val +} + func genInts(n int, gen func() c.Int) []c.Int { a := make([]c.Int, n) for i := range a { @@ -25,4 +34,8 @@ func main() { for _, v := range b { c.Printf(c.Str("%d\n"), v) } + g := &generator{val: 1} + for _, v := range genInts(5, g.next) { + c.Printf(c.Str("%d\n"), v) + } } diff --git a/cl/compile.go b/cl/compile.go index 156e1825..059952d4 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -645,7 +645,8 @@ func (p *context) compileValue(b llssa.Builder, v ssa.Value) llssa.Expr { } } case *ssa.Function: - if v.Pkg == p.goPkg { // function in this package + // v.Pkg == nil: means auto generated function? + if v.Pkg == p.goPkg || v.Pkg == nil { // function in this package fn := p.compileFunc(p.pkg, p.goTyps, v) return fn.Expr }