// $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)); | |
} | |