@@ -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