rustc_middle/
lib.rs

1//! The "main crate" of the Rust compiler. This crate contains common
2//! type definitions that are used by the other crates in the rustc
3//! "family". The following are some prominent examples.
4//!
5//! - **HIR.** The "high-level (H) intermediate representation (IR)" is
6//!   defined in the [`hir`] module.
7//! - **THIR.** The "typed high-level (H) intermediate representation (IR)"
8//!   is defined in the [`thir`] module.
9//! - **MIR.** The "mid-level (M) intermediate representation (IR)" is
10//!   defined in the [`mir`] module. This module contains only the
11//!   *definition* of the MIR; the passes that transform and operate
12//!   on MIR are found in `rustc_const_eval` crate.
13//! - **Types.** The internal representation of types used in rustc is
14//!   defined in the [`ty`] module. This includes the
15//!   [**type context**][ty::TyCtxt] (or `tcx`), which is the central
16//!   context during most of compilation, containing the interners and
17//!   other things.
18//!
19//! For more information about how rustc works, see the [rustc dev guide].
20//!
21//! [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/
22//!
23//! # Note
24//!
25//! This API is completely unstable and subject to change.
26
27// tidy-alphabetical-start
28#![allow(internal_features)]
29#![allow(rustc::direct_use_of_rustc_type_ir)]
30#![cfg_attr(bootstrap, feature(array_windows))]
31#![feature(allocator_api)]
32#![feature(assert_matches)]
33#![feature(associated_type_defaults)]
34#![feature(box_as_ptr)]
35#![feature(box_patterns)]
36#![feature(closure_track_caller)]
37#![feature(const_default)]
38#![feature(const_trait_impl)]
39#![feature(core_intrinsics)]
40#![feature(debug_closure_helpers)]
41#![feature(decl_macro)]
42#![feature(discriminant_kind)]
43#![feature(extern_types)]
44#![feature(file_buffered)]
45#![feature(gen_blocks)]
46#![feature(if_let_guard)]
47#![feature(intra_doc_pointers)]
48#![feature(min_specialization)]
49#![feature(negative_impls)]
50#![feature(never_type)]
51#![feature(ptr_alignment_type)]
52#![feature(range_bounds_is_empty)]
53#![feature(rustc_attrs)]
54#![feature(sized_hierarchy)]
55#![feature(try_blocks)]
56#![feature(try_trait_v2)]
57#![feature(try_trait_v2_residual)]
58#![feature(try_trait_v2_yeet)]
59#![feature(type_alias_impl_trait)]
60#![feature(unwrap_infallible)]
61#![feature(yeet_expr)]
62#![recursion_limit = "256"]
63// tidy-alphabetical-end
64
65#[cfg(test)]
66mod tests;
67
68#[macro_use]
69mod macros;
70
71#[macro_use]
72pub mod arena;
73pub mod error;
74pub mod hir;
75pub mod hooks;
76pub mod infer;
77pub mod lint;
78pub mod metadata;
79pub mod middle;
80pub mod mir;
81pub mod thir;
82pub mod traits;
83pub mod ty;
84pub mod util;
85mod values;
86
87#[macro_use]
88pub mod query;
89#[macro_use]
90pub mod dep_graph;
91
92// Allows macros to refer to this crate as `::rustc_middle`
93extern crate self as rustc_middle;
94
95#[allow(non_upper_case_globals)]
#[doc(hidden)]
#[doc =
r" Auto-generated constants for type-checked references to Fluent messages."]
pub(crate) mod fluent_generated {
    #[doc =
    "Constant referring to Fluent message `middle_assert_async_resume_after_drop` from `middle`"]
    pub const middle_assert_async_resume_after_drop: rustc_errors::DiagMessage
        =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_async_resume_after_drop"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_async_resume_after_panic` from `middle`"]
    pub const middle_assert_async_resume_after_panic:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_async_resume_after_panic"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_async_resume_after_return` from `middle`"]
    pub const middle_assert_async_resume_after_return:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_async_resume_after_return"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_coroutine_resume_after_drop` from `middle`"]
    pub const middle_assert_coroutine_resume_after_drop:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_coroutine_resume_after_drop"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_coroutine_resume_after_panic` from `middle`"]
    pub const middle_assert_coroutine_resume_after_panic:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_coroutine_resume_after_panic"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_coroutine_resume_after_return` from `middle`"]
    pub const middle_assert_coroutine_resume_after_return:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_coroutine_resume_after_return"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_divide_by_zero` from `middle`"]
    pub const middle_assert_divide_by_zero: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_divide_by_zero"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_gen_resume_after_drop` from `middle`"]
    pub const middle_assert_gen_resume_after_drop: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_gen_resume_after_drop"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_gen_resume_after_panic` from `middle`"]
    pub const middle_assert_gen_resume_after_panic: rustc_errors::DiagMessage
        =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_gen_resume_after_panic"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_invalid_enum_construction` from `middle`"]
    pub const middle_assert_invalid_enum_construction:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_invalid_enum_construction"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_misaligned_ptr_deref` from `middle`"]
    pub const middle_assert_misaligned_ptr_deref: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_misaligned_ptr_deref"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_null_ptr_deref` from `middle`"]
    pub const middle_assert_null_ptr_deref: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_null_ptr_deref"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_op_overflow` from `middle`"]
    pub const middle_assert_op_overflow: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_op_overflow"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_overflow_neg` from `middle`"]
    pub const middle_assert_overflow_neg: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_overflow_neg"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_remainder_by_zero` from `middle`"]
    pub const middle_assert_remainder_by_zero: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_remainder_by_zero"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_shl_overflow` from `middle`"]
    pub const middle_assert_shl_overflow: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_shl_overflow"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_assert_shr_overflow` from `middle`"]
    pub const middle_assert_shr_overflow: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_assert_shr_overflow"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_autodiff_unsafe_inner_const_ref` from `middle`"]
    pub const middle_autodiff_unsafe_inner_const_ref:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_autodiff_unsafe_inner_const_ref"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_bounds_check` from `middle`"]
    pub const middle_bounds_check: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_bounds_check"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_conflict_types` from `middle`"]
    pub const middle_conflict_types: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_conflict_types"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_consider_type_length_limit` from `middle`"]
    pub const middle_consider_type_length_limit: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_consider_type_length_limit"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_const_eval_non_int` from `middle`"]
    pub const middle_const_eval_non_int: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_const_eval_non_int"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_const_not_used_in_type_alias` from `middle`"]
    pub const middle_const_not_used_in_type_alias: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_const_not_used_in_type_alias"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_deprecated` from `middle`"]
    pub const middle_deprecated: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_deprecated"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_deprecated_in_future` from `middle`"]
    pub const middle_deprecated_in_future: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_deprecated_in_future"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_deprecated_in_version` from `middle`"]
    pub const middle_deprecated_in_version: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_deprecated_in_version"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_deprecated_suggestion` from `middle`"]
    pub const middle_deprecated_suggestion: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_deprecated_suggestion"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_drop_check_overflow` from `middle`"]
    pub const middle_drop_check_overflow: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_drop_check_overflow"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_drop_check_overflow.note` from `middle`"]
    pub const middle_note: rustc_errors::SubdiagMessage =
        rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("note"));
    #[doc =
    "Constant referring to Fluent message `middle_erroneous_constant` from `middle`"]
    pub const middle_erroneous_constant: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_erroneous_constant"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_failed_writing_file` from `middle`"]
    pub const middle_failed_writing_file: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_failed_writing_file"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_invalid_const_in_valtree` from `middle`"]
    pub const middle_invalid_const_in_valtree: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_invalid_const_in_valtree"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_cycle` from `middle`"]
    pub const middle_layout_cycle: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_cycle"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_normalization_failure` from `middle`"]
    pub const middle_layout_normalization_failure: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_normalization_failure"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_references_error` from `middle`"]
    pub const middle_layout_references_error: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_references_error"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_simd_too_many` from `middle`"]
    pub const middle_layout_simd_too_many: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_simd_too_many"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_simd_zero_length` from `middle`"]
    pub const middle_layout_simd_zero_length: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_simd_zero_length"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_size_overflow` from `middle`"]
    pub const middle_layout_size_overflow: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_size_overflow"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_too_generic` from `middle`"]
    pub const middle_layout_too_generic: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_too_generic"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_layout_unknown` from `middle`"]
    pub const middle_layout_unknown: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_layout_unknown"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_max_num_nodes_in_valtree` from `middle`"]
    pub const middle_max_num_nodes_in_valtree: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_max_num_nodes_in_valtree"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_opaque_hidden_type_mismatch` from `middle`"]
    pub const middle_opaque_hidden_type_mismatch: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_opaque_hidden_type_mismatch"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_opaque_hidden_type_mismatch.label` from `middle`"]
    pub const middle_label: rustc_errors::SubdiagMessage =
        rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("label"));
    #[doc =
    "Constant referring to Fluent message `middle_previous_use_here` from `middle`"]
    pub const middle_previous_use_here: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_previous_use_here"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_recursion_limit_reached` from `middle`"]
    pub const middle_recursion_limit_reached: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_recursion_limit_reached"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_recursion_limit_reached.help` from `middle`"]
    pub const middle_help: rustc_errors::SubdiagMessage =
        rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("help"));
    #[doc =
    "Constant referring to Fluent message `middle_requires_lang_item` from `middle`"]
    pub const middle_requires_lang_item: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_requires_lang_item"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_strict_coherence_needs_negative_coherence` from `middle`"]
    pub const middle_strict_coherence_needs_negative_coherence:
        rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_strict_coherence_needs_negative_coherence"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_type_length_limit` from `middle`"]
    pub const middle_type_length_limit: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_type_length_limit"),
            None);
    #[doc =
    "Constant referring to Fluent message `middle_unsupported_union` from `middle`"]
    pub const middle_unsupported_union: rustc_errors::DiagMessage =
        rustc_errors::DiagMessage::FluentIdentifier(std::borrow::Cow::Borrowed("middle_unsupported_union"),
            None);
    #[doc =
    r" Constants expected to exist by the diagnostic derive macros to use as default Fluent"]
    #[doc = r" identifiers for different subdiagnostic kinds."]
    pub mod _subdiag {
        #[doc = r" Default for `#[help]`"]
        pub const help: rustc_errors::SubdiagMessage =
            rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("help"));
        #[doc = r" Default for `#[note]`"]
        pub const note: rustc_errors::SubdiagMessage =
            rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("note"));
        #[doc = r" Default for `#[warn]`"]
        pub const warn: rustc_errors::SubdiagMessage =
            rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("warn"));
        #[doc = r" Default for `#[label]`"]
        pub const label: rustc_errors::SubdiagMessage =
            rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("label"));
        #[doc = r" Default for `#[suggestion]`"]
        pub const suggestion: rustc_errors::SubdiagMessage =
            rustc_errors::SubdiagMessage::FluentAttr(std::borrow::Cow::Borrowed("suggestion"));
    }
}rustc_fluent_macro::fluent_messages! { "../messages.ftl" }