1 #![feature(associated_type_defaults)]
2 #![feature(box_patterns)]
3 #![feature(exact_size_is_empty)]
5 #![feature(min_specialization)]
7 #![feature(stmt_expr_attributes)]
8 #![feature(trusted_step)]
9 #![recursion_limit = "256"]
14 extern crate rustc_middle
;
16 use rustc_ast
::MetaItem
;
17 use rustc_hir
::def_id
::DefId
;
18 use rustc_middle
::ty
::{self, TyCtxt}
;
19 use rustc_span
::symbol
::{sym, Symbol}
;
21 pub use self::drop_flag_effects
::{
22 drop_flag_effects_for_function_entry
, drop_flag_effects_for_location
,
23 move_path_children_matching
, on_all_children_bits
, on_all_drop_children_bits
,
24 on_lookup_result_bits
,
26 pub use self::framework
::{
27 fmt
, graphviz
, lattice
, visit_results
, Analysis
, AnalysisDomain
, Backward
, CallReturnPlaces
,
28 Direction
, Engine
, Forward
, GenKill
, GenKillAnalysis
, JoinSemiLattice
, Results
, ResultsCursor
,
29 ResultsRefCursor
, ResultsVisitable
, ResultsVisitor
, SwitchIntEdgeEffects
,
32 use self::move_paths
::MoveData
;
34 pub mod drop_flag_effects
;
35 pub mod elaborate_drops
;
42 pub(crate) mod indexes
{
43 pub(crate) use super::move_paths
::MovePathIndex
;
46 pub struct MoveDataParamEnv
<'tcx
> {
47 pub move_data
: MoveData
<'tcx
>,
48 pub param_env
: ty
::ParamEnv
<'tcx
>,
51 pub fn has_rustc_mir_with(tcx
: TyCtxt
<'_
>, def_id
: DefId
, name
: Symbol
) -> Option
<MetaItem
> {
52 for attr
in tcx
.get_attrs(def_id
, sym
::rustc_mir
) {
53 let items
= attr
.meta_item_list();
54 for item
in items
.iter().flat_map(|l
| l
.iter()) {
55 match item
.meta_item() {
56 Some(mi
) if mi
.has_name(name
) => return Some(mi
.clone()),