Source file test/fixedbugs/issue18410.go

     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  
    11  package main
    12  
    13  type X struct {
    14  	A, B, C *int
    15  }
    16  
    17  //go:noinline
    18  func (t X) Print() {
    19  	if t.B != nil {
    20  		panic("t.B must be nil")
    21  	}
    22  }
    23  
    24  //go:noinline
    25  func caller(f func()) {
    26  	f()
    27  }
    28  
    29  //go:noinline
    30  func 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  
    38  func main() {
    39  	test()
    40  }
    41  

View as plain text