env GOGARBLE=test/main

# Tiny mode
garble -tiny build
! binsubstr main$exe 'garble_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
env GODEBUG='' # Ensure further commands don't have weirdness due to GODEBUG.
stderr '^\(0x[\d\w]{4,8},0x[\d\w]{4,8}\)' # interfaces/pointers print correctly
# With -tiny, all line numbers are reset to 1.
# Unfortunately, line comment directives don't allow erasing line numbers entirely.
stderr '^caller: \?\? 1$' # 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
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.18
-- garble_main.go --
package main

import "runtime"

func main() {
	var v any = "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?")
}
