diff --git a/_test/issue-1594.go b/_test/issue-1594.go new file mode 100644 index 000000000..3bfa5f181 --- /dev/null +++ b/_test/issue-1594.go @@ -0,0 +1,17 @@ +package main + +func main() { + var fns []func() + for _, v := range []int{1, 2, 3} { + x := v*100 + v + fns = append(fns, func() { println(x) }) + } + for _, fn := range fns { + fn() + } +} + +// Output: +// 101 +// 202 +// 303 diff --git a/interp/cfg.go b/interp/cfg.go index 8bc45910e..39133a4c8 100644 --- a/interp/cfg.go +++ b/interp/cfg.go @@ -755,7 +755,7 @@ func (interp *Interpreter) cfg(root *node, sc *scope, importPath, pkgName string n.gen = nop src.findex = dest.findex src.level = level - case len(n.child) < 4 && isArithmeticAction(src) && !isInterface(dest.typ): + case len(n.child) < 4 && n.kind != defineStmt && isArithmeticAction(src) && !isInterface(dest.typ): // Optimize single assignments from some arithmetic operations. src.typ = dest.typ src.findex = dest.findex