Skip to content

Commit 005fa14

Browse files
committed
Annotate the compiler with information about what it is doing when.
1 parent aa26586 commit 005fa14

File tree

29 files changed

+171
-50
lines changed

29 files changed

+171
-50
lines changed

src/librustc/lint/context.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
//! for all lint attributes.
2626
use self::TargetLint::*;
2727

28+
use dep_graph::DepNode;
2829
use middle::privacy::AccessLevels;
2930
use middle::ty;
3031
use session::{early_error, Session};
@@ -1071,6 +1072,8 @@ impl LateLintPass for GatherNodeLevels {
10711072
///
10721073
/// Consumes the `lint_store` field of the `Session`.
10731074
pub fn check_crate(tcx: &ty::ctxt, access_levels: &AccessLevels) {
1075+
let _task = tcx.dep_graph.in_task(DepNode::LateLintCheck);
1076+
10741077
let krate = tcx.map.krate();
10751078
let mut cx = LateContext::new(tcx, krate, access_levels);
10761079

src/librustc/middle/check_const.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// - It's not possible to take the address of a static item with unsafe interior. This is enforced
2525
// by borrowck::gather_loans
2626

27+
use dep_graph::DepNode;
2728
use middle::ty::cast::{CastKind};
2829
use middle::const_eval::{self, ConstEvalErr};
2930
use middle::const_eval::ErrKind::IndexOpFeatureGated;
@@ -842,13 +843,12 @@ fn check_adjustments<'a, 'tcx>(v: &mut CheckCrateVisitor<'a, 'tcx>, e: &hir::Exp
842843
}
843844

844845
pub fn check_crate(tcx: &ty::ctxt) {
845-
tcx.map.krate().visit_all_items(&mut CheckCrateVisitor {
846+
tcx.visit_all_items_in_krate(DepNode::CheckConst, &mut CheckCrateVisitor {
846847
tcx: tcx,
847848
mode: Mode::Var,
848849
qualif: ConstQualif::NOT_CONST,
849850
rvalue_borrows: NodeMap()
850851
});
851-
852852
tcx.sess.abort_if_errors();
853853
}
854854

src/librustc/middle/check_match.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub use self::Constructor::*;
1212
use self::Usefulness::*;
1313
use self::WitnessPreference::*;
1414

15+
use dep_graph::DepNode;
1516
use middle::const_eval::{compare_const_vals, ConstVal};
1617
use middle::const_eval::{eval_const_expr, eval_const_expr_partial};
1718
use middle::const_eval::{const_expr_to_pat, lookup_const_by_id};
@@ -155,7 +156,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for MatchCheckCtxt<'a, 'tcx> {
155156
}
156157

157158
pub fn check_crate(tcx: &ty::ctxt) {
158-
tcx.map.krate().visit_all_items(&mut MatchCheckCtxt {
159+
tcx.visit_all_items_in_krate(DepNode::MatchCheck, &mut MatchCheckCtxt {
159160
tcx: tcx,
160161
param_env: tcx.empty_parameter_environment(),
161162
});

src/librustc/middle/check_rvalues.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@
1111
// Checks that all rvalues in a crate have statically known size. check_crate
1212
// is the public starting point.
1313

14+
use dep_graph::DepNode;
1415
use middle::expr_use_visitor as euv;
1516
use middle::infer;
1617
use middle::mem_categorization as mc;
1718
use middle::ty::ParameterEnvironment;
1819
use middle::ty;
1920

20-
use syntax::ast;
2121
use rustc_front::hir;
22-
use syntax::codemap::Span;
2322
use rustc_front::intravisit;
23+
use syntax::ast;
24+
use syntax::codemap::Span;
2425

25-
pub fn check_crate(tcx: &ty::ctxt,
26-
krate: &hir::Crate) {
26+
pub fn check_crate(tcx: &ty::ctxt) {
2727
let mut rvcx = RvalueContext { tcx: tcx };
28-
krate.visit_all_items(&mut rvcx);
28+
tcx.visit_all_items_in_krate(DepNode::RvalueCheck, &mut rvcx);
2929
}
3030

3131
struct RvalueContext<'a, 'tcx: 'a> {

src/librustc/middle/dead.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// closely. The idea is that all reachable symbols are live, codes called
1313
// from live codes are live, and everything else is dead.
1414

15+
use dep_graph::DepNode;
1516
use front::map as ast_map;
1617
use rustc_front::hir;
1718
use rustc_front::intravisit::{self, Visitor};
@@ -590,6 +591,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for DeadVisitor<'a, 'tcx> {
590591
}
591592

592593
pub fn check_crate(tcx: &ty::ctxt, access_levels: &privacy::AccessLevels) {
594+
let _task = tcx.dep_graph.in_task(DepNode::DeadCheck);
593595
let krate = tcx.map.krate();
594596
let live_symbols = find_live(tcx, access_levels, krate);
595597
let mut visitor = DeadVisitor { tcx: tcx, live_symbols: live_symbols };

src/librustc/middle/intrinsicck.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use dep_graph::DepNode;
1112
use middle::def::DefFn;
1213
use middle::def_id::DefId;
1314
use middle::subst::{Subst, Substs, EnumeratedItems};
@@ -29,7 +30,7 @@ pub fn check_crate(tcx: &ctxt) {
2930
dummy_sized_ty: tcx.types.isize,
3031
dummy_unsized_ty: tcx.mk_slice(tcx.types.isize),
3132
};
32-
tcx.map.krate().visit_all_items(&mut visitor);
33+
tcx.visit_all_items_in_krate(DepNode::IntrinsicCheck, &mut visitor);
3334
}
3435

3536
struct IntrinsicCheckingVisitor<'a, 'tcx: 'a> {

src/librustc/middle/reachable.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// makes all other generics or inline functions that it references
1616
// reachable as well.
1717

18+
use dep_graph::DepNode;
1819
use front::map as ast_map;
1920
use middle::def;
2021
use middle::def_id::DefId;
@@ -349,6 +350,7 @@ impl<'a, 'v> Visitor<'v> for CollectPrivateImplItemsVisitor<'a> {
349350
pub fn find_reachable(tcx: &ty::ctxt,
350351
access_levels: &privacy::AccessLevels)
351352
-> NodeSet {
353+
let _task = tcx.dep_graph.in_task(DepNode::Reachability);
352354

353355
let mut reachable_context = ReachableContext::new(tcx);
354356

src/librustc/middle/stability.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
1414
pub use self::StabilityLevel::*;
1515

16+
use dep_graph::DepNode;
1617
use session::Session;
1718
use lint;
1819
use middle::cstore::{CrateStore, LOCAL_CRATE};
@@ -328,6 +329,7 @@ impl<'tcx> Index<'tcx> {
328329
/// features used.
329330
pub fn check_unstable_api_usage(tcx: &ty::ctxt)
330331
-> FnvHashMap<InternedString, StabilityLevel> {
332+
let _task = tcx.dep_graph.in_task(DepNode::StabilityCheck);
331333
let ref active_lib_features = tcx.sess.features.borrow().declared_lib_features;
332334

333335
// Put the active features into a map for quick lookup
@@ -341,8 +343,7 @@ pub fn check_unstable_api_usage(tcx: &ty::ctxt)
341343
};
342344
intravisit::walk_crate(&mut checker, tcx.map.krate());
343345

344-
let used_features = checker.used_features;
345-
return used_features;
346+
checker.used_features
346347
}
347348

348349
struct Checker<'a, 'tcx: 'a> {

src/librustc/middle/traits/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ pub use self::FulfillmentErrorCode::*;
1515
pub use self::Vtable::*;
1616
pub use self::ObligationCauseCode::*;
1717

18+
use dep_graph::DepNode;
1819
use middle::def_id::DefId;
1920
use middle::free_region::FreeRegionMap;
2021
use middle::subst;
2122
use middle::ty::{self, HasTypeFlags, Ty};
23+
use middle::ty::fast_reject;
2224
use middle::ty::fold::TypeFoldable;
2325
use middle::infer::{self, fixup_err_to_string, InferCtxt};
2426

@@ -599,6 +601,18 @@ impl<'tcx> FulfillmentError<'tcx> {
599601
}
600602

601603
impl<'tcx> TraitObligation<'tcx> {
604+
/// Creates the dep-node for selecting/evaluating this trait reference.
605+
fn dep_node(&self, tcx: &ty::ctxt<'tcx>) -> DepNode {
606+
let simplified_ty =
607+
fast_reject::simplify_type(tcx,
608+
self.predicate.skip_binder().self_ty(), // (*)
609+
true);
610+
611+
// (*) skip_binder is ok because `simplify_type` doesn't care about regions
612+
613+
DepNode::TraitSelect(self.predicate.def_id(), simplified_ty)
614+
}
615+
602616
fn self_ty(&self) -> ty::Binder<Ty<'tcx>> {
603617
ty::Binder(self.predicate.skip_binder().self_ty())
604618
}

src/librustc/middle/traits/select.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
310310
debug!("select({:?})", obligation);
311311
assert!(!obligation.predicate.has_escaping_regions());
312312

313+
let dep_node = obligation.dep_node(self.tcx());
314+
let _task = self.tcx().dep_graph.in_task(dep_node);
315+
313316
let stack = self.push_stack(TraitObligationStackList::empty(), obligation);
314317
match try!(self.candidate_from_obligation(&stack)) {
315318
None => {
@@ -411,7 +414,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
411414
/// accurate if inference variables are involved.
412415
pub fn evaluate_obligation_conservatively(&mut self,
413416
obligation: &PredicateObligation<'tcx>)
414-
-> bool
417+
-> bool
415418
{
416419
debug!("evaluate_obligation_conservatively({:?})",
417420
obligation);

0 commit comments

Comments
 (0)