create a drop ladder for an array if any value is moved out
This commit is contained in:
parent
8bcbf91a86
commit
7be2fd853a
5 changed files with 87 additions and 9 deletions
|
@ -257,6 +257,20 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> {
|
|||
})
|
||||
}
|
||||
|
||||
fn array_subpath(&self, path: Self::Path, index: u32, size: u32) -> Option<Self::Path> {
|
||||
dataflow::move_path_children_matching(self.ctxt.move_data(), path, |p| {
|
||||
match p {
|
||||
&Projection {
|
||||
elem: ProjectionElem::ConstantIndex{offset, min_length: _, from_end: false}, ..
|
||||
} => offset == index,
|
||||
&Projection {
|
||||
elem: ProjectionElem::ConstantIndex{offset, min_length: _, from_end: true}, ..
|
||||
} => size - offset == index,
|
||||
_ => false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
fn deref_subpath(&self, path: Self::Path) -> Option<Self::Path> {
|
||||
dataflow::move_path_children_matching(self.ctxt.move_data(), path, |p| {
|
||||
match p {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue