]> Cypherpunks repositories - gostls13.git/commitdiff
testsanitizers: check that tsan program runs, skip tsan10 on gcc
authorIan Lance Taylor <iant@golang.org>
Wed, 2 Aug 2017 17:49:20 +0000 (10:49 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 2 Aug 2017 18:32:24 +0000 (18:32 +0000)
Check not only that a tsan program can be built, but also that it runs.
This fails with some installations of GCC 7.

Skip the tsan10 program when using GCC, as it reportedly hangs.

This is a patch to help people build 1.9; we may be able to do a
better fix for 1.10.

Updates #21196

Change-Id: Icd1ffbd018dc65a97ff45cab1264b9b0c7fa0ab2
Reviewed-on: https://go-review.googlesource.com/52790
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

misc/cgo/testsanitizers/test.bash

index ea08f374325cbba9c13163d9685e68f2f4eda5ad..218af396a7887be4d7daf23f90b84dd0598be0ea 100755 (executable)
@@ -156,15 +156,18 @@ if test "$tsan" = "yes"; then
     if ! $CC -fsanitize=thread ${TMPDIR}/testsanitizers$$.c -o ${TMPDIR}/testsanitizers$$ &> ${TMPDIR}/testsanitizers$$.err; then
        ok=no
     fi
-     if grep "unrecognized" ${TMPDIR}/testsanitizers$$.err >& /dev/null; then
+    if grep "unrecognized" ${TMPDIR}/testsanitizers$$.err >& /dev/null; then
        echo "skipping tsan tests: -fsanitize=thread not supported"
        tsan=no
-     elif test "$ok" != "yes"; then
-        cat ${TMPDIR}/testsanitizers$$.err
-        echo "skipping tsan tests: -fsanitizer=thread build failed"
-        tsan=no
-     fi
-     rm -f ${TMPDIR}/testsanitizers$$*
+    elif test "$ok" != "yes"; then
+       cat ${TMPDIR}/testsanitizers$$.err
+       echo "skipping tsan tests: -fsanitizer=thread build failed"
+       tsan=no
+    elif ! ${TMPDIR}/testsanitizers$$ 2>&1; then
+       echo "skipping tsan tests: running tsan program failed"
+       tsan=no
+    fi
+    rm -f ${TMPDIR}/testsanitizers$$*
 fi
 
 # Run a TSAN test.
@@ -196,8 +199,10 @@ if test "$tsan" = "yes"; then
     # These tests are only reliable using clang or GCC version 7 or later.
     # Otherwise runtime/cgo/libcgo.h can't tell whether TSAN is in use.
     ok=false
+    clang=false
     if ${CC} --version | grep clang >/dev/null 2>&1; then
        ok=true
+       clang=true
     else
        ver=$($CC -dumpversion)
        major=$(echo $ver | sed -e 's/\([0-9]*\).*/\1/')
@@ -213,7 +218,12 @@ if test "$tsan" = "yes"; then
        testtsan tsan5.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
        testtsan tsan6.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
        testtsan tsan7.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
-       testtsan tsan10.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
+
+       # tsan10 reportedly hangs when built with GCC: issue #21196.
+       if test "$clang" = "true"; then
+           testtsan tsan10.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
+       fi
+
        testtsan tsan11.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"
        testtsan tsan12.go "CGO_CFLAGS=-fsanitize=thread CGO_LDFLAGS=-fsanitize=thread" "-installsuffix=tsan"