4 set -e # fail on any error
7 TSAN_DIR
=$
(dirname $0)/..
/..
/lib
/tsan
9 # Assume clang and clang++ are in path.
12 : ${FILECHECK:=FileCheck}
14 # TODO: add testing for all of -O0...-O3
15 CFLAGS
="-fsanitize=thread -fPIE -O1 -g -Wall"
16 LDFLAGS
="-pie -pthread -ldl -lrt -lm -Wl,--whole-archive $TSAN_DIR/rtl/libtsan.a -Wl,--no-whole-archive"
21 echo ----- TESTING $
(basename $1)
24 $COMPILER $SRC $CFLAGS -c -o $OBJ
25 $COMPILER $OBJ $LDFLAGS -o $EXE
26 RES
=$
($EXE 2>&1 || true
)
27 printf "%s\n" "$RES" |
$FILECHECK $SRC
28 if [ "$3" == "" ]; then
33 if [ "$1" == "" ]; then
34 for c
in $HERE/*.
{c
,cc
}; do
35 if [[ $c == */failing_
* ]]; then
36 echo SKIPPING FAILING TEST
$c
39 if [[ $c == */load_shared_lib.cc
]]; then
40 echo TEST
$c is not supported
43 if [[ $c == */*blacklist
*.cc
]]; then
44 echo TEST
$c is not supported
47 if [ "`grep "TSAN_OPTIONS
" $c`" ]; then
48 echo SKIPPING
$c -- requires TSAN_OPTIONS
55 test_file
$c $COMPILER &
57 for job
in `jobs -p`; do
61 test_file
$HERE/$1 $CXX "DUMP"