--- /dev/null
+// +build ignore
+
+// This is a slice of the fmt package.
+
+package main
+
+type pp struct {
+ field interface{}
+}
+
+func newPrinter() *pp {
+ return new(pp)
+}
+
+func Fprintln(a ...interface{}) {
+ p := newPrinter()
+ p.doPrint(a, true, true)
+}
+
+func Println(a ...interface{}) {
+ Fprintln(a...)
+}
+
+func (p *pp) doPrint(a []interface{}, addspace, addnewline bool) {
+ print(a[0]) // @types S | string
+ stringer := a[0].(interface {
+ String() string
+ })
+
+ stringer.String()
+ print(stringer) // @types S
+}
+
+type S int
+
+func (S) String() string { return "" }
+
+func main() {
+ Println("Hello, World!", S(0))
+}
+
+// @calls (*main.pp).doPrint -> (main.S).String