From bb90e2ed873e535be937d1fdad36d61a4af3dc0e Mon Sep 17 00:00:00 2001 From: Mitch Phillips <31459023+hctim@users.noreply.github.com> Date: Tue, 9 Jul 2024 11:23:49 +0200 Subject: [PATCH] [libfuzzer] Fix -runs=X flaky test (fuzzer-finalstats.test) (#96914) Disables LSan in order to remove a 1% flake rate in this test. There's some logic in LeakSanitizer and its integration into libFuzzer that will disable LSan and re-run the input. This only happens when more malloc()s are detected than free()s. Under high system load, this appears to be possible as the "more mallocs than frees" is dependent on walltime. In these instances, the number of runs ends up being `n + 1`, which is undesirable. --- compiler-rt/test/fuzzer/fuzzer-finalstats.test | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler-rt/test/fuzzer/fuzzer-finalstats.test b/compiler-rt/test/fuzzer/fuzzer-finalstats.test index 074b318c077bc4..fe66823c4edbf7 100644 --- a/compiler-rt/test/fuzzer/fuzzer-finalstats.test +++ b/compiler-rt/test/fuzzer/fuzzer-finalstats.test @@ -2,14 +2,22 @@ UNSUPPORTED: target={{.*}} RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest -RUN: %run %t-SimpleTest -seed=1 -runs=77 -print_final_stats=1 2>&1 | FileCheck %s --check-prefix=FINAL_STATS + +// Note: `-detect_leaks=0` is required to prevent flakiness in this test. +// There's some logic in LeakSanitizer and its integration into libFuzzer that +// will disable LSan and re-run the input. This only happens when more malloc()s +// are detected than free()s. Under high system load, this appears to be +// possible as the "more mallocs than frees" is dependent on walltime. In these +// instances, the number of runs ends up being `n + 1`, which is undesirable. + +RUN: %run %t-SimpleTest -seed=1 -runs=77 -print_final_stats=1 -detect_leaks=0 2>&1 | FileCheck %s --check-prefix=FINAL_STATS FINAL_STATS: stat::number_of_executed_units: 77 FINAL_STATS: stat::average_exec_per_sec: 0 FINAL_STATS: stat::new_units_added: FINAL_STATS: stat::slowest_unit_time_sec: 0 FINAL_STATS: stat::peak_rss_mb: -RUN: %run %t-SimpleTest %S/dict1.txt -runs=33 -print_final_stats=1 2>&1 | FileCheck %s --check-prefix=FINAL_STATS1 +RUN: %run %t-SimpleTest %S/dict1.txt -runs=33 -print_final_stats=1 -detect_leaks=0 2>&1 | FileCheck %s --check-prefix=FINAL_STATS1 FINAL_STATS1: stat::number_of_executed_units: 33 FINAL_STATS1: stat::peak_rss_mb: