Skip to content

Commit

Permalink
Add special-case for [T, 0] in dropck
Browse files Browse the repository at this point in the history
  • Loading branch information
Bryanskiy committed Jul 31, 2024
1 parent 595316b commit 34fcf92
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,15 @@ pub fn trivial_dropck_outlives<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> bool {
| ty::Foreign(..)
| ty::Error(_) => true,

// `T is PAT`, `[T; N]`, and `[T]` have same properties as T.
ty::Pat(ty, _) | ty::Array(ty, _) | ty::Slice(ty) => trivial_dropck_outlives(tcx, *ty),
// `T is PAT` and `[T]` have same properties as T.
ty::Pat(ty, _) | ty::Slice(ty) => trivial_dropck_outlives(tcx, *ty),
ty::Array(ty, size) => {
// Empty array never has a dtor. See issue #110288.
match size.try_to_target_usize(tcx) {
Some(0) => true,
_ => trivial_dropck_outlives(tcx, *ty),
}
}

// (T1..Tn) and closures have same properties as T1..Tn --
// check if *all* of them are trivial.
Expand Down
23 changes: 23 additions & 0 deletions tests/ui/dropck/dropck-empty-array.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//@ run-pass

#[allow(dead_code)]
struct Struct<'s>(&'s str);

impl<'s> Drop for Struct<'s> {
fn drop(&mut self) {}
}

fn to_array_zero<T>(_: T) -> [T; 0] {
[]
}

pub fn array_zero_in_tuple() {
let mut x = ([], String::new());
{
let s = String::from("temporary");
let p = Struct(&s);
x.0 = to_array_zero(p);
}
}

fn main() {}

0 comments on commit 34fcf92

Please sign in to comment.