1da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany#!/bin/bash 2da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 3bfc45f132133966889aece2285ebe59dec978865Dmitry Vyukovulimit -s 8192 4da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyset -e # fail on any error 5da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesHERE=$(dirname $0) 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesTSAN_DIR=$(dirname $0)/../../lib/tsan 8da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 95c889362bb5bc57288ab84e7859774b42c6bb5deAlexey Samsonov# Assume clang and clang++ are in path. 105c889362bb5bc57288ab84e7859774b42c6bb5deAlexey Samsonov: ${CC:=clang} 115c889362bb5bc57288ab84e7859774b42c6bb5deAlexey Samsonov: ${CXX:=clang++} 125c889362bb5bc57288ab84e7859774b42c6bb5deAlexey Samsonov: ${FILECHECK:=FileCheck} 13da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 14da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany# TODO: add testing for all of -O0...-O3 155d71de26cedae3dafc17449fe0182045c0bd20e8Stephen HinesCFLAGS="-fsanitize=thread -fPIE -O1 -g -Wall" 165d71de26cedae3dafc17449fe0182045c0bd20e8Stephen HinesLDFLAGS="-pie -pthread -ldl -lrt -lm -Wl,--whole-archive $TSAN_DIR/rtl/libtsan.a -Wl,--no-whole-archive" 17da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 18da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanytest_file() { 19da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany SRC=$1 20da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany COMPILER=$2 211b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany echo ----- TESTING $(basename $1) 22da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany OBJ=$SRC.o 23da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany EXE=$SRC.exe 24da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany $COMPILER $SRC $CFLAGS -c -o $OBJ 25bfc45f132133966889aece2285ebe59dec978865Dmitry Vyukov $COMPILER $OBJ $LDFLAGS -o $EXE 260b1137574d93882f1e1ba4f463139345cec7afceDmitry Vyukov RES=$($EXE 2>&1 || true) 275c889362bb5bc57288ab84e7859774b42c6bb5deAlexey Samsonov printf "%s\n" "$RES" | $FILECHECK $SRC 28da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany if [ "$3" == "" ]; then 291b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany rm -f $EXE $OBJ 30da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany fi 31da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany} 32da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany 33da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyif [ "$1" == "" ]; then 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines for c in $HERE/*.{c,cc}; do 35da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany if [[ $c == */failing_* ]]; then 36da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany echo SKIPPING FAILING TEST $c 37da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany continue 38da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany fi 39c9b626e27dc7555d649aae19c8caf4ddd21ea3a7Alexey Samsonov if [[ $c == */load_shared_lib.cc ]]; then 40c9b626e27dc7555d649aae19c8caf4ddd21ea3a7Alexey Samsonov echo TEST $c is not supported 41c9b626e27dc7555d649aae19c8caf4ddd21ea3a7Alexey Samsonov continue 42c9b626e27dc7555d649aae19c8caf4ddd21ea3a7Alexey Samsonov fi 435d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines if [[ $c == */*blacklist*.cc ]]; then 445d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines echo TEST $c is not supported 455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines continue 465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines fi 473f5f59ad7e542542775b780d5bfbc288c35ed6eaDmitry Vyukov if [ "`grep "TSAN_OPTIONS" $c`" ]; then 483f5f59ad7e542542775b780d5bfbc288c35ed6eaDmitry Vyukov echo SKIPPING $c -- requires TSAN_OPTIONS 493f5f59ad7e542542775b780d5bfbc288c35ed6eaDmitry Vyukov continue 503f5f59ad7e542542775b780d5bfbc288c35ed6eaDmitry Vyukov fi 511b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany COMPILER=$CXX 521b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany case $c in 531b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany *.c) COMPILER=$CC 541b2d44c0473e84bc43514c1f3adc0ed30f297ebdKostya Serebryany esac 55c9fa0924dbbb71b32a4ecc50f5dbce3a9c0cb199Dmitry Vyukov test_file $c $COMPILER & 56c9fa0924dbbb71b32a4ecc50f5dbce3a9c0cb199Dmitry Vyukov done 57c9fa0924dbbb71b32a4ecc50f5dbce3a9c0cb199Dmitry Vyukov for job in `jobs -p`; do 58c9fa0924dbbb71b32a4ecc50f5dbce3a9c0cb199Dmitry Vyukov wait $job || exit 1 59da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryany done 60da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyelse 612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines test_file $HERE/$1 $CXX "DUMP" 62da4edd850db1a333c15fc3b0abc01a2e8d2f08feKostya Serebryanyfi 63