rustc_hir_analysis/outlives/
dump.rs1use rustc_hir::find_attr;
2use rustc_middle::ty::{self, TyCtxt};
3use rustc_span::{bug, sym};
4
5pub(crate) fn inferred_outlives(tcx: TyCtxt<'_>) {
6 for id in tcx.hir_free_items() {
7 if !{
{
'done:
{
for i in
::rustc_attr_ir::HasAttrs::get_attrs(id.owner_id, &tcx) {
#[allow(unused_imports)]
use ::rustc_attr_ir::AttributeKind::*;
let i: &::rustc_attr_ir::Attribute = i;
match i {
::rustc_attr_ir::Attribute::Parsed(RustcDumpInferredOutlives)
=> {
break 'done Some(());
}
::rustc_attr_ir::Attribute::Unparsed(..) =>
{}
#[deny(unreachable_patterns)]
_ => {}
}
}
None
}
}
}.is_some()find_attr!(tcx, id.owner_id, RustcDumpInferredOutlives) {
8 continue;
9 }
10
11 let preds = tcx.inferred_outlives_of(id.owner_id);
12 let mut preds: Vec<_> = preds
13 .iter()
14 .map(|(pred, _)| match pred.kind().skip_binder() {
15 ty::ClauseKind::RegionOutlives(p) => p.to_string(),
16 ty::ClauseKind::TypeOutlives(p) => p.to_string(),
17 err => bug_impl(None, format_args!("unexpected clause {0:?}", err),
Location::caller())bug!("unexpected clause {:?}", err),
18 })
19 .collect();
20 preds.sort();
21
22 let span = tcx.def_span(id.owner_id);
23 let mut err = tcx.dcx().struct_span_err(span, sym::rustc_dump_inferred_outlives.as_str());
24 for pred in preds {
25 err.note(pred);
26 }
27 err.emit();
28 }
29}