mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 02:57:37 +00:00
Rollup merge of #137993 - tmiasko:deduce-comment, r=compiler-errors
Remove obsolete comment from DeduceReadOnly The situation described in the comment does arise in practice now and described panic is long gone.
This commit is contained in:
commit
7f6ad7f96e
@ -80,35 +80,6 @@ impl<'tcx> Visitor<'tcx> for DeduceReadOnly {
|
||||
// `f` passes. Note that function arguments are the only situation in which this problem can
|
||||
// arise: every other use of `move` in MIR doesn't actually write to the value it moves
|
||||
// from.
|
||||
//
|
||||
// Anyway, right now this situation doesn't actually arise in practice. Instead, the MIR for
|
||||
// that function looks like this:
|
||||
//
|
||||
// fn f(_1: BigStruct) -> () {
|
||||
// let mut _0: ();
|
||||
// let mut _2: BigStruct;
|
||||
// bb0: {
|
||||
// _2 = move _1;
|
||||
// _0 = g(move _2) -> bb1;
|
||||
// }
|
||||
// ...
|
||||
// }
|
||||
//
|
||||
// Because of that extra move that MIR construction inserts, `x` (i.e. `_1`) can *in
|
||||
// practice* safely be marked `readonly`.
|
||||
//
|
||||
// To handle the possibility that other optimizations (for example, destination propagation)
|
||||
// might someday generate MIR like the first example above, we panic upon seeing an argument
|
||||
// to *our* function that is directly moved into *another* function as an argument. Having
|
||||
// eliminated that problematic case, we can safely treat moves as copies in this analysis.
|
||||
//
|
||||
// In the future, if MIR optimizations cause arguments of a caller to be directly moved into
|
||||
// the argument of a callee, we can just add that argument to `mutated_args` instead of
|
||||
// panicking.
|
||||
//
|
||||
// Note that, because the problematic MIR is never actually generated, we can't add a test
|
||||
// case for this.
|
||||
|
||||
if let TerminatorKind::Call { ref args, .. } = terminator.kind {
|
||||
for arg in args {
|
||||
if let Operand::Move(place) = arg.node {
|
||||
|
Loading…
Reference in New Issue
Block a user