mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 21:23:56 +00:00
Auto merge of #96098 - JakobDegen:always-return-place, r=oli-obk
Refactor call terminator to always include destination place In #71117 people seemed to agree that call terminators should always have a destination place, even if the call was guaranteed to diverge. This implements that. Unsurprisingly, the diff touches a lot of code, but thankfully I had to do almost nothing interesting. The only interesting thing came up in const prop, where the stack frame having no return place was also used to indicate that the layout could not be computed (or similar). I replaced this with a ZST allocation, which should continue to do the right things. cc `@RalfJung` `@eddyb` who were involved in the original conversation r? rust-lang/mir-opt
This commit is contained in:
commit
286b717808
2 changed files with 3 additions and 2 deletions
|
@ -292,7 +292,7 @@ fn is_call_with_ref_arg<'tcx>(
|
|||
if let (inner_ty, 1) = walk_ptrs_ty_depth(args[0].ty(&*mir, cx.tcx));
|
||||
if !is_copy(cx, inner_ty);
|
||||
then {
|
||||
Some((def_id, *local, inner_ty, destination.as_ref().map(|(dest, _)| dest)?.as_local()?))
|
||||
Some((def_id, *local, inner_ty, destination.as_local()?))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -584,7 +584,7 @@ impl<'a, 'tcx> mir::visit::Visitor<'tcx> for PossibleBorrowerVisitor<'a, 'tcx> {
|
|||
fn visit_terminator(&mut self, terminator: &mir::Terminator<'_>, _loc: mir::Location) {
|
||||
if let mir::TerminatorKind::Call {
|
||||
args,
|
||||
destination: Some((mir::Place { local: dest, .. }, _)),
|
||||
destination: mir::Place { local: dest, .. },
|
||||
..
|
||||
} = &terminator.kind
|
||||
{
|
||||
|
|
|
@ -301,6 +301,7 @@ fn check_terminator<'a, 'tcx>(
|
|||
args,
|
||||
from_hir_call: _,
|
||||
destination: _,
|
||||
target: _,
|
||||
cleanup: _,
|
||||
fn_span: _,
|
||||
} => {
|
||||
|
|
Loading…
Reference in a new issue