Mercurial > hg > CbC > CbC_gcc
view libgo/misc/cgo/testsanitizers/cshared_test.go @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// 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 ( "fmt" "io/ioutil" "strings" "testing" ) func TestShared(t *testing.T) { t.Parallel() requireOvercommit(t) GOOS, err := goEnv("GOOS") if err != nil { t.Fatal(err) } libExt := "so" if GOOS == "darwin" { libExt = "dylib" } cases := []struct { src string sanitizer string }{ { src: "msan_shared.go", sanitizer: "memory", }, { src: "tsan_shared.go", sanitizer: "thread", }, } for _, tc := range cases { tc := tc name := strings.TrimSuffix(tc.src, ".go") t.Run(name, func(t *testing.T) { t.Parallel() config := configure(tc.sanitizer) config.skipIfCSanitizerBroken(t) dir := newTempDir(t) defer dir.RemoveAll(t) lib := dir.Join(fmt.Sprintf("lib%s.%s", name, libExt)) mustRun(t, config.goCmd("build", "-buildmode=c-shared", "-o", lib, srcPath(tc.src))) cSrc := dir.Join("main.c") if err := ioutil.WriteFile(cSrc, cMain, 0600); err != nil { t.Fatalf("failed to write C source file: %v", err) } dstBin := dir.Join(name) cmd, err := cc(config.cFlags...) if err != nil { t.Fatal(err) } cmd.Args = append(cmd.Args, config.ldFlags...) cmd.Args = append(cmd.Args, "-o", dstBin, cSrc, lib) mustRun(t, cmd) cmd = hangProneCmd(dstBin) replaceEnv(cmd, "LD_LIBRARY_PATH", ".") mustRun(t, cmd) }) } }