Apply suggestions from code review

Co-Authored-By: varkor <github@varkor.com>
This commit is contained in:
matthewjasper 2020-02-09 10:16:57 +00:00 committed by Matthew Jasper
parent 465b86253c
commit 3eb5241884
3 changed files with 10 additions and 9 deletions

View file

@ -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)

View file

@ -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),

View file

@ -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,