]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_const_eval/src/lib.rs
New upstream version 1.65.0+dfsg1
[rustc.git] / compiler / rustc_const_eval / src / lib.rs
CommitLineData
e9174d1e 1/*!
1a4d82fc 2
74b04a01 3Rust 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 29extern crate tracing;
dfeec247 30#[macro_use]
ba9703b0 31extern crate rustc_middle;
e9174d1e 32
dfeec247 33pub mod const_eval;
064997fb 34mod errors;
dfeec247 35pub mod interpret;
064997fb 36mod might_permit_raw_init;
92a42be0 37pub mod transform;
cc61c64b 38pub mod util;
9e0c209e 39
923072b8 40use rustc_middle::ty;
ba9703b0 41use rustc_middle::ty::query::Providers;
064997fb 42use rustc_target::abi::InitKind;
8bb4bdeb 43
f035d41b 44pub 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}