@@ -295,16 +295,30 @@ where
295295
296296 // add some flags to sanitizers to make them work with Rust code
297297 let asan_options = env:: var ( "ASAN_OPTIONS" ) . unwrap_or_default ( ) ;
298- let asan_options = format ! ( "detect_odr_violation=0:abort_on_error=1:symbolize=0:{}" , asan_options) ;
298+ let asan_options = format ! (
299+ "detect_odr_violation=0:abort_on_error=1:symbolize=0:{}" ,
300+ asan_options
301+ ) ;
299302
300303 let tsan_options = env:: var ( "TSAN_OPTIONS" ) . unwrap_or_default ( ) ;
301304 let tsan_options = format ! ( "report_signal_unsafe=0:{}" , tsan_options) ;
302305
306+ let version_meta = rustc_version:: version_meta ( ) . unwrap ( ) ;
307+ let passes = if version_meta. semver . minor >= 57
308+ && version_meta. llvm_version . unwrap_or ( true , |v| v. major >= 13 )
309+ {
310+ // New LLVM pass manager is enabled when Rust 1.57+ and LLVM 13+
311+ // https://github.com/rust-lang/rust/pull/88243
312+ "sancov-module"
313+ } else {
314+ "sancov"
315+ } ;
316+
303317 let mut rustflags = format ! (
304318 "--cfg fuzzing \
305319 -C debug-assertions \
306320 -C overflow_checks \
307- -C passes=sancov \
321+ -C passes={} \
308322 -C llvm-args=-sanitizer-coverage-level=3 \
309323 -C llvm-args=-sanitizer-coverage-trace-pc-guard \
310324 -C llvm-args=-sanitizer-coverage-prune-blocks=0 \
@@ -313,6 +327,7 @@ where
313327 -C debuginfo=0 \
314328 -l afl-llvm-rt \
315329 -L {} ",
330+ passes,
316331 common:: afl_llvm_rt_dir( ) . display( )
317332 ) ;
318333
@@ -323,14 +338,15 @@ where
323338 "--cfg fuzzing \
324339 -C debug-assertions \
325340 -C overflow_checks \
326- -C passes=sancov \
341+ -C passes={} \
327342 -C llvm-args=-sanitizer-coverage-level=3 \
328343 -C llvm-args=-sanitizer-coverage-trace-pc-guard \
329344 -C llvm-args=-sanitizer-coverage-prune-blocks=0 \
330345 -C opt-level=3 \
331346 -C target-cpu=native \
332347 -C debuginfo=0 \
333348 -L {} ",
349+ passes,
334350 common:: afl_llvm_rt_dir( ) . display( )
335351 ) ;
336352
0 commit comments