Factor out conservative_is_privately_uninhabited
This commit is contained in:
parent
34cbe72780
commit
cc8dddbac9
11 changed files with 25 additions and 81 deletions
|
@ -2078,17 +2078,6 @@ rustc_queries! {
|
|||
desc { "normalizing opaque types in `{:?}`", key }
|
||||
}
|
||||
|
||||
/// Checks whether a type is definitely uninhabited. This is
|
||||
/// conservative: for some types that are uninhabited we return `false`,
|
||||
/// but we only return `true` for types that are definitely uninhabited.
|
||||
/// `ty.conservative_is_privately_uninhabited` implies that any value of type `ty`
|
||||
/// will be `Abi::Uninhabited`. (Note that uninhabited types may have nonzero
|
||||
/// size, to account for partial initialisation. See #49298 for details.)
|
||||
query conservative_is_privately_uninhabited(key: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
|
||||
desc { "conservatively checking if `{}` is privately uninhabited", key.value }
|
||||
remap_env_constness
|
||||
}
|
||||
|
||||
query limits(key: ()) -> Limits {
|
||||
desc { "looking up limits" }
|
||||
}
|
||||
|
|
|
@ -41,6 +41,13 @@ impl<'tcx> InhabitedPredicate<'tcx> {
|
|||
self.apply_inner(tcx, param_env, &|_| Err(())).ok()
|
||||
}
|
||||
|
||||
/// Same as `apply`, but `NotInModule(_)` predicates yield `false`. That is,
|
||||
/// privately uninhabited types are considered always uninhabited.
|
||||
pub fn apply_ignore_module(self, tcx: TyCtxt<'tcx>, param_env: ParamEnv<'tcx>) -> bool {
|
||||
let Ok(result) = self.apply_inner::<!>(tcx, param_env, &|_| Ok(true));
|
||||
result
|
||||
}
|
||||
|
||||
fn apply_inner<E>(
|
||||
self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
|
|
|
@ -169,6 +169,15 @@ impl<'tcx> Ty<'tcx> {
|
|||
) -> bool {
|
||||
self.inhabited_predicate(tcx).apply(tcx, param_env, module)
|
||||
}
|
||||
|
||||
/// Returns true if the type is uninhabited without regard to visibility
|
||||
pub fn is_privately_uninhabited(
|
||||
self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
||||
) -> bool {
|
||||
!self.inhabited_predicate(tcx).apply_ignore_module(tcx, param_env)
|
||||
}
|
||||
}
|
||||
|
||||
/// N.B. this query should only be called through `Ty::inhabited_predicate`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue