env GOPRIVATE=test/main

# Tiny mode
garble -tiny build
! binsubstr main$exe 'main.go' 'fmt/print.go'
env GODEBUG='allocfreetrace=1,gcpacertrace=1,gctrace=1,inittrace=1,scavenge=1,scavtrace=1,scheddetail=1,schedtrace=10'
! exec ./main$exe
stderr '^\(0x[\d\w]{4,8},0x[\d\w]{4,8}\)' # interfaces/pointers print correctly
# TODO: Make -tiny remove all line information again.
# Right now, we reset each declaration's start line to 1.
# Better than nothing, but we could still make *all* line numbers 1.
# stderr '^caller: \? 0$' # position info is removed
stderr '^caller: \?\? ' # position info is removed
stderr '^recovered: ya like jazz?'
! stderr 'panic: oh noes' # panics are hidden

[short] stop # no need to verify this with -short

# Default mode
env GODEBUG=
garble build
! exec ./main$exe
stderr '^caller: [0-9a-zA-Z_]+\.go [1-9]'
stderr '^recovered: ya like jazz?'
stderr 'panic: oh noes'

-- go.mod --
module test/main

go 1.16
-- main.go --
package main

import "runtime"

func main() {
	var v interface{} = "tada"
	println(v)

	defer func() {
		if r := recover(); r != nil {
			println("recovered:", r.(string))
			panic("oh noes")
		}
	}()

	_, file, line, _ := runtime.Caller(0)
	println("caller:", file, line)

	panic("ya like jazz?")
}
