Those statements are removed by CleanupNonCodegenStatements pass
in drop lowering phase, and should not occur afterwards.
use rustc_middle::mir::visit::Visitor;
use rustc_middle::{
mir::{
use rustc_middle::mir::visit::Visitor;
use rustc_middle::{
mir::{
- AggregateKind, BasicBlock, Body, Location, MirPhase, Operand, Rvalue, Statement,
- StatementKind, Terminator, TerminatorKind,
+ AggregateKind, BasicBlock, Body, BorrowKind, Location, MirPhase, Operand, Rvalue,
+ Statement, StatementKind, Terminator, TerminatorKind,
+ Rvalue::Ref(_, BorrowKind::Shallow, _) => {
+ if self.mir_phase > MirPhase::DropLowering {
+ self.fail(
+ location,
+ "`Assign` statement with a `Shallow` borrow should have been removed after drop lowering phase",
+ );
+ }
+ }
+ StatementKind::AscribeUserType(..) => {
+ if self.mir_phase > MirPhase::DropLowering {
+ self.fail(
+ location,
+ "`AscribeUserType` should have been removed after drop lowering phase",
+ );
+ }
+ }
+ StatementKind::FakeRead(..) => {
+ if self.mir_phase > MirPhase::DropLowering {
+ self.fail(
+ location,
+ "`FakeRead` should have been removed after drop lowering phase",
+ );
+ }
+ }