mirror of
https://github.com/golang/go
synced 2024-11-12 12:30:21 -07:00
ed99fcf1cf
With latest gcc (7.3.0), misc/cgo/testsanitizer test will fail with reporting sigmentation fault when running tsan test. On arm64, tsan is not supported currently and only msan test can be run. So skip tsan test on arm64. What needs to be pointed out is that msan test can be really run when setting clang as c/c++ complier. Fixes #25601 Change-Id: I6ab1a8d9edd243e2ee00ee40bc0abd6a0e6a125c Reviewed-on: https://go-review.googlesource.com/114857 Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package sanitizers_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"runtime"
|
|
)
|
|
|
|
func TestTSAN(t *testing.T) {
|
|
if runtime.GOARCH == "arm64" {
|
|
t.Skip("skipping test; see https://golang.org/issue/25682")
|
|
}
|
|
t.Parallel()
|
|
requireOvercommit(t)
|
|
config := configure("thread")
|
|
config.skipIfCSanitizerBroken(t)
|
|
|
|
mustRun(t, config.goCmd("build", "std"))
|
|
|
|
cases := []struct {
|
|
src string
|
|
needsRuntime bool
|
|
}{
|
|
{src: "tsan.go"},
|
|
{src: "tsan2.go"},
|
|
{src: "tsan3.go"},
|
|
{src: "tsan4.go"},
|
|
{src: "tsan5.go", needsRuntime: true},
|
|
{src: "tsan6.go", needsRuntime: true},
|
|
{src: "tsan7.go", needsRuntime: true},
|
|
{src: "tsan8.go"},
|
|
{src: "tsan9.go"},
|
|
{src: "tsan10.go", needsRuntime: true},
|
|
{src: "tsan11.go", needsRuntime: true},
|
|
{src: "tsan12.go", needsRuntime: true},
|
|
}
|
|
for _, tc := range cases {
|
|
tc := tc
|
|
name := strings.TrimSuffix(tc.src, ".go")
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
dir := newTempDir(t)
|
|
defer dir.RemoveAll(t)
|
|
|
|
outPath := dir.Join(name)
|
|
mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src)))
|
|
|
|
cmd := hangProneCmd(outPath)
|
|
if tc.needsRuntime {
|
|
config.skipIfRuntimeIncompatible(t)
|
|
}
|
|
mustRun(t, cmd)
|
|
})
|
|
}
|
|
}
|