@@ -9,6 +9,7 @@ use rustc_ast::{self as ast, *};
9
9
use rustc_data_structures:: fx:: { FxHashMap , FxHashSet } ;
10
10
use rustc_data_structures:: svh:: Svh ;
11
11
use rustc_data_structures:: sync:: Lrc ;
12
+ use rustc_errors:: FatalError ;
12
13
use rustc_expand:: base:: SyntaxExtension ;
13
14
use rustc_hir:: def_id:: { CrateNum , LocalDefId , StableCrateId , LOCAL_CRATE } ;
14
15
use rustc_hir:: definitions:: Definitions ;
@@ -507,18 +508,31 @@ impl<'a> CrateLoader<'a> {
507
508
} ) )
508
509
}
509
510
510
- fn resolve_crate < ' b > (
511
+ fn resolve_crate_or_abort < ' b > (
511
512
& ' b mut self ,
512
513
name : Symbol ,
513
514
span : Span ,
514
515
dep_kind : CrateDepKind ,
515
516
) -> 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 > {
516
526
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
+ )
522
536
}
523
537
524
538
fn maybe_resolve_crate < ' b > (
@@ -751,7 +765,7 @@ impl<'a> CrateLoader<'a> {
751
765
} ;
752
766
info ! ( "panic runtime not found -- loading {}" , name) ;
753
767
754
- let cnum = self . resolve_crate ( name, DUMMY_SP , CrateDepKind :: Implicit ) ;
768
+ let cnum = self . resolve_crate_or_abort ( name, DUMMY_SP , CrateDepKind :: Implicit ) ;
755
769
let data = self . cstore . get_crate_data ( cnum) ;
756
770
757
771
// Sanity check the loaded crate to ensure it is indeed a panic runtime
@@ -791,7 +805,7 @@ impl<'a> CrateLoader<'a> {
791
805
) ;
792
806
}
793
807
794
- let cnum = self . resolve_crate ( name, DUMMY_SP , CrateDepKind :: Implicit ) ;
808
+ let cnum = self . resolve_crate_or_abort ( name, DUMMY_SP , CrateDepKind :: Implicit ) ;
795
809
let data = self . cstore . get_crate_data ( cnum) ;
796
810
797
811
// Sanity check the loaded crate to ensure it is indeed a profiler runtime
@@ -991,7 +1005,7 @@ impl<'a> CrateLoader<'a> {
991
1005
item : & ast:: Item ,
992
1006
definitions : & Definitions ,
993
1007
def_id : LocalDefId ,
994
- ) -> CrateNum {
1008
+ ) -> Option < CrateNum > {
995
1009
match item. kind {
996
1010
ast:: ItemKind :: ExternCrate ( orig_name) => {
997
1011
debug ! (
@@ -1011,7 +1025,7 @@ impl<'a> CrateLoader<'a> {
1011
1025
CrateDepKind :: Explicit
1012
1026
} ;
1013
1027
1014
- let cnum = self . resolve_crate ( name, item. span , dep_kind) ;
1028
+ let cnum = self . resolve_crate ( name, item. span , dep_kind) ? ;
1015
1029
1016
1030
let path_len = definitions. def_path ( def_id) . data . len ( ) ;
1017
1031
self . update_extern_crate (
@@ -1023,14 +1037,14 @@ impl<'a> CrateLoader<'a> {
1023
1037
dependency_of : LOCAL_CRATE ,
1024
1038
} ,
1025
1039
) ;
1026
- cnum
1040
+ Some ( cnum)
1027
1041
}
1028
1042
_ => bug ! ( ) ,
1029
1043
}
1030
1044
}
1031
1045
1032
1046
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 ) ;
1034
1048
1035
1049
self . update_extern_crate (
1036
1050
cnum,
0 commit comments