X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_session%2Fsession.rs;h=a40d6451b958c6cc865efc907825bdcaf0d143f5;hb=6980f82c0d152446506fee4d4a45d8afdf4ad9a4;hp=dba5b9f3f14c229f47a326de065107e9e7ed0a6a;hpb=5a485ce4a3767bcac6bcc7bf66867c59c30eaeb1;p=rust.git diff --git a/src/librustc_session/session.rs b/src/librustc_session/session.rs index dba5b9f3f14..a40d6451b95 100644 --- a/src/librustc_session/session.rs +++ b/src/librustc_session/session.rs @@ -1124,6 +1124,36 @@ fn validate_commandline_args_with_session_available(sess: &Session) { See https://github.com/rust-lang/rust/issues/61002 for details.", ); } + + // Sanitizers can only be used on some tested platforms. + if let Some(ref sanitizer) = sess.opts.debugging_opts.sanitizer { + const ASAN_SUPPORTED_TARGETS: &[&str] = &[ + "x86_64-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-fuchsia", + "aarch64-fuchsia", + ]; + const TSAN_SUPPORTED_TARGETS: &[&str] = + &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin"]; + const LSAN_SUPPORTED_TARGETS: &[&str] = + &["x86_64-unknown-linux-gnu", "x86_64-apple-darwin"]; + const MSAN_SUPPORTED_TARGETS: &[&str] = &["x86_64-unknown-linux-gnu"]; + + let supported_targets = match *sanitizer { + Sanitizer::Address => ASAN_SUPPORTED_TARGETS, + Sanitizer::Thread => TSAN_SUPPORTED_TARGETS, + Sanitizer::Leak => LSAN_SUPPORTED_TARGETS, + Sanitizer::Memory => MSAN_SUPPORTED_TARGETS, + }; + + if !supported_targets.contains(&&*sess.opts.target_triple.triple()) { + sess.err(&format!( + "{:?}Sanitizer only works with the `{}` target", + sanitizer, + supported_targets.join("` or `") + )); + } + } } /// Hash value constructed out of all the `-C metadata` arguments passed to the