blob: bce0fe8b5511baab0e587f040f53c281c2d02400 [file] [log] [blame]
#!/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