env GOPRIVATE=test/main

garble build
exec ./main
cmp stderr main.stderr

! binsubstr main$exe 'unexportedMethod' 'privateIface'

-- go.mod --
module test/main

go 1.16
-- main.go --
package main

import "test/main/tinyfmt"

type T string

func (t T) String() string {
	return "String method for " + string(t)
}

func (t T) unexportedMethod() string {
	return "unexported method for " + string(t)
}

type privateInterface interface {
	privateIface()
}

func (T) privateIface() {}

var _ privateInterface = T("")

func main() {
	tinyfmt.Println(T("foo"))
	tinyfmt.Println(T("foo").unexportedMethod())
}
-- tinyfmt/fmt.go --
package tinyfmt

// Println emulates fmt.Println, and allows the main package to indirectly use
// T.String in a realistic way. We don't want to import fmt to avoid compiling
// too many packages, since we don't have build caching yet.
func Println(args ...interface{}) {
	for _, arg := range args {
		switch arg := arg.(type) {
		case interface{String() string}:
			print(arg.String())
		case string:
			print(arg)
		default:
			panic("unsupported type")
		}
	}
	println()
}
-- main.stderr --
String method for foo
unexported method for foo
