|  | // 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) | 
|  | } | 
|  | } |