]> git.lizzy.rs Git - rust.git/commitdiff
Diagnose use sanitizers with crt-static
author12101111 <w12101111@gmail.com>
Fri, 21 May 2021 17:24:50 +0000 (01:24 +0800)
committer12101111 <w12101111@gmail.com>
Fri, 28 May 2021 16:15:28 +0000 (00:15 +0800)
compiler/rustc_session/src/session.rs
src/test/ui/sanitize/crt-static.rs [new file with mode: 0644]
src/test/ui/sanitize/crt-static.stderr [new file with mode: 0644]

index 1348b02b8780fa4975f934db61b2bb47781fe04e..a388c1b18db2580a516d6eac729795dbcfb06459 100644 (file)
@@ -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 (file)
index 0000000..f5dd2a4
--- /dev/null
@@ -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 (file)
index 0000000..3a9c636
--- /dev/null
@@ -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
+