]>
Commit | Line | Data |
---|---|---|
e9174d1e | 1 | /*! |
1a4d82fc | 2 | |
74b04a01 | 3 | Rust MIR: a lowered representation of Rust. |
1a4d82fc | 4 | |
e9174d1e | 5 | */ |
1a4d82fc | 6 | |
17df50a5 | 7 | #![feature(assert_matches)] |
7453a54e | 8 | #![feature(box_patterns)] |
c295e0f8 | 9 | #![feature(control_flow_enum)] |
f9f354fc | 10 | #![feature(decl_macro)] |
1b1a35ee | 11 | #![feature(exact_size_is_empty)] |
923072b8 | 12 | #![feature(let_chains)] |
f2b60f7d | 13 | #![cfg_attr(bootstrap, feature(let_else))] |
6a06907d | 14 | #![feature(map_try_insert)] |
f9f354fc | 15 | #![feature(min_specialization)] |
17df50a5 | 16 | #![feature(slice_ptr_get)] |
c295e0f8 XL |
17 | #![feature(option_get_or_insert_default)] |
18 | #![feature(never_type)] | |
19 | #![feature(trait_alias)] | |
dc9dc135 | 20 | #![feature(trusted_len)] |
c295e0f8 | 21 | #![feature(trusted_step)] |
9fa01778 | 22 | #![feature(try_blocks)] |
923072b8 | 23 | #![feature(yeet_expr)] |
064997fb | 24 | #![feature(is_some_with)] |
dfeec247 | 25 | #![recursion_limit = "256"] |
5e7ed085 | 26 | #![allow(rustc::potential_query_instability)] |
94b46f34 | 27 | |
dfeec247 | 28 | #[macro_use] |
3dfed10e | 29 | extern crate tracing; |
dfeec247 | 30 | #[macro_use] |
ba9703b0 | 31 | extern crate rustc_middle; |
e9174d1e | 32 | |
dfeec247 | 33 | pub mod const_eval; |
064997fb | 34 | mod errors; |
dfeec247 | 35 | pub mod interpret; |
064997fb | 36 | mod might_permit_raw_init; |
92a42be0 | 37 | pub mod transform; |
cc61c64b | 38 | pub mod util; |
9e0c209e | 39 | |
923072b8 | 40 | use rustc_middle::ty; |
ba9703b0 | 41 | use rustc_middle::ty::query::Providers; |
064997fb | 42 | use rustc_target::abi::InitKind; |
8bb4bdeb | 43 | |
f035d41b | 44 | pub fn provide(providers: &mut Providers) { |
dfeec247 | 45 | const_eval::provide(providers); |
1b1a35ee XL |
46 | providers.eval_to_const_value_raw = const_eval::eval_to_const_value_raw_provider; |
47 | providers.eval_to_allocation_raw = const_eval::eval_to_allocation_raw_provider; | |
e74abb32 | 48 | providers.const_caller_location = const_eval::const_caller_location; |
923072b8 | 49 | providers.eval_to_valtree = |tcx, param_env_and_value| { |
6a06907d | 50 | let (param_env, raw) = param_env_and_value.into_parts(); |
923072b8 FG |
51 | const_eval::eval_to_valtree(tcx, param_env, raw) |
52 | }; | |
53 | providers.try_destructure_mir_constant = |tcx, param_env_and_value| { | |
54 | let (param_env, value) = param_env_and_value.into_parts(); | |
55 | const_eval::try_destructure_mir_constant(tcx, param_env, value).ok() | |
6a06907d | 56 | }; |
04454e1e | 57 | providers.valtree_to_const_val = |tcx, (ty, valtree)| { |
923072b8 | 58 | const_eval::valtree_to_const_value(tcx, ty::ParamEnv::empty().and(ty), valtree) |
04454e1e | 59 | }; |
923072b8 | 60 | providers.deref_mir_constant = |tcx, param_env_and_value| { |
1b1a35ee | 61 | let (param_env, value) = param_env_and_value.into_parts(); |
923072b8 | 62 | const_eval::deref_mir_constant(tcx, param_env, value) |
1b1a35ee | 63 | }; |
064997fb FG |
64 | providers.permits_uninit_init = |
65 | |tcx, ty| might_permit_raw_init::might_permit_raw_init(tcx, ty, InitKind::Uninit); | |
66 | providers.permits_zero_init = | |
67 | |tcx, ty| might_permit_raw_init::might_permit_raw_init(tcx, ty, InitKind::Zero); | |
cc61c64b | 68 | } |