Skip to main content

Module elaborate_drops

Module elaborate_drops 

Source

Re-exportsΒ§

use std::fmt; πŸ”’
use rustc_abi::FieldIdx; πŸ”’
use rustc_abi::VariantIdx; πŸ”’
use rustc_index::IndexVec; πŸ”’
use rustc_index::bit_set::DenseBitSet; πŸ”’
use rustc_middle::ty; πŸ”’
use rustc_middle::ty::TyCtxt; πŸ”’
use rustc_mir_dataflow::impls::MaybeInitializedPlaces; πŸ”’
use rustc_mir_dataflow::impls::MaybeUninitializedPlaces; πŸ”’
use rustc_mir_dataflow::move_paths::LookupResult; πŸ”’
use rustc_mir_dataflow::move_paths::MoveData; πŸ”’
use rustc_mir_dataflow::move_paths::MovePathIndex; πŸ”’
use rustc_mir_dataflow::Analysis; πŸ”’
use rustc_mir_dataflow::DropFlagState; πŸ”’
use rustc_mir_dataflow::MoveDataTypingEnv; πŸ”’
use rustc_mir_dataflow::ResultsCursor; πŸ”’
use rustc_mir_dataflow::on_all_children_bits; πŸ”’
use rustc_mir_dataflow::on_lookup_result_bits; πŸ”’
use rustc_span::Span; πŸ”’
use tracing::debug; πŸ”’
use tracing::instrument; πŸ”’
use tracing::instrument; πŸ”’
use crate::PassPolicy; πŸ”’
use crate::elaborate_drop::DropElaborator; πŸ”’
use crate::elaborate_drop::DropFlagMode; πŸ”’
use crate::elaborate_drop::DropStyle; πŸ”’
use crate::elaborate_drop::Unwind; πŸ”’
use crate::elaborate_drop::elaborate_drop; πŸ”’
use crate::patch::MirPatch; πŸ”’
use rustc_middle::mir::*; πŸ”’

StructsΒ§

ElaborateDrops πŸ”’
During MIR building, Drop terminators are inserted in every place where a drop may occur. However, in this phase, the presence of these terminators does not guarantee that a destructor will run, as the target of the drop may be uninitialized. In general, the compiler cannot determine at compile time whether a destructor will run or not.
ElaborateDropsCtxt πŸ”’
InitializationData πŸ”’

FunctionsΒ§

compute_dead_unwinds πŸ”’
Records unwind edges which are known to be unreachable, because they are in drop terminators that can’t drop anything.