about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2020-06-03 18:05:39 +0200
committerGitHub <noreply@github.com>2020-06-03 18:05:39 +0200
commit7973d9381fe813abc83b3849fdf1fd9de8b51e5d (patch)
treedaaf30d423e22e5231137231fd28e53a9c49f50f /src
parentf94c0df037d9b68fd02fa02ea63a57d008728a3f (diff)
parent3dd6f2cd75102af36faf345e62a06a58cdaf15b9 (diff)
downloadrust-7973d9381fe813abc83b3849fdf1fd9de8b51e5d.tar.gz
rust-7973d9381fe813abc83b3849fdf1fd9de8b51e5d.zip
Rollup merge of #72900 - jsgf:no-unused-pathless, r=petrochenkov
Don't count pathless --extern 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.

r? @petrochenkov
Diffstat (limited to 'src')
-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() {}