// $G $D/$F.go && $L $F.$A && ./$A.out

// 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, ok = i();
	bb, ok = b.(*Buffer);

	s := fmt.Sprintf(fmter());
	if s != "0x64 \"hello\"" {
		panicln(s);
	}
}

