1// run
2
3// Copyright 2014 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Test for a garbage collection bug involving not
8// marking x as having its address taken by &x[0]
9// when x is an array value.
10
11package main
12
13import (
14	"bytes"
15	"fmt"
16	"runtime"
17)
18
19func main() {
20	var x = [4]struct{ x, y interface{} }{
21		{"a", "b"},
22		{"c", "d"},
23		{"e", "f"},
24		{"g", "h"},
25	}
26
27	var buf bytes.Buffer
28	for _, z := range x {
29		runtime.GC()
30		fmt.Fprintf(&buf, "%s %s ", z.x.(string), z.y.(string))
31	}
32
33	if buf.String() != "a b c d e f g h " {
34		println("BUG wrong output\n", buf.String())
35	}
36}
37