Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
Dmitry Vyukov | d004b99 | 2012-05-14 15:25:35 +0000 | [diff] [blame] | 3 | ulimit -s 8192 |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 4 | set -e # fail on any error |
| 5 | |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 6 | ROOTDIR=$(dirname $0)/.. |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 7 | |
| 8 | # Assuming clang is in path. |
| 9 | CC=clang |
| 10 | CXX=clang++ |
| 11 | |
| 12 | # TODO: add testing for all of -O0...-O3 |
Dmitry Vyukov | d004b99 | 2012-05-14 15:25:35 +0000 | [diff] [blame] | 13 | CFLAGS="-fthread-sanitizer -fPIE -O1 -g -fno-builtin -Wall" |
Kostya Serebryany | 5b7cb1d | 2012-05-10 15:10:03 +0000 | [diff] [blame] | 14 | LDFLAGS="-pie -lpthread -ldl $ROOTDIR/rtl/libtsan.a" |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 15 | |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 16 | test_file() { |
| 17 | SRC=$1 |
| 18 | COMPILER=$2 |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 19 | echo ----- TESTING $(basename $1) |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 20 | OBJ=$SRC.o |
| 21 | EXE=$SRC.exe |
| 22 | $COMPILER $SRC $CFLAGS -c -o $OBJ |
Dmitry Vyukov | d004b99 | 2012-05-14 15:25:35 +0000 | [diff] [blame] | 23 | $COMPILER $OBJ $LDFLAGS -o $EXE |
| 24 | RES=$(TSAN_OPTIONS="atexit_sleep_ms=0" $EXE 2>&1 || true) |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 25 | if [ "$3" != "" ]; then |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 26 | printf "%s\n" "$RES" |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 27 | fi |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 28 | printf "%s\n" "$RES" | FileCheck $SRC |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 29 | if [ "$3" == "" ]; then |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 30 | rm -f $EXE $OBJ |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 31 | fi |
| 32 | } |
| 33 | |
| 34 | if [ "$1" == "" ]; then |
Alexey Samsonov | 341e5bc | 2012-09-18 07:23:54 +0000 | [diff] [blame] | 35 | for c in $ROOTDIR/lit_tests/*.{c,cc}; do |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 36 | if [[ $c == */failing_* ]]; then |
| 37 | echo SKIPPING FAILING TEST $c |
| 38 | continue |
| 39 | fi |
Kostya Serebryany | 0e6705e | 2012-05-11 14:58:20 +0000 | [diff] [blame] | 40 | COMPILER=$CXX |
| 41 | case $c in |
| 42 | *.c) COMPILER=$CC |
| 43 | esac |
Dmitry Vyukov | 0c40a56 | 2012-10-02 11:51:40 +0000 | [diff] [blame^] | 44 | test_file $c $COMPILER & |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 45 | done |
Dmitry Vyukov | 0c40a56 | 2012-10-02 11:51:40 +0000 | [diff] [blame^] | 46 | for job in `jobs -p`; do |
| 47 | wait $job || exit 1 |
| 48 | done |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 49 | else |
Alexey Samsonov | 341e5bc | 2012-09-18 07:23:54 +0000 | [diff] [blame] | 50 | test_file $ROOTDIR/lit_tests/$1 $CXX "DUMP" |
Kostya Serebryany | ff15ef0 | 2012-05-10 14:18:22 +0000 | [diff] [blame] | 51 | fi |