about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jsgf@fb.com>2020-06-01 16:21:27 -0700
committerJeremy Fitzhardinge <jsgf@fb.com>2020-06-01 16:29:25 -0700
commit3dd6f2cd75102af36faf345e62a06a58cdaf15b9 (patch)
tree0e18089fdb31cd7a7029a9a42267295b9945fb22
parentad4bc3323b9299d867697e9653dcea1b5e1ad283 (diff)
downloadrust-3dd6f2cd75102af36faf345e62a06a58cdaf15b9.tar.gz
rust-3dd6f2cd75102af36faf345e62a06a58cdaf15b9.zip
Don't count pathless --extern options for unused-crate-dependencies warnings
`--extern proc_macro` is used to add the proc_macro crate to the extern
prelude for all procmacros. In general pathless `--extern` only references
sysroot/standard libraries and so should be exempt from
unused-crate-dependencies warnings.
-rw-r--r--src/librustc_metadata/creader.rs8
-rw-r--r--src/test/ui/unused-crate-deps/ignore-pathless-extern.rs12
2 files changed, 18 insertions, 2 deletions
diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs
index db29e953899..7e902f0ade2 100644
--- a/src/librustc_metadata/creader.rs
+++ b/src/librustc_metadata/creader.rs
@@ -18,7 +18,7 @@ use rustc_middle::middle::cstore::{
     CrateSource, ExternCrate, ExternCrateSource, MetadataLoaderDyn,
 };
 use rustc_middle::ty::TyCtxt;
-use rustc_session::config::{self, CrateType};
+use rustc_session::config::{self, CrateType, ExternLocation};
 use rustc_session::lint;
 use rustc_session::output::validate_crate_name;
 use rustc_session::search_paths::PathKind;
@@ -850,7 +850,11 @@ impl<'a> CrateLoader<'a> {
         // Make a point span rather than covering the whole file
         let span = krate.span.shrink_to_lo();
         // Complain about anything left over
-        for (name, _) in self.sess.opts.externs.iter() {
+        for (name, entry) in self.sess.opts.externs.iter() {
+            if let ExternLocation::FoundInLibrarySearchDirectories = entry.location {
+                // Don't worry about pathless `--extern foo` sysroot references
+                continue;
+            }
             if !self.used_extern_options.contains(&Symbol::intern(name)) {
                 self.sess.parse_sess.buffer_lint(
                     lint::builtin::UNUSED_CRATE_DEPENDENCIES,
diff --git a/src/test/ui/unused-crate-deps/ignore-pathless-extern.rs b/src/test/ui/unused-crate-deps/ignore-pathless-extern.rs
new file mode 100644
index 00000000000..8c273cb534d
--- /dev/null
+++ b/src/test/ui/unused-crate-deps/ignore-pathless-extern.rs
@@ -0,0 +1,12 @@
+// Pathless --extern references don't count
+
+// edition:2018
+// check-pass
+// aux-crate:bar=bar.rs
+// compile-flags:--extern proc_macro
+
+#![warn(unused_crate_dependencies)]
+
+use bar as _;
+
+fn main() {}