| // run | 
 |  | 
 | // 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 | 
 |  | 
 | import "fmt" | 
 |  | 
 | type Buffer int | 
 |  | 
 | func (*Buffer) Read() {} | 
 |  | 
 | type Reader interface { | 
 | 	Read() | 
 | } | 
 |  | 
 | func f() *Buffer { return nil } | 
 |  | 
 | func g() Reader { | 
 | 	// implicit interface conversion in assignment during return | 
 | 	return f() | 
 | } | 
 |  | 
 | func h() (b *Buffer, ok bool) { return } | 
 |  | 
 | func i() (r Reader, ok bool) { | 
 | 	// implicit interface conversion in multi-assignment during return | 
 | 	return h() | 
 | } | 
 |  | 
 | func fmter() (s string, i int, t string) { return "%#x %q", 100, "hello" } | 
 |  | 
 | func main() { | 
 | 	b := g() | 
 | 	bb, ok := b.(*Buffer) | 
 | 	_, _, _ = b, bb, ok | 
 |  | 
 | 	b, ok = i() | 
 | 	bb, ok = b.(*Buffer) | 
 | 	_, _, _ = b, bb, ok | 
 |  | 
 | 	s := fmt.Sprintf(fmter()) | 
 | 	if s != "0x64 \"hello\"" { | 
 | 		println(s) | 
 | 		panic("fail") | 
 | 	} | 
 | } |