testing: failfast fails fast when Fatal called

When a test calls t.Fatal()/t.Fatalf(), only deferred code will execute.
Increment the failure count as part of a deferred call.

Fixes #24412

Change-Id: Ibb154015fcd3d0fb7739718fdda8c9ad22f9e896
Reviewed-on: https://go-review.googlesource.com/101035
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
fraenkel 2018-03-15 22:37:01 -04:00 committed by Ian Lance Taylor
parent 6d5ebc7022
commit d0925228d7
3 changed files with 16 additions and 3 deletions

View file

@ -731,6 +731,10 @@ func tRunner(t *T, fn func(t *T)) {
// a call to runtime.Goexit, record the duration and send
// a signal saying that the test is done.
defer func() {
if t.failed {
atomic.AddUint32(&numFailed, 1)
}
if t.raceErrors+race.Errors() > 0 {
t.Errorf("race detected during execution of test")
}
@ -790,9 +794,7 @@ func tRunner(t *T, fn func(t *T)) {
t.raceErrors = -race.Errors()
fn(t)
if t.failed {
atomic.AddUint32(&numFailed, 1)
}
// code beyond here will not be executed when FailNow is invoked
t.finished = true
}