// 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") } }