blob: bd8573e41eae4e6f8b6da623026616553799b2b6 [file] [log] [blame]
Kostya Serebryanyff15ef02012-05-10 14:18:22 +00001#!/bin/bash
2
Dmitry Vyukovd004b992012-05-14 15:25:35 +00003ulimit -s 8192
Kostya Serebryanyff15ef02012-05-10 14:18:22 +00004set -e # fail on any error
5
Kostya Serebryany0e6705e2012-05-11 14:58:20 +00006ROOTDIR=$(dirname $0)/..
Kostya Serebryanyff15ef02012-05-10 14:18:22 +00007
8# Assuming clang is in path.
9CC=clang
10CXX=clang++
11
12# TODO: add testing for all of -O0...-O3
Dmitry Vyukovd004b992012-05-14 15:25:35 +000013CFLAGS="-fthread-sanitizer -fPIE -O1 -g -fno-builtin -Wall"
Kostya Serebryany5b7cb1d2012-05-10 15:10:03 +000014LDFLAGS="-pie -lpthread -ldl $ROOTDIR/rtl/libtsan.a"
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000015
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000016test_file() {
17 SRC=$1
18 COMPILER=$2
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000019 echo ----- TESTING $(basename $1)
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000020 OBJ=$SRC.o
21 EXE=$SRC.exe
22 $COMPILER $SRC $CFLAGS -c -o $OBJ
Dmitry Vyukovd004b992012-05-14 15:25:35 +000023 $COMPILER $OBJ $LDFLAGS -o $EXE
24 RES=$(TSAN_OPTIONS="atexit_sleep_ms=0" $EXE 2>&1 || true)
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000025 if [ "$3" != "" ]; then
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000026 printf "%s\n" "$RES"
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000027 fi
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000028 printf "%s\n" "$RES" | FileCheck $SRC
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000029 if [ "$3" == "" ]; then
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000030 rm -f $EXE $OBJ
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000031 fi
32}
33
34if [ "$1" == "" ]; then
Alexey Samsonov341e5bc2012-09-18 07:23:54 +000035 for c in $ROOTDIR/lit_tests/*.{c,cc}; do
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000036 if [[ $c == */failing_* ]]; then
37 echo SKIPPING FAILING TEST $c
38 continue
39 fi
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000040 COMPILER=$CXX
41 case $c in
42 *.c) COMPILER=$CC
43 esac
Dmitry Vyukov0c40a562012-10-02 11:51:40 +000044 test_file $c $COMPILER &
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000045 done
Dmitry Vyukov0c40a562012-10-02 11:51:40 +000046 for job in `jobs -p`; do
47 wait $job || exit 1
48 done
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000049else
Alexey Samsonov341e5bc2012-09-18 07:23:54 +000050 test_file $ROOTDIR/lit_tests/$1 $CXX "DUMP"
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000051fi