xref: /llvm-project/compiler-rt/test/tsan/deflake.bash (revision dadc214e4d9d09a8a7a9f15780c1201c18f93e05)
1233f401cSDmitry Vyukov#!/usr/bin/env bash
2233f401cSDmitry Vyukov# This script is used to deflake inherently flaky tsan tests.
3233f401cSDmitry Vyukov# It is invoked from lit tests as:
4*dadc214eSAnh Tuyen Tran# %deflake $THRESHOLD  mybinary
5233f401cSDmitry Vyukov# which is then substituted by lit to:
6*dadc214eSAnh Tuyen Tran# $(dirname %s)/deflake.bash $THRESHOLD mybinary
7*dadc214eSAnh Tuyen Tran# - When TSAN_TEST_DEFLAKE_THRESHOLD is defined to a positive integer value,
8*dadc214eSAnh Tuyen Tran#   THRESHOLD will be the defined value.
9*dadc214eSAnh Tuyen Tran# - When TSAN_TEST_DEFLAKE_THRESHOLD is not defined, THRESHOLD will be 10.
10*dadc214eSAnh Tuyen Tran# The script runs the target program up to $THRESHOLD times,
11233f401cSDmitry Vyukov# until it fails (i.e. produces a race report).
12233f401cSDmitry Vyukov
13*dadc214eSAnh Tuyen TranTHRESHOLD="${1}"
14*dadc214eSAnh Tuyen Transhift
15*dadc214eSAnh Tuyen Tran
16*dadc214eSAnh Tuyen Tran# Early exit if $THRESHOLD is not a non-negative integer
17*dadc214eSAnh Tuyen Tran[[  "${THRESHOLD}" =~ ^[0-9]+$ ]] || exit 1
18*dadc214eSAnh Tuyen Tran
19*dadc214eSAnh Tuyen Tranwhile (( THRESHOLD-- )); do
20233f401cSDmitry Vyukov	OUT=`$@ 2>&1`
21233f401cSDmitry Vyukov	if [[ $? != 0 ]]; then
22233f401cSDmitry Vyukov		echo "$OUT"
23233f401cSDmitry Vyukov		exit 0
24233f401cSDmitry Vyukov	fi
25233f401cSDmitry Vyukovdone
26233f401cSDmitry Vyukovexit 1
27