#!/bin/sh RUST_BACKTRACE=1 $RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-1.log 2>&1 RUST_BACKTRACE=full $RUSTC src/lib.rs -Z treat-err-as-bug=1 1>$TMPDIR/rust-test-2.log 2>&1 short=$(cat $TMPDIR/rust-test-1.log | wc -l) full=$(cat $TMPDIR/rust-test-2.log | wc -l) rustc_query_count=$(cat $TMPDIR/rust-test-1.log | grep rustc_query_ | wc -l) rustc_query_count_full=$(cat $TMPDIR/rust-test-2.log | grep rustc_query_ | wc -l) begin_count=$(cat $TMPDIR/rust-test-2.log | grep __rust_begin_short_backtrace | wc -l) end_count=$(cat $TMPDIR/rust-test-2.log | grep __rust_end_short_backtrace | wc -l) cat $TMPDIR/rust-test-1.log echo "=====================" cat $TMPDIR/rust-test-2.log echo "=====================" echo "short backtrace: $short" echo "full backtrace: $full" echo "begin_count: $begin_count" echo "end_count : $end_count" echo "rustc_query_count: $rustc_query_count" echo "rustc_query_count_full: $rustc_query_count_full" ## backtraces to vary a bit depending on platform and configuration options, ## here we make sure that the short backtrace of rustc_query is shorter than the full, ## and marks are in pairs. if [ $short -lt $full ] && [ $begin_count -eq $end_count ] && [ $(($rustc_query_count + 5)) -lt $rustc_query_count_full ] && [ $rustc_query_count_full -gt 5 ]; then exit 0 else exit 1 fi