diff --git a/_test/composite8.go b/_test/composite8.go new file mode 100644 index 00000000..f69cdc88 --- /dev/null +++ b/_test/composite8.go @@ -0,0 +1,16 @@ +package main + +type T struct{ I int } + +func main() { + t := []*T{} + s := []int{1, 2} + for _, e := range s { + x := &T{e} + t = append(t, x) + } + println(t[0].I, t[1].I) +} + +// Output: +// 1 2 diff --git a/interp/run.go b/interp/run.go index 48b0f04d..6b2b4fc9 100644 --- a/interp/run.go +++ b/interp/run.go @@ -1732,6 +1732,7 @@ func doCompositeLit(n *node, hasType bool) { } } + i := n.findex n.exec = func(f *frame) bltn { a := reflect.New(n.typ.TypeOf()).Elem() for i, v := range values { @@ -1743,7 +1744,7 @@ func doCompositeLit(n *node, hasType bool) { case destInterface: d.Set(reflect.ValueOf(valueInterface{n, a})) default: - d.Set(a) + f.data[i] = a } return next }