diff --git a/scripts/check_memory_errors.sh b/scripts/check_memory_errors.sh index 099c8d80a..6f58de232 100755 --- a/scripts/check_memory_errors.sh +++ b/scripts/check_memory_errors.sh @@ -1,10 +1,11 @@ #!/usr/bin/env bash +set -euo pipefail + RUN_VALGRIND=0 RUN_COMPUTE_SANITIZER=0 -while [ -n "$1" ] -do +while [ -n "${1:-}" ]; do case "$1" in "--cpu" ) RUN_VALGRIND=1 @@ -32,7 +33,8 @@ RUSTFLAGS="$RUSTFLAGS" cargo "${CARGO_RS_BUILD_TOOLCHAIN}" nextest list --cargo- --features=integer,internal-keycache,gpu-debug,zk-pok -p "${TFHE_SPEC}" &> /tmp/test_list.txt # Filter the tests to get only the HL ones -TESTS_HL=$(sed -e $'s/\x1b\[[0-9;]*m//g' < /tmp/test_list.txt | grep 'high_level_api::.*gpu.*' ) +TESTS_HL=$(sed -e $'s/\x1b\[[0-9;]*m//g' < /tmp/test_list.txt | grep 'high_level_api::booleans::tests::.*gpu.*' | grep -v 'array') + if [[ "${RUN_VALGRIND}" == "1" ]]; then # Build the tests but don't run them @@ -43,21 +45,19 @@ if [[ "${RUN_VALGRIND}" == "1" ]]; then EXECUTABLE=target/release/deps/$(find target/release/deps/ -type f -executable -name "tfhe-*" -printf "%T@ %f\n" |sort -nr|sed 's/^.* //; q;') # shellcheck disable=SC2181 - RESULT=0 && \ - while read -r t; do \ - echo valgrind --leak-check=full --show-leak-kinds=definite "$(pwd)"/"${EXECUTABLE}" -- "${t}" && \ - valgrind --leak-check=full --show-leak-kinds=definite "$(pwd)"/"${EXECUTABLE}" -- "${t}" && \ - if [[ $? != "0" ]]; then \ - RESULT=1; \ - fi; \ - done <<< "${TESTS_HL}" - - if [ $RESULT -ne 0 ]; then \ - exit $RESULT; \ - fi; + RESULT=0 + while read -r t; do + [ -z "$t" ] && continue + echo "Running valgrind on: $t" + VALGRIND_EXIT=0 + valgrind --leak-check=full --show-leak-kinds=definite "$EXECUTABLE" -- "$t" || VALGRIND_EXIT=$? + if [[ $VALGRIND_EXIT -ne 0 ]]; then + RESULT=1 + fi + done <<< "$TESTS_HL" fi -TESTS_HL=$(sed -e $'s/\x1b\[[0-9;]*m//g' < /tmp/test_list.txt | grep 'high_level_api::.*gpu.*' ) +TESTS_HL=$(sed -e $'s/\x1b\[[0-9;]*m//g' < /tmp/test_list.txt | grep 'high_level_api::booleans::tests::.*gpu.*' | grep -v 'array') if [[ "${RUN_COMPUTE_SANITIZER}" == "1" ]]; then # Build the tests but don't run them @@ -67,20 +67,18 @@ if [[ "${RUN_COMPUTE_SANITIZER}" == "1" ]]; then # Find the test executable -> last one to have been modified EXECUTABLE=target/release/deps/$(find target/release/deps/ -type f -executable -name "tfhe-*" -printf "%T@ %f\n" |sort -nr|sed 's/^.* //; q;') - # Run compute sanitizer on each test individually - # shellcheck disable=SC2181 - RESULT=0 && \ - while read -r t; do \ - echo compute-sanitizer --tool memcheck --target-processes=all "$(pwd)"/"${EXECUTABLE}" -- "${t}" && \ - compute-sanitizer --tool memcheck --leak-check=full --error-exitcode=1 --target-processes=all "$(pwd)"/"${EXECUTABLE}" -- "${t}" && \ - if [[ $? != "0" ]]; then \ - RESULT=1; \ - fi; \ - done <<< "${TESTS_HL}" - - if [ $RESULT -ne 0 ]; then \ - exit $RESULT; \ - fi; + RESULT=0 + while read -r t; do + [ -z "$t" ] && continue + echo "Running compute-sanitizer on: $t" + CS_EXIT=0 + compute-sanitizer --tool memcheck --leak-check=full \ + --error-exitcode=1 --target-processes=all \ + "$EXECUTABLE" -- "$t" || CS_EXIT=$? + if [[ $CS_EXIT -ne 0 ]]; then + RESULT=1 + fi + done <<< "$TESTS_HL" fi -exit 0 +exit $RESULT