blob: b772848bd97c452e235194208dac41bc7a9b1e9c [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
Richard Smith77930912012-11-06 02:31:42 +000013CFLAGS="-fsanitize=thread -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
Dmitry Vyukov9c7bcfe2012-12-18 12:19:50 +000024 RES=$($EXE 2>&1 || true)
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000025 printf "%s\n" "$RES" | FileCheck $SRC
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000026 if [ "$3" == "" ]; then
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000027 rm -f $EXE $OBJ
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000028 fi
29}
30
31if [ "$1" == "" ]; then
Alexey Samsonov341e5bc2012-09-18 07:23:54 +000032 for c in $ROOTDIR/lit_tests/*.{c,cc}; do
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000033 if [[ $c == */failing_* ]]; then
34 echo SKIPPING FAILING TEST $c
35 continue
36 fi
Kostya Serebryany0e6705e2012-05-11 14:58:20 +000037 COMPILER=$CXX
38 case $c in
39 *.c) COMPILER=$CC
40 esac
Dmitry Vyukov0c40a562012-10-02 11:51:40 +000041 test_file $c $COMPILER &
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000042 done
Dmitry Vyukov0c40a562012-10-02 11:51:40 +000043 for job in `jobs -p`; do
44 wait $job || exit 1
45 done
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000046else
Alexey Samsonov341e5bc2012-09-18 07:23:54 +000047 test_file $ROOTDIR/lit_tests/$1 $CXX "DUMP"
Kostya Serebryanyff15ef02012-05-10 14:18:22 +000048fi