From 43764844399af82f407fe963fa708e8f90981ea4 Mon Sep 17 00:00:00 2001 From: 12101111 Date: Sat, 22 May 2021 01:24:50 +0800 Subject: [PATCH] Diagnose use sanitizers with crt-static --- compiler/rustc_session/src/session.rs | 8 ++++++++ src/test/ui/sanitize/crt-static.rs | 5 +++++ src/test/ui/sanitize/crt-static.stderr | 4 ++++ 3 files changed, 17 insertions(+) create mode 100644 src/test/ui/sanitize/crt-static.rs create mode 100644 src/test/ui/sanitize/crt-static.stderr diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index 1348b02b8780f..a388c1b18db25 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -1512,6 +1512,14 @@ fn validate_commandline_args_with_session_available(sess: &Session) { if let (Some(first), Some(second)) = (sanitizer_iter.next(), sanitizer_iter.next()) { sess.err(&format!("`-Zsanitizer={}` is incompatible with `-Zsanitizer={}`", first, second)); } + + // Cannot enable crt-static with sanitizers on Linux + if sess.crt_static(None) && !sess.opts.debugging_opts.sanitizer.is_empty() { + sess.err( + "Sanitizer is incompatible with statically linked libc, \ + disable it using `-C target-feature=-crt-static`", + ); + } } /// Holds data on the current incremental compilation session, if there is one. diff --git a/src/test/ui/sanitize/crt-static.rs b/src/test/ui/sanitize/crt-static.rs new file mode 100644 index 0000000000000..f5dd2a40cc4cb --- /dev/null +++ b/src/test/ui/sanitize/crt-static.rs @@ -0,0 +1,5 @@ +// compile-flags: -Z sanitizer=address -C target-feature=+crt-static --target x86_64-unknown-linux-gnu + +#![feature(no_core)] +#![no_core] +#![no_main] diff --git a/src/test/ui/sanitize/crt-static.stderr b/src/test/ui/sanitize/crt-static.stderr new file mode 100644 index 0000000000000..3a9c636d76046 --- /dev/null +++ b/src/test/ui/sanitize/crt-static.stderr @@ -0,0 +1,4 @@ +error: Sanitizer is incompatible with statically linked libc, disable it using `-C target-feature=-crt-static` + +error: aborting due to previous error +