]>
Commit | Line | Data |
---|---|---|
e9174d1e | 1 | /*! |
1a4d82fc | 2 | |
74b04a01 | 3 | Rust MIR: a lowered representation of Rust. |
1a4d82fc | 4 | |
e9174d1e | 5 | */ |
1a4d82fc | 6 | |
0bf4aa26 | 7 | #![feature(nll)] |
8faf50e0 | 8 | #![feature(in_band_lifetimes)] |
1b1a35ee | 9 | #![feature(array_windows)] |
17df50a5 | 10 | #![feature(assert_matches)] |
94222f64 | 11 | #![cfg_attr(bootstrap, feature(bindings_after_at))] |
60c5eb7d | 12 | #![feature(bool_to_option)] |
7453a54e | 13 | #![feature(box_patterns)] |
83c7162d | 14 | #![feature(crate_visibility_modifier)] |
f9f354fc | 15 | #![feature(decl_macro)] |
1b1a35ee | 16 | #![feature(exact_size_is_empty)] |
17df50a5 | 17 | #![feature(format_args_capture)] |
cdc7bbd5 | 18 | #![feature(iter_zip)] |
0531ce1d | 19 | #![feature(never_type)] |
6a06907d | 20 | #![feature(map_try_insert)] |
f9f354fc | 21 | #![feature(min_specialization)] |
17df50a5 | 22 | #![feature(slice_ptr_get)] |
dc9dc135 | 23 | #![feature(trusted_len)] |
9fa01778 | 24 | #![feature(try_blocks)] |
f9f354fc | 25 | #![feature(associated_type_defaults)] |
e74abb32 | 26 | #![feature(stmt_expr_attributes)] |
60c5eb7d | 27 | #![feature(trait_alias)] |
6a06907d | 28 | #![feature(option_get_or_insert_default)] |
1b1a35ee | 29 | #![feature(once_cell)] |
29967ef6 | 30 | #![feature(control_flow_enum)] |
136023e0 | 31 | #![feature(try_reserve)] |
94222f64 | 32 | #![feature(try_reserve_kind)] |
dfeec247 | 33 | #![recursion_limit = "256"] |
94b46f34 | 34 | |
dfeec247 | 35 | #[macro_use] |
3dfed10e | 36 | extern crate tracing; |
dfeec247 | 37 | #[macro_use] |
ba9703b0 | 38 | extern crate rustc_middle; |
e9174d1e | 39 | |
3b2f2976 | 40 | mod borrow_check; |
dfeec247 | 41 | pub mod const_eval; |
e1599b0c | 42 | pub mod dataflow; |
dfeec247 XL |
43 | pub mod interpret; |
44 | pub mod monomorphize; | |
cc61c64b | 45 | mod shim; |
92a42be0 | 46 | pub mod transform; |
cc61c64b | 47 | pub mod util; |
9e0c209e | 48 | |
94222f64 XL |
49 | // A public API provided for the Rust compiler consumers. |
50 | pub use self::borrow_check::consumers; | |
51 | ||
ba9703b0 | 52 | use rustc_middle::ty::query::Providers; |
8bb4bdeb | 53 | |
f035d41b | 54 | pub fn provide(providers: &mut Providers) { |
3b2f2976 | 55 | borrow_check::provide(providers); |
dfeec247 | 56 | const_eval::provide(providers); |
cc61c64b | 57 | shim::provide(providers); |
7cac9316 | 58 | transform::provide(providers); |
a1dfa0c6 | 59 | monomorphize::partitioning::provide(providers); |
3dfed10e | 60 | monomorphize::polymorphize::provide(providers); |
1b1a35ee XL |
61 | providers.eval_to_const_value_raw = const_eval::eval_to_const_value_raw_provider; |
62 | providers.eval_to_allocation_raw = const_eval::eval_to_allocation_raw_provider; | |
e74abb32 | 63 | providers.const_caller_location = const_eval::const_caller_location; |
5869c6ff XL |
64 | providers.mir_callgraph_reachable = transform::inline::cycle::mir_callgraph_reachable; |
65 | providers.mir_inliner_callees = transform::inline::cycle::mir_inliner_callees; | |
dfeec247 XL |
66 | providers.destructure_const = |tcx, param_env_and_value| { |
67 | let (param_env, value) = param_env_and_value.into_parts(); | |
68 | const_eval::destructure_const(tcx, param_env, value) | |
69 | }; | |
6a06907d XL |
70 | providers.const_to_valtree = |tcx, param_env_and_value| { |
71 | let (param_env, raw) = param_env_and_value.into_parts(); | |
72 | const_eval::const_to_valtree(tcx, param_env, raw) | |
73 | }; | |
1b1a35ee XL |
74 | providers.deref_const = |tcx, param_env_and_value| { |
75 | let (param_env, value) = param_env_and_value.into_parts(); | |
76 | const_eval::deref_const(tcx, param_env, value) | |
77 | }; | |
cc61c64b | 78 | } |