1// run 2 3// Copyright 2016 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// This checks partially initialized structure literals 8// used to create value.method functions have their 9// non-initialized fields properly zeroed/nil'd 10 11package main 12 13type X struct { 14 A, B, C *int 15} 16 17//go:noinline 18func (t X) Print() { 19 if t.B != nil { 20 panic("t.B must be nil") 21 } 22} 23 24//go:noinline 25func caller(f func()) { 26 f() 27} 28 29//go:noinline 30func test() { 31 var i, j int 32 x := X{A: &i, C: &j} 33 caller(func() { X{A: &i, C: &j}.Print() }) 34 caller(X{A: &i, C: &j}.Print) 35 caller(x.Print) 36} 37 38func main() { 39 test() 40} 41