@@ -35,11 +35,13 @@ use rustc::hir;
35
35
use rustc:: hir:: def:: Def as HirDef ;
36
36
use rustc:: hir:: Node ;
37
37
use rustc:: hir:: def_id:: { DefId , LOCAL_CRATE } ;
38
+ use rustc:: middle:: privacy:: AccessLevels ;
38
39
use rustc:: middle:: cstore:: ExternCrate ;
39
40
use rustc:: session:: config:: { CrateType , Input , OutputType } ;
40
41
use rustc:: ty:: { self , TyCtxt } ;
41
42
use rustc_typeck:: hir_ty_to_ty;
42
43
use rustc_codegen_utils:: link:: { filename_for_metadata, out_filename} ;
44
+ use rustc_data_structures:: sync:: Lrc ;
43
45
44
46
use std:: cell:: Cell ;
45
47
use std:: default:: Default ;
@@ -68,6 +70,7 @@ use rls_data::config::Config;
68
70
pub struct SaveContext < ' l , ' tcx : ' l > {
69
71
tcx : TyCtxt < ' l , ' tcx , ' tcx > ,
70
72
tables : & ' l ty:: TypeckTables < ' tcx > ,
73
+ access_levels : & ' l AccessLevels ,
71
74
analysis : & ' l ty:: CrateAnalysis ,
72
75
span_utils : SpanUtils < ' tcx > ,
73
76
config : Config ,
@@ -1126,10 +1129,18 @@ pub fn process_crate<'l, 'tcx, H: SaveHandler>(
1126
1129
1127
1130
info ! ( "Dumping crate {}" , cratename) ;
1128
1131
1132
+ // Privacy checking requires and is done after type checking; use a
1133
+ // fallback in case the access levels couldn't have been correctly computed.
1134
+ let access_levels = match tcx. sess . compile_status ( ) {
1135
+ Ok ( ..) => tcx. privacy_access_levels ( LOCAL_CRATE ) ,
1136
+ Err ( ..) => Lrc :: new ( AccessLevels :: default ( ) ) ,
1137
+ } ;
1138
+
1129
1139
let save_ctxt = SaveContext {
1130
1140
tcx,
1131
1141
tables : & ty:: TypeckTables :: empty ( None ) ,
1132
1142
analysis,
1143
+ access_levels : & access_levels,
1133
1144
span_utils : SpanUtils :: new ( & tcx. sess ) ,
1134
1145
config : find_config ( config) ,
1135
1146
impl_counter : Cell :: new ( 0 ) ,
0 commit comments