save-analysis: use a fallback when access levels couldn't be computed
This commit is contained in:
parent
8e2063d020
commit
eed163e110
2 changed files with 14 additions and 3 deletions
|
|
@ -14,7 +14,7 @@
|
|||
//! recording the output.
|
||||
|
||||
use rustc::hir::def::Def as HirDef;
|
||||
use rustc::hir::def_id::{DefId, LOCAL_CRATE};
|
||||
use rustc::hir::def_id::DefId;
|
||||
use rustc::session::config::Input;
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
|
|
@ -56,14 +56,14 @@ macro_rules! access_from {
|
|||
($save_ctxt:expr, $vis:expr, $id:expr) => {
|
||||
Access {
|
||||
public: $vis.node.is_pub(),
|
||||
reachable: $save_ctxt.tcx.privacy_access_levels(LOCAL_CRATE).is_reachable($id),
|
||||
reachable: $save_ctxt.access_levels.is_reachable($id),
|
||||
}
|
||||
};
|
||||
|
||||
($save_ctxt:expr, $item:expr) => {
|
||||
Access {
|
||||
public: $item.vis.node.is_pub(),
|
||||
reachable: $save_ctxt.tcx.privacy_access_levels(LOCAL_CRATE).is_reachable($item.id),
|
||||
reachable: $save_ctxt.access_levels.is_reachable($item.id),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,11 +35,13 @@ use rustc::hir;
|
|||
use rustc::hir::def::Def as HirDef;
|
||||
use rustc::hir::Node;
|
||||
use rustc::hir::def_id::{DefId, LOCAL_CRATE};
|
||||
use rustc::middle::privacy::AccessLevels;
|
||||
use rustc::middle::cstore::ExternCrate;
|
||||
use rustc::session::config::{CrateType, Input, OutputType};
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc_typeck::hir_ty_to_ty;
|
||||
use rustc_codegen_utils::link::{filename_for_metadata, out_filename};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::default::Default;
|
||||
|
|
@ -68,6 +70,7 @@ use rls_data::config::Config;
|
|||
pub struct SaveContext<'l, 'tcx: 'l> {
|
||||
tcx: TyCtxt<'l, 'tcx, 'tcx>,
|
||||
tables: &'l ty::TypeckTables<'tcx>,
|
||||
access_levels: &'l AccessLevels,
|
||||
analysis: &'l ty::CrateAnalysis,
|
||||
span_utils: SpanUtils<'tcx>,
|
||||
config: Config,
|
||||
|
|
@ -1126,10 +1129,18 @@ pub fn process_crate<'l, 'tcx, H: SaveHandler>(
|
|||
|
||||
info!("Dumping crate {}", cratename);
|
||||
|
||||
// Privacy checking requires and is done after type checking; use a
|
||||
// fallback in case the access levels couldn't have been correctly computed.
|
||||
let access_levels = match tcx.sess.compile_status() {
|
||||
Ok(..) => tcx.privacy_access_levels(LOCAL_CRATE),
|
||||
Err(..) => Lrc::new(AccessLevels::default()),
|
||||
};
|
||||
|
||||
let save_ctxt = SaveContext {
|
||||
tcx,
|
||||
tables: &ty::TypeckTables::empty(None),
|
||||
analysis,
|
||||
access_levels: &access_levels,
|
||||
span_utils: SpanUtils::new(&tcx.sess),
|
||||
config: find_config(config),
|
||||
impl_counter: Cell::new(0),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue