| // run |
| |
| // Copyright 2016 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. |
| |
| // Gccgo generated incorrect GC info when a global variable was |
| // initialized to a slice of a value containing pointers. The initial |
| // backing array for the slice was allocated in the .data section, |
| // which is fine, but the backing array was not registered as a GC |
| // root. |
| |
| package main |
| |
| import ( |
| "runtime" |
| ) |
| |
| type s struct { |
| str string |
| } |
| |
| var a = []struct { |
| str string |
| }{ |
| {""}, |
| } |
| |
| var b = "b" |
| var c = "c" |
| |
| func init() { |
| a[0].str = b + c |
| } |
| |
| func main() { |
| runtime.GC() |
| if a[0].str != b + c { |
| panic(a[0].str) |
| } |
| } |