about summary refs log tree commit diff
path: root/compiler/rustc_plugin_impl/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-05-17 01:42:03 +0000
committerbors <bors@rust-lang.org>2021-05-17 01:42:03 +0000
commit3396a383bb1d1fdad8ceeb74f16cf08e0bd62a1b (patch)
tree912246be6d9298983c099d904ee9260e77695a62 /compiler/rustc_plugin_impl/src
parenta55748ffe94e71f841c7b1d752779b0db138b342 (diff)
parent1ebf6d12426152dc1ce76c174ee0ff69b1a4c5b4 (diff)
downloadrust-3396a383bb1d1fdad8ceeb74f16cf08e0bd62a1b.tar.gz
rust-3396a383bb1d1fdad8ceeb74f16cf08e0bd62a1b.zip
Auto merge of #85178 - cjgillot:local-crate, r=oli-obk
Remove CrateNum parameter for queries that only work on local crate

The pervasive `CrateNum` parameter is a remnant of the multi-crate rustc idea.

Using `()` as query key in those cases avoids having to worry about the validity of the query key.
Diffstat (limited to 'compiler/rustc_plugin_impl/src')
-rw-r--r--compiler/rustc_plugin_impl/src/build.rs38
1 files changed, 15 insertions, 23 deletions
diff --git a/compiler/rustc_plugin_impl/src/build.rs b/compiler/rustc_plugin_impl/src/build.rs
index a49afa35e46..b95c4a72019 100644
--- a/compiler/rustc_plugin_impl/src/build.rs
+++ b/compiler/rustc_plugin_impl/src/build.rs
@@ -1,7 +1,7 @@
 //! Used by `rustc` when compiling a plugin crate.
 
 use rustc_hir as hir;
-use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, LOCAL_CRATE};
+use rustc_hir::def_id::LocalDefId;
 use rustc_hir::itemlikevisit::ItemLikeVisitor;
 use rustc_middle::ty::query::Providers;
 use rustc_middle::ty::TyCtxt;
@@ -31,33 +31,25 @@ impl<'v, 'tcx> ItemLikeVisitor<'v> for RegistrarFinder<'tcx> {
 }
 
 /// Finds the function marked with `#[plugin_registrar]`, if any.
-pub fn find_plugin_registrar(tcx: TyCtxt<'_>) -> Option<DefId> {
-    tcx.plugin_registrar_fn(LOCAL_CRATE)
-}
-
-fn plugin_registrar_fn(tcx: TyCtxt<'_>, cnum: CrateNum) -> Option<DefId> {
-    assert_eq!(cnum, LOCAL_CRATE);
-
+fn plugin_registrar_fn(tcx: TyCtxt<'_>, (): ()) -> Option<LocalDefId> {
     let mut finder = RegistrarFinder { tcx, registrars: Vec::new() };
     tcx.hir().krate().visit_all_item_likes(&mut finder);
 
-    match finder.registrars.len() {
-        0 => None,
-        1 => {
-            let (def_id, _) = finder.registrars.pop().unwrap();
-            Some(def_id.to_def_id())
-        }
-        _ => {
-            let diagnostic = tcx.sess.diagnostic();
-            let mut e = diagnostic.struct_err("multiple plugin registration functions found");
-            for &(_, span) in &finder.registrars {
-                e.span_note(span, "one is here");
-            }
-            e.emit();
-            diagnostic.abort_if_errors();
-            unreachable!();
+    let (def_id, span) = finder.registrars.pop()?;
+
+    if !finder.registrars.is_empty() {
+        let diagnostic = tcx.sess.diagnostic();
+        let mut e = diagnostic.struct_err("multiple plugin registration functions found");
+        e.span_note(span, "one is here");
+        for &(_, span) in &finder.registrars {
+            e.span_note(span, "one is here");
         }
+        e.emit();
+        diagnostic.abort_if_errors();
+        unreachable!();
     }
+
+    Some(def_id)
 }
 
 pub fn provide(providers: &mut Providers) {