libgo: update to Go 1.11
[official-gcc.git] / libgo / misc / cgo / testsanitizers / msan_test.go
blob88b90d3d70d7961608c2118b9bb2572c6a3d50e1
1 // Copyright 2017 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.
5 package sanitizers_test
7 import (
8 "strings"
9 "testing"
12 func TestMSAN(t *testing.T) {
13 t.Parallel()
14 requireOvercommit(t)
15 config := configure("memory")
16 config.skipIfCSanitizerBroken(t)
18 mustRun(t, config.goCmd("build", "std"))
20 cases := []struct {
21 src string
22 wantErr bool
24 {src: "msan.go"},
25 {src: "msan2.go"},
26 {src: "msan2_cmsan.go"},
27 {src: "msan3.go"},
28 {src: "msan4.go"},
29 {src: "msan5.go"},
30 {src: "msan6.go"},
31 {src: "msan_fail.go", wantErr: true},
33 for _, tc := range cases {
34 tc := tc
35 name := strings.TrimSuffix(tc.src, ".go")
36 t.Run(name, func(t *testing.T) {
37 t.Parallel()
39 dir := newTempDir(t)
40 defer dir.RemoveAll(t)
42 outPath := dir.Join(name)
43 mustRun(t, config.goCmd("build", "-o", outPath, srcPath(tc.src)))
45 cmd := hangProneCmd(outPath)
46 if tc.wantErr {
47 out, err := cmd.CombinedOutput()
48 if err != nil {
49 return
51 t.Fatalf("%#q exited without error; want MSAN failure\n%s", strings.Join(cmd.Args, " "), out)
53 mustRun(t, cmd)