diff options
Diffstat (limited to 'test/tsan/test_output.sh')
-rwxr-xr-x | test/tsan/test_output.sh | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/test/tsan/test_output.sh b/test/tsan/test_output.sh new file mode 100755 index 0000000000000..bce0fe8b5511b --- /dev/null +++ b/test/tsan/test_output.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +ulimit -s 8192 +set -e # fail on any error + +HERE=$(dirname $0) +TSAN_DIR=$(dirname $0)/../../lib/tsan + +# Assume clang and clang++ are in path. +: ${CC:=clang} +: ${CXX:=clang++} +: ${FILECHECK:=FileCheck} + +# TODO: add testing for all of -O0...-O3 +CFLAGS="-fsanitize=thread -O2 -g -Wall" +LDFLAGS="-pthread -ldl -lrt -lm -Wl,--whole-archive $TSAN_DIR/rtl/libtsan.a -Wl,--no-whole-archive" + +test_file() { + SRC=$1 + COMPILER=$2 + echo ----- TESTING $(basename $1) + OBJ=$SRC.o + EXE=$SRC.exe + $COMPILER $SRC $CFLAGS -c -o $OBJ + $COMPILER $OBJ $LDFLAGS -o $EXE + RES=$($EXE 2>&1 || true) + printf "%s\n" "$RES" | $FILECHECK $SRC + if [ "$3" == "" ]; then + rm -f $EXE $OBJ + fi +} + +if [ "$1" == "" ]; then + for c in $HERE/*.{c,cc}; do + if [[ $c == */failing_* ]]; then + echo SKIPPING FAILING TEST $c + continue + fi + if [[ $c == */load_shared_lib.cc ]]; then + echo TEST $c is not supported + continue + fi + if [[ $c == */*blacklist*.cc ]]; then + echo TEST $c is not supported + continue + fi + if [ "`grep "TSAN_OPTIONS" $c`" ]; then + echo SKIPPING $c -- requires TSAN_OPTIONS + continue + fi + if [ "`grep "XFAIL" $c`" ]; then + echo SKIPPING $c -- has XFAIL + continue + fi + COMPILER=$CXX + case $c in + *.c) COMPILER=$CC + esac + test_file $c $COMPILER & + done + for job in `jobs -p`; do + wait $job || exit 1 + done +else + test_file $HERE/$1 $CXX "DUMP" +fi |