Make decoding non-optional LazyArray panic if not set
This commit is contained in:
parent
9649706ead
commit
175238badb
@ -71,8 +71,8 @@ impl<'a, 'tcx, T: Copy + Decodable<DecodeContext<'a, 'tcx>>> ProcessQueryValue<'
|
|||||||
for Option<DecodeIterator<'a, 'tcx, T>>
|
for Option<DecodeIterator<'a, 'tcx, T>>
|
||||||
{
|
{
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn process_decoded(self, tcx: TyCtxt<'tcx>, _err: impl Fn() -> !) -> &'tcx [T] {
|
fn process_decoded(self, tcx: TyCtxt<'tcx>, err: impl Fn() -> !) -> &'tcx [T] {
|
||||||
if let Some(iter) = self { tcx.arena.alloc_from_iter(iter) } else { &[] }
|
if let Some(iter) = self { tcx.arena.alloc_from_iter(iter) } else { err() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,12 +84,12 @@ impl<'a, 'tcx, T: Copy + Decodable<DecodeContext<'a, 'tcx>>>
|
|||||||
fn process_decoded(
|
fn process_decoded(
|
||||||
self,
|
self,
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
_err: impl Fn() -> !,
|
err: impl Fn() -> !,
|
||||||
) -> ty::EarlyBinder<'tcx, &'tcx [T]> {
|
) -> ty::EarlyBinder<'tcx, &'tcx [T]> {
|
||||||
ty::EarlyBinder::bind(if let Some(iter) = self {
|
ty::EarlyBinder::bind(if let Some(iter) = self {
|
||||||
tcx.arena.alloc_from_iter(iter)
|
tcx.arena.alloc_from_iter(iter)
|
||||||
} else {
|
} else {
|
||||||
&[]
|
err()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,7 +301,20 @@ provide! { tcx, def_id, other, cdata,
|
|||||||
.unwrap_or_else(|| panic!("{def_id:?} does not have eval_static_initializer")))
|
.unwrap_or_else(|| panic!("{def_id:?} does not have eval_static_initializer")))
|
||||||
}
|
}
|
||||||
trait_def => { table }
|
trait_def => { table }
|
||||||
deduced_param_attrs => { table }
|
deduced_param_attrs => {
|
||||||
|
// FIXME: `deduced_param_attrs` has some sketchy encoding settings,
|
||||||
|
// where we don't encode unless we're optimizing, doing codegen,
|
||||||
|
// and not incremental (see `encoder.rs`). I don't think this is right!
|
||||||
|
cdata
|
||||||
|
.root
|
||||||
|
.tables
|
||||||
|
.deduced_param_attrs
|
||||||
|
.get(cdata, def_id.index)
|
||||||
|
.map(|lazy| {
|
||||||
|
&*tcx.arena.alloc_from_iter(lazy.decode((cdata, tcx)))
|
||||||
|
})
|
||||||
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
is_type_alias_impl_trait => {
|
is_type_alias_impl_trait => {
|
||||||
debug_assert_eq!(tcx.def_kind(def_id), DefKind::OpaqueTy);
|
debug_assert_eq!(tcx.def_kind(def_id), DefKind::OpaqueTy);
|
||||||
cdata.root.tables.is_type_alias_impl_trait.get(cdata, def_id.index)
|
cdata.root.tables.is_type_alias_impl_trait.get(cdata, def_id.index)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user