]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_mir/src/lib.rs
New upstream version 1.56.0~beta.4+dfsg1
[rustc.git] / compiler / rustc_mir / src / lib.rs
CommitLineData
e9174d1e 1/*!
1a4d82fc 2
74b04a01 3Rust 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 36extern crate tracing;
dfeec247 37#[macro_use]
ba9703b0 38extern crate rustc_middle;
e9174d1e 39
3b2f2976 40mod borrow_check;
dfeec247 41pub mod const_eval;
e1599b0c 42pub mod dataflow;
dfeec247
XL
43pub mod interpret;
44pub mod monomorphize;
cc61c64b 45mod shim;
92a42be0 46pub mod transform;
cc61c64b 47pub mod util;
9e0c209e 48
94222f64
XL
49// A public API provided for the Rust compiler consumers.
50pub use self::borrow_check::consumers;
51
ba9703b0 52use rustc_middle::ty::query::Providers;
8bb4bdeb 53
f035d41b 54pub 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}