1// Copyright 2020 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package testlog 6 7import ( 8 "sync" 9 _ "unsafe" // for linkname 10) 11 12// PanicOnExit0 reports whether to panic on a call to os.Exit(0). 13// This is in the testlog package because, like other definitions in 14// package testlog, it is a hook between the testing package and the 15// os package. This is used to ensure that an early call to os.Exit(0) 16// does not cause a test to pass. 17func PanicOnExit0() bool { 18 panicOnExit0.mu.Lock() 19 defer panicOnExit0.mu.Unlock() 20 return panicOnExit0.val 21} 22 23// panicOnExit0 is the flag used for PanicOnExit0. This uses a lock 24// because the value can be cleared via a timer call that may race 25// with calls to os.Exit 26var panicOnExit0 struct { 27 mu sync.Mutex 28 val bool 29} 30 31// SetPanicOnExit0 sets panicOnExit0 to v. 32// 33// SetPanicOnExit0 should be an internal detail, 34// but alternate implementations of go test in other 35// build systems may need to access it using linkname. 36// 37// Do not remove or change the type signature. 38// See go.dev/issue/67401. 39// 40//go:linkname SetPanicOnExit0 41func SetPanicOnExit0(v bool) { 42 panicOnExit0.mu.Lock() 43 defer panicOnExit0.mu.Unlock() 44 panicOnExit0.val = v 45} 46