1use rustc_data_structures::fx::FxIndexMap;
2use rustc_hir::def::DefKind;
3use rustc_hir::def_id::DefId;
4use rustc_middle::ty::{self, GenericArg, GenericArgKind, Ty, TyCtxt};
5use rustc_span::Span;
6use tracing::debug;
7
8use super::explicit::ExplicitClausesMap;
9use super::utils::*;
10
11pub(super) fn infer_clauses(
13 tcx: TyCtxt<'_>,
14) -> FxIndexMap<DefId, ty::EarlyBinder<'_, RequiredClauses<'_>>> {
15 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:15",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(15u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("infer_clauses")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("infer_clauses");
16
17 let mut explicit_map = ExplicitClausesMap::new();
18
19 let mut global_inferred_outlives = FxIndexMap::default();
20
21 for i in 0.. {
24 let mut clauses_added = ::alloc::vec::Vec::new()vec![];
25
26 for id in tcx.hir_free_items() {
28 let item_did = id.owner_id;
29
30 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:30",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(30u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("InferVisitor::visit_item(item={0:?})",
item_did) as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("InferVisitor::visit_item(item={:?})", item_did);
31
32 let mut item_required_clauses = RequiredClauses::default();
33 match tcx.def_kind(item_did) {
34 DefKind::Union | DefKind::Enum | DefKind::Struct => {
35 let adt_def = tcx.adt_def(item_did.to_def_id());
36
37 for field_def in adt_def.all_fields() {
39 let field_ty =
46 tcx.type_of(field_def.did).instantiate_identity().skip_norm_wip();
47 let field_span = tcx.def_span(field_def.did);
48 insert_required_clauses_to_be_wf(
49 tcx,
50 field_ty,
51 field_span,
52 &global_inferred_outlives,
53 &mut item_required_clauses,
54 &mut explicit_map,
55 );
56 }
57 }
58
59 DefKind::TyAlias if tcx.type_alias_is_checked(item_did) => {
60 insert_required_clauses_to_be_wf(
61 tcx,
62 tcx.type_of(item_did).instantiate_identity().skip_norm_wip(),
63 tcx.def_span(item_did),
64 &global_inferred_outlives,
65 &mut item_required_clauses,
66 &mut explicit_map,
67 );
68 }
69
70 _ => {}
71 };
72
73 let item_clauses_len: usize = global_inferred_outlives
80 .get(&item_did.to_def_id())
81 .map_or(0, |c| c.as_ref().skip_binder().len());
82 if item_required_clauses.len() > item_clauses_len {
83 clauses_added.push(item_did);
84 global_inferred_outlives.insert(
85 item_did.to_def_id(),
86 ty::EarlyBinder::bind_iter(item_required_clauses),
87 );
88 }
89 }
90
91 if clauses_added.is_empty() {
92 break;
94 } else if !tcx.recursion_limit().value_within_limit(i) {
95 let msg = if let &[id] = &clauses_added[..] {
96 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("overflow computing implied lifetime bounds for `{0}`",
tcx.def_path_str(id)))
})format!("overflow computing implied lifetime bounds for `{}`", tcx.def_path_str(id),)
97 } else {
98 "overflow computing implied lifetime bounds".to_string()
99 };
100 tcx.dcx().span_fatal(
101 clauses_added.iter().map(|id| tcx.def_span(*id)).collect::<Vec<_>>(),
102 msg,
103 );
104 }
105 }
106
107 global_inferred_outlives
108}
109
110fn insert_required_clauses_to_be_wf<'tcx>(
111 tcx: TyCtxt<'tcx>,
112 ty: Ty<'tcx>,
113 span: Span,
114 global_inferred_outlives: &FxIndexMap<DefId, ty::EarlyBinder<'tcx, RequiredClauses<'tcx>>>,
115 required_clauses: &mut RequiredClauses<'tcx>,
116 explicit_map: &mut ExplicitClausesMap<'tcx>,
117) {
118 for arg in ty.walk() {
119 let leaf_ty = match arg.kind() {
120 GenericArgKind::Type(ty) => ty,
121
122 GenericArgKind::Lifetime(_) | GenericArgKind::Const(_) => continue,
125 };
126
127 match *leaf_ty.kind() {
128 ty::Ref(region, rty, _) => {
129 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:133",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(133u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Ref")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("Ref");
134 insert_outlives_clause(tcx, rty.into(), region, span, required_clauses);
135 }
136
137 ty::Adt(def, args) => {
138 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:139",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(139u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Adt")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("Adt");
140 check_inferred_clauses(
141 tcx,
142 def.did(),
143 args,
144 global_inferred_outlives,
145 required_clauses,
146 );
147 check_explicit_clauses(
148 tcx,
149 def.did(),
150 args,
151 required_clauses,
152 explicit_map,
153 IgnoreClausesReferencingSelf::No,
154 );
155 }
156
157 ty::Alias(_, ty::AliasTy { kind: ty::Free { def_id }, args, .. }) => {
158 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:160",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(160u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Free")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("Free");
161 check_inferred_clauses(
162 tcx,
163 def_id,
164 args,
165 global_inferred_outlives,
166 required_clauses,
167 );
168 check_explicit_clauses(
169 tcx,
170 def_id,
171 args,
172 required_clauses,
173 explicit_map,
174 IgnoreClausesReferencingSelf::No,
175 );
176 }
177
178 ty::Dynamic(obj, ..) => {
179 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:181",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(181u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Dynamic")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("Dynamic");
182 if let Some(trait_ref) = obj.principal() {
183 let args = trait_ref
184 .with_self_ty(tcx, tcx.types.trait_object_dummy_self)
185 .skip_binder()
186 .args;
187 check_explicit_clauses(
197 tcx,
198 trait_ref.def_id(),
199 args,
200 required_clauses,
201 explicit_map,
202 IgnoreClausesReferencingSelf::Yes,
203 );
204 }
205 }
206
207 ty::Alias(_, ty::AliasTy { kind: ty::Projection { def_id }, args, .. }) => {
208 {
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:211",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(211u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Projection")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};debug!("Projection");
212 check_explicit_clauses(
213 tcx,
214 tcx.parent(def_id),
215 args,
216 required_clauses,
217 explicit_map,
218 IgnoreClausesReferencingSelf::No,
219 );
220 }
221
222 ty::Alias(_, ty::AliasTy { kind: ty::Inherent { .. }, .. }) => {}
224
225 _ => {}
226 }
227 }
228}
229
230{}
#[allow(clippy :: suspicious_else_formatting)]
{
let __tracing_attr_span;
let __tracing_attr_guard;
if ::tracing::Level::DEBUG <= ::tracing::level_filters::STATIC_MAX_LEVEL
&&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() ||
{ false } {
__tracing_attr_span =
{
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("check_explicit_clauses",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(247u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&[{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("def_id")
}> =
::tracing::__macro_support::FieldName::new("def_id");
NAME.as_str()
},
{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("args")
}> =
::tracing::__macro_support::FieldName::new("args");
NAME.as_str()
},
{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("required_clauses")
}> =
::tracing::__macro_support::FieldName::new("required_clauses");
NAME.as_str()
},
{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("explicit_map")
}> =
::tracing::__macro_support::FieldName::new("explicit_map");
NAME.as_str()
},
{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("ignore_clauses_refing_self")
}> =
::tracing::__macro_support::FieldName::new("ignore_clauses_refing_self");
NAME.as_str()
}], ::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::SPAN)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let mut interest = ::tracing::subscriber::Interest::never();
if ::tracing::Level::DEBUG <=
::tracing::level_filters::STATIC_MAX_LEVEL &&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{ interest = __CALLSITE.interest(); !interest.is_never() }
&&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest) {
let meta = __CALLSITE.metadata();
::tracing::Span::new(meta,
&{
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
meta.fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&def_id)
as &dyn ::tracing::field::Value)),
(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&args)
as &dyn ::tracing::field::Value)),
(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&required_clauses)
as &dyn ::tracing::field::Value)),
(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&explicit_map)
as &dyn ::tracing::field::Value)),
(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&ignore_clauses_refing_self)
as &dyn ::tracing::field::Value))])
})
} else {
let span =
::tracing::__macro_support::__disabled_span(__CALLSITE.metadata());
{};
span
}
};
__tracing_attr_guard = __tracing_attr_span.enter();
}
#[warn(clippy :: suspicious_else_formatting)]
{
#[allow(unknown_lints, unreachable_code, clippy ::
diverging_sub_expression, clippy :: empty_loop, clippy ::
let_unit_value, clippy :: let_with_type_underscore, clippy ::
needless_return, clippy :: unreachable)]
if false {
let __tracing_attr_fake_return: () = loop {};
return __tracing_attr_fake_return;
}
{
let explicit_clauses =
explicit_map.explicit_clauses_of(tcx, def_id);
for (&clause @ ty::OutlivesClause(arg, _), &span) in
explicit_clauses.as_ref().skip_binder() {
{
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:259",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(259u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&[{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("clause")
}> =
::tracing::__macro_support::FieldName::new("clause");
NAME.as_str()
}], ::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <=
::tracing::level_filters::STATIC_MAX_LEVEL &&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&clause)
as &dyn ::tracing::field::Value))])
});
} else { ; }
};
if let IgnoreClausesReferencingSelf::Yes =
ignore_clauses_refing_self &&
arg.walk().any(|arg| arg == tcx.types.self_param.into()) {
{
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:264",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(264u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&["message"],
::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <=
::tracing::level_filters::STATIC_MAX_LEVEL &&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("ignoring clause since it references `Self`")
as &dyn ::tracing::field::Value))])
});
} else { ; }
};
continue;
}
let clause @ ty::OutlivesClause(arg, region) =
explicit_clauses.rebind(clause).instantiate(tcx,
args).skip_norm_wip();
{
use ::tracing::__macro_support::Callsite as _;
static __CALLSITE: ::tracing::callsite::DefaultCallsite =
{
static META: ::tracing::Metadata<'static> =
{
::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs:270",
"rustc_hir_analysis::outlives::implicit_infer",
::tracing::Level::DEBUG,
::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_hir_analysis/src/outlives/implicit_infer.rs"),
::tracing_core::__macro_support::Option::Some(270u32),
::tracing_core::__macro_support::Option::Some("rustc_hir_analysis::outlives::implicit_infer"),
::tracing_core::field::FieldSet::new(&[{
const NAME:
::tracing::__macro_support::FieldName<{
::tracing::__macro_support::FieldName::len("clause")
}> =
::tracing::__macro_support::FieldName::new("clause");
NAME.as_str()
}], ::tracing_core::callsite::Identifier(&__CALLSITE)),
::tracing::metadata::Kind::EVENT)
};
::tracing::callsite::DefaultCallsite::new(&META)
};
let enabled =
::tracing::Level::DEBUG <=
::tracing::level_filters::STATIC_MAX_LEVEL &&
::tracing::Level::DEBUG <=
::tracing::level_filters::LevelFilter::current() &&
{
let interest = __CALLSITE.interest();
!interest.is_never() &&
::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
interest)
};
if enabled {
(|value_set: ::tracing::field::ValueSet|
{
let meta = __CALLSITE.metadata();
::tracing::Event::dispatch(meta, &value_set);
;
})({
#[allow(unused_imports)]
use ::tracing::field::{debug, display, Value};
__CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&::tracing::field::debug(&clause)
as &dyn ::tracing::field::Value))])
});
} else { ; }
};
insert_outlives_clause(tcx, arg, region, span,
required_clauses);
}
}
}
}#[tracing::instrument(level = "debug", skip(tcx))]
248fn check_explicit_clauses<'tcx>(
249 tcx: TyCtxt<'tcx>,
250 def_id: DefId,
251 args: &[GenericArg<'tcx>],
252 required_clauses: &mut RequiredClauses<'tcx>,
253 explicit_map: &mut ExplicitClausesMap<'tcx>,
254 ignore_clauses_refing_self: IgnoreClausesReferencingSelf,
255) {
256 let explicit_clauses = explicit_map.explicit_clauses_of(tcx, def_id);
257
258 for (&clause @ ty::OutlivesClause(arg, _), &span) in explicit_clauses.as_ref().skip_binder() {
259 debug!(?clause);
260
261 if let IgnoreClausesReferencingSelf::Yes = ignore_clauses_refing_self
262 && arg.walk().any(|arg| arg == tcx.types.self_param.into())
263 {
264 debug!("ignoring clause since it references `Self`");
265 continue;
266 }
267
268 let clause @ ty::OutlivesClause(arg, region) =
269 explicit_clauses.rebind(clause).instantiate(tcx, args).skip_norm_wip();
270 debug!(?clause);
271
272 insert_outlives_clause(tcx, arg, region, span, required_clauses);
273 }
274}
275
276#[derive(#[automatically_derived]
impl ::core::fmt::Debug for IgnoreClausesReferencingSelf {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
IgnoreClausesReferencingSelf::Yes => "Yes",
IgnoreClausesReferencingSelf::No => "No",
})
}
}Debug)]
277enum IgnoreClausesReferencingSelf {
278 Yes,
279 No,
280}
281
282fn check_inferred_clauses<'tcx>(
302 tcx: TyCtxt<'tcx>,
303 def_id: DefId,
304 args: ty::GenericArgsRef<'tcx>,
305 global_inferred_outlives: &FxIndexMap<DefId, ty::EarlyBinder<'tcx, RequiredClauses<'tcx>>>,
306 required_clauses: &mut RequiredClauses<'tcx>,
307) {
308 let Some(clauses) = global_inferred_outlives.get(&def_id) else {
312 return;
313 };
314
315 for (&clause, &span) in clauses.as_ref().skip_binder() {
316 let ty::OutlivesClause(arg, region) =
319 clauses.rebind(clause).instantiate(tcx, args).skip_norm_wip();
320 insert_outlives_clause(tcx, arg, region, span, required_clauses);
321 }
322}