Apply suggestions from code review
Co-Authored-By: varkor <github@varkor.com>
This commit is contained in:
parent
465b86253c
commit
3eb5241884
3 changed files with 10 additions and 9 deletions
|
|
@ -2286,7 +2286,7 @@ impl<'tcx> AdtDef {
|
|||
self.flags.contains(AdtFlags::IS_BOX)
|
||||
}
|
||||
|
||||
/// Returns `true` if this is ManuallyDrop<T>.
|
||||
/// Returns `true` if this is `ManuallyDrop<T>`.
|
||||
#[inline]
|
||||
pub fn is_manually_drop(&self) -> bool {
|
||||
self.flags.contains(AdtFlags::IS_MANUALLY_DROP)
|
||||
|
|
|
|||
|
|
@ -1013,12 +1013,12 @@ pub fn needs_drop_components(
|
|||
| ty::Ref(..)
|
||||
| ty::Str => Ok(SmallVec::new()),
|
||||
|
||||
// Foreign types can never have destructors
|
||||
// Foreign types can never have destructors.
|
||||
ty::Foreign(..) => Ok(SmallVec::new()),
|
||||
|
||||
// Pessimistically assume that all generators will require destructors
|
||||
// as we don't know if a destructor is a noop or not until after the MIR
|
||||
// state transformation pass
|
||||
// state transformation pass.
|
||||
ty::Generator(..) | ty::Dynamic(..) | ty::Error => Err(AlwaysRequiresDrop),
|
||||
|
||||
ty::Slice(ty) => needs_drop_components(ty, target_layout),
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ type NeedsDropResult<T> = Result<T, AlwaysRequiresDrop>;
|
|||
fn needs_drop_raw<'tcx>(tcx: TyCtxt<'tcx>, query: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> bool {
|
||||
let adt_fields =
|
||||
move |adt_def: &ty::AdtDef| tcx.adt_drop_tys(adt_def.did).map(|tys| tys.iter().copied());
|
||||
// If we don't know a type doesn't need drop, say it's a type parameter
|
||||
// without a `Copy` bound, then we conservatively return that it needs
|
||||
// drop.
|
||||
// If we don't know a type doesn't need drop, for example if it's a type
|
||||
// parameter without a `Copy` bound, then we conservatively return that it
|
||||
// needs drop.
|
||||
let res = NeedsDropTypes::new(tcx, query.param_env, query.value, adt_fields).next().is_some();
|
||||
debug!("needs_drop_raw({:?}) = {:?}", query, res);
|
||||
res
|
||||
|
|
@ -25,9 +25,10 @@ struct NeedsDropTypes<'tcx, F> {
|
|||
param_env: ty::ParamEnv<'tcx>,
|
||||
query_ty: Ty<'tcx>,
|
||||
seen_tys: FxHashSet<Ty<'tcx>>,
|
||||
/// A stack of types left to process. Each round, we pop something from the
|
||||
/// stack and check if it needs drop. If the result depends on whether some
|
||||
/// other types need drop we push them onto the stack.
|
||||
/// A stack of types left to process, and the recursion depth when we
|
||||
/// pushed that type. Each round, we pop something from the stack and check
|
||||
/// if it needs drop. If the result depends on whether some other types
|
||||
/// need drop we push them onto the stack.
|
||||
unchecked_tys: Vec<(Ty<'tcx>, usize)>,
|
||||
recursion_limit: usize,
|
||||
adt_components: F,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue