1// run 2 3// Copyright 2009 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 7package main 8 9// Interface 10type I interface { F() int } 11 12// Implements interface 13type S struct { } 14func (s *S) F() int { return 1 } 15 16// Allocates S but returns I 17// Arg is unused but important: 18// if you take it out (and the 0s below) 19// then the bug goes away. 20func NewI(i int) I { 21 return new(S) 22} 23 24// Uses interface method. 25func Use(x I) { 26 x.F() 27} 28 29func main() { 30 i := NewI(0); 31 Use(i); 32 33 // Again, without temporary 34 // Crashes because x.F is 0. 35 Use(NewI(0)); 36} 37 38