Go version

go version devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 linux/amd64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOENV='/home/user/.config/go/env'
GOEXE=''
GOEXPERIMENT='cacheprog'
GOFLAGS='-trimpath "-ldflags=-s -w"'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/user/.data/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user/.data/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/user/sdk/gotip'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='path'
GOTOOLDIR='/home/user/sdk/gotip/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/user/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v3'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='0'
GOMOD='/home/user/tmp/testrepo0652/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1549253000=/tmp/go-build -gno-record-gcc-switches'

What did you do?

for a main_test.go (note: should be run without the main.go file below as it can affect the debug settings):

//go:debug panicnil=1
package main_test

import (
    "runtime/debug"
    "testing"
)

func TestFoo(t *testing.T) {
    defer func() {
        t.Fatal(recover())
    }()

    t.Log(debug.ReadBuildInfo())
    panic(nil)
}

running it:

=== RUN   TestFoo
    main_test.go:14: go devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 X:cacheprog
        path    go.seankhliao.com/testrepo0652
        mod go.seankhliao.com/testrepo0652  (devel) 
        build   -buildmode=exe
        build   -compiler=gc
        build   -trimpath=true
        build   DefaultGODEBUG=asynctimerchan=1,gotypesalias=0,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1
        build   CGO_ENABLED=0
        build   GOARCH=amd64
        build   GOEXPERIMENT=cacheprog
        build   GOOS=linux
        build   GOAMD64=v3
         true
    main_test.go:11: <nil>
--- FAIL: TestFoo (0.00s)
FAIL
FAIL    go.seankhliao.com/testrepo0652  0.001s
FAIL

vs

a main.go:

//go:debug panicnil=1
package main

import (
    "fmt"
    "runtime/debug"
)

func main() {
    defer func() {
        fmt.Println(recover())
    }()

    fmt.Println(debug.ReadBuildInfo())
    panic(nil)
}

running it:

go  devel go1.23-e44fa1c1a9 2024-06-18 15:33:06 +0000 X:cacheprog
path    go.seankhliao.com/testrepo0652
mod go.seankhliao.com/testrepo0652  (devel) 
build   -buildmode=exe
build   -compiler=gc
build   -trimpath=true
build   DefaultGODEBUG=asynctimerchan=1,gotypesalias=0,panicnil=1,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1
build   CGO_ENABLED=0
build   GOARCH=amd64
build   GOEXPERIMENT=cacheprog
build   GOOS=linux
build   GOAMD64=v3
 true
<nil>

What did you see happen?

The test binary did not record a DefaultGODEBUG=panicnil=1, while the setting was clearly in effect (recover nil).

What did you expect to see?

The setting recorded as part of DefaultGODEBUG

Comment From: gabyhelp

Similar Issues

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

Comment From: gopherbot

Change https://go.dev/cl/595961 mentions this issue: cmd/go/internal/load: recompute test variant's build info if necessary