// run // Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Test for a garbage collection bug involving not // marking x as having its address taken by &x[0] // when x is an array value. package main import ( "bytes" "fmt" "runtime" ) func main() { var x = [4]struct{ x, y interface{} }{ {"a", "b"}, {"c", "d"}, {"e", "f"}, {"g", "h"}, } var buf bytes.Buffer for _, z := range x { runtime.GC() fmt.Fprintf(&buf, "%s %s ", z.x.(string), z.y.(string)) } if buf.String() != "a b c d e f g h " { println("BUG wrong output\n", buf.String()) } }