2021-01-05 18:53:07 +00:00
|
|
|
#![feature(associated_type_defaults)]
|
|
|
|
#![feature(box_patterns)]
|
|
|
|
#![feature(exact_size_is_empty)]
|
2023-01-21 22:28:54 +00:00
|
|
|
#![feature(let_chains)]
|
2021-01-05 18:53:07 +00:00
|
|
|
#![feature(min_specialization)]
|
|
|
|
#![feature(stmt_expr_attributes)]
|
2021-09-01 19:05:35 +00:00
|
|
|
#![recursion_limit = "256"]
|
2022-08-19 09:21:14 +00:00
|
|
|
#![deny(rustc::untranslatable_diagnostic)]
|
|
|
|
#![deny(rustc::diagnostic_outside_of_impl)]
|
2021-01-05 18:53:07 +00:00
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
extern crate tracing;
|
|
|
|
#[macro_use]
|
|
|
|
extern crate rustc_middle;
|
|
|
|
|
2022-10-13 09:13:02 +00:00
|
|
|
use rustc_errors::{DiagnosticMessage, SubdiagnosticMessage};
|
2023-04-16 12:33:00 +00:00
|
|
|
use rustc_fluent_macro::fluent_messages;
|
2023-11-21 21:49:37 +00:00
|
|
|
use rustc_middle::ty;
|
Revised mir-dataflow.
Incorporates many fixes contributed by arielb1.
----
revise borrowck::mir::dataflow code to allow varying domain for bitvectors.
This particular code implements the `BitDenotation` trait for three
analyses:
* `MovingOutStatements`, which, like `borrowck::move_data`, maps each
bit-index to a move instruction, and a 1 means "the effect of this
move reaches this point" (and the assigned l-value, if a scoped
declaration, is still in scope).
* `MaybeInitializedLvals`, which maps each bit-index to an l-value.
A 1 means "there exists a control flow path to this point that
initializes the associated l-value."
* `MaybeUninitializedLvals`, which maps each bit-index to an l-value
A 1 means "there exists a control flow path to this point that
de-initializes the associated l-value."
----
Revised `graphviz` dataflow-rendering support in `borrowck::mir`.
One big difference is that this code is now parameterized over the
`BitDenotation`, so that it can be used to render dataflow results
independent of how the dataflow bitvectors are interpreted; see where
reference to `MoveOut` is replaced by the type parameter `D`.
----
Factor out routine to query subattributes in `#[rustc_mir(..)]`.
(Later commits build upon this for some unit testing and instrumentation.)
----
thread through a tcx so that I can query types of lvalues as part of analysis.
----
Revised `BitDenotation::Ctxt`, allowing variation beyond `MoveData`.
The main motivation is to ease threading through a `TyCtxt`.
(In hindsight it might have been better to instead attach the `TyCtxt`
to each of the different dataflow implementations, but that would
require e.g. switching away from having a `Default` impl, so I am
leaving that experiment for another time.)
2016-05-02 13:50:27 +00:00
|
|
|
|
2021-01-01 00:53:25 +00:00
|
|
|
pub use self::drop_flag_effects::{
|
|
|
|
drop_flag_effects_for_function_entry, drop_flag_effects_for_location,
|
2023-10-01 08:47:12 +00:00
|
|
|
move_path_children_matching, on_all_children_bits, on_lookup_result_bits,
|
2021-01-01 00:53:25 +00:00
|
|
|
};
|
2020-02-29 05:55:41 +00:00
|
|
|
pub use self::framework::{
|
2023-11-21 23:25:52 +00:00
|
|
|
fmt, lattice, visit_results, Analysis, AnalysisDomain, Direction, GenKill, GenKillAnalysis,
|
|
|
|
JoinSemiLattice, MaybeReachable, Results, ResultsCursor, ResultsVisitable, ResultsVisitor,
|
|
|
|
};
|
|
|
|
use self::framework::{
|
|
|
|
Backward, CloneAnalysis, Forward, ResultsClonedCursor, SwitchIntEdgeEffects,
|
2020-02-29 05:55:41 +00:00
|
|
|
};
|
2017-07-04 10:38:48 +00:00
|
|
|
use self::move_paths::MoveData;
|
|
|
|
|
2023-01-12 20:04:42 +00:00
|
|
|
pub mod debuginfo;
|
2018-08-30 21:54:32 +00:00
|
|
|
pub mod drop_flag_effects;
|
2021-01-05 18:53:07 +00:00
|
|
|
pub mod elaborate_drops;
|
2022-08-19 09:21:14 +00:00
|
|
|
mod errors;
|
2020-03-02 17:43:18 +00:00
|
|
|
mod framework;
|
2020-05-04 19:50:36 +00:00
|
|
|
pub mod impls;
|
2017-06-26 12:57:26 +00:00
|
|
|
pub mod move_paths;
|
2021-01-05 18:53:07 +00:00
|
|
|
pub mod rustc_peek;
|
|
|
|
pub mod storage;
|
2023-07-04 07:39:30 +00:00
|
|
|
pub mod un_derefer;
|
2022-08-25 16:43:46 +00:00
|
|
|
pub mod value_analysis;
|
2017-06-26 12:57:26 +00:00
|
|
|
|
2023-03-02 23:18:38 +00:00
|
|
|
fluent_messages! { "../messages.ftl" }
|
2022-10-13 09:13:02 +00:00
|
|
|
|
2020-02-29 05:47:36 +00:00
|
|
|
pub struct MoveDataParamEnv<'tcx> {
|
2020-12-30 17:48:40 +00:00
|
|
|
pub move_data: MoveData<'tcx>,
|
|
|
|
pub param_env: ty::ParamEnv<'tcx>,
|
2020-02-29 05:47:36 +00:00
|
|
|
}
|