@@ -9,6 +9,7 @@ use rustc_ast::{self as ast, *};
99use rustc_data_structures::fx::{FxHashMap, FxHashSet};
1010use rustc_data_structures::svh::Svh;
1111use rustc_data_structures::sync::Lrc;
12+ use rustc_errors::FatalError;
1213use rustc_expand::base::SyntaxExtension;
1314use rustc_hir::def_id::{CrateNum, LocalDefId, StableCrateId, LOCAL_CRATE};
1415use rustc_hir::definitions::Definitions;
@@ -507,18 +508,31 @@ impl<'a> CrateLoader<'a> {
507508 }))
508509 }
509510
510- fn resolve_crate <'b>(
511+ fn resolve_crate_or_abort <'b>(
511512 &'b mut self,
512513 name: Symbol,
513514 span: Span,
514515 dep_kind: CrateDepKind,
515516 ) -> CrateNum {
517+ self.resolve_crate(name, span, dep_kind).unwrap_or_else(|| FatalError.raise())
518+ }
519+
520+ fn resolve_crate<'b>(
521+ &'b mut self,
522+ name: Symbol,
523+ span: Span,
524+ dep_kind: CrateDepKind,
525+ ) -> Option<CrateNum> {
516526 self.used_extern_options.insert(name);
517- self.maybe_resolve_crate(name, dep_kind, None).unwrap_or_else(|err| {
518- let missing_core =
519- self.maybe_resolve_crate(sym::core, CrateDepKind::Explicit, None).is_err();
520- err.report(&self.sess, span, missing_core)
521- })
527+ self.maybe_resolve_crate(name, dep_kind, None).map_or_else(
528+ |err| {
529+ let missing_core =
530+ self.maybe_resolve_crate(sym::core, CrateDepKind::Explicit, None).is_err();
531+ err.report(&self.sess, span, missing_core);
532+ None
533+ },
534+ |cnum| Some(cnum),
535+ )
522536 }
523537
524538 fn maybe_resolve_crate<'b>(
@@ -751,7 +765,7 @@ impl<'a> CrateLoader<'a> {
751765 };
752766 info!("panic runtime not found -- loading {}", name);
753767
754- let cnum = self.resolve_crate (name, DUMMY_SP, CrateDepKind::Implicit);
768+ let cnum = self.resolve_crate_or_abort (name, DUMMY_SP, CrateDepKind::Implicit);
755769 let data = self.cstore.get_crate_data(cnum);
756770
757771 // Sanity check the loaded crate to ensure it is indeed a panic runtime
@@ -791,7 +805,7 @@ impl<'a> CrateLoader<'a> {
791805 );
792806 }
793807
794- let cnum = self.resolve_crate (name, DUMMY_SP, CrateDepKind::Implicit);
808+ let cnum = self.resolve_crate_or_abort (name, DUMMY_SP, CrateDepKind::Implicit);
795809 let data = self.cstore.get_crate_data(cnum);
796810
797811 // Sanity check the loaded crate to ensure it is indeed a profiler runtime
@@ -991,7 +1005,7 @@ impl<'a> CrateLoader<'a> {
9911005 item: &ast::Item,
9921006 definitions: &Definitions,
9931007 def_id: LocalDefId,
994- ) -> CrateNum {
1008+ ) -> Option< CrateNum> {
9951009 match item.kind {
9961010 ast::ItemKind::ExternCrate(orig_name) => {
9971011 debug!(
@@ -1011,7 +1025,7 @@ impl<'a> CrateLoader<'a> {
10111025 CrateDepKind::Explicit
10121026 };
10131027
1014- let cnum = self.resolve_crate(name, item.span, dep_kind);
1028+ let cnum = self.resolve_crate(name, item.span, dep_kind)? ;
10151029
10161030 let path_len = definitions.def_path(def_id).data.len();
10171031 self.update_extern_crate(
@@ -1023,14 +1037,14 @@ impl<'a> CrateLoader<'a> {
10231037 dependency_of: LOCAL_CRATE,
10241038 },
10251039 );
1026- cnum
1040+ Some( cnum)
10271041 }
10281042 _ => bug!(),
10291043 }
10301044 }
10311045
10321046 pub fn process_path_extern(&mut self, name: Symbol, span: Span) -> CrateNum {
1033- let cnum = self.resolve_crate (name, span, CrateDepKind::Explicit);
1047+ let cnum = self.resolve_crate_or_abort (name, span, CrateDepKind::Explicit);
10341048
10351049 self.update_extern_crate(
10361050 cnum,
0 commit comments