// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG should not crash // Copyright 2009 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. package main // Interface type I interface { F() int } // Implements interface type S struct { } func (s *S) F() int { return 1 } // Allocates S but returns I // Arg is unused but important: // if you take it out (and the 0s below) // then the bug goes away. func NewI(i int) I { return new(*S) } // Uses interface method. func Use(x I) { x.F() } func main() { i := NewI(0); Use(i); // Again, without temporary // Crashes because x.F is 0. Use(NewI(0)); }