func (gi *globalInit) update(typ llvm.Type, indices []uint32, val llvm.Value) { if len(indices) == 0 { gi.val = val return } if gi.val.C != nil { gi.val = llvm.ConstInsertValue(gi.val, val, indices) } tk := typ.TypeKind() if len(gi.elems) == 0 { switch tk { case llvm.StructTypeKind: gi.elems = make([]globalInit, typ.StructElementTypesCount()) case llvm.ArrayTypeKind: gi.elems = make([]globalInit, typ.ArrayLength()) default: panic("unexpected type") } } var eltyp llvm.Type switch tk { case llvm.StructTypeKind: eltyp = typ.StructElementTypes()[indices[0]] case llvm.ArrayTypeKind: eltyp = typ.ElementType() default: panic("unexpected type") } gi.elems[indices[0]].update(eltyp, indices[1:], val) }