mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-08 09:38:26 +03:00
ed091aaf5d
Most of the files within the `dep_graph` module can be moved wholesale into `rustc_middle`. But two of them (`mod.rs` and `dep_node.rs`) have the same name as existing files in `rustc_middle`, so for those I just copied the contents into the existing files. The commit also moves `QueryContext` and `incremental_verify_ich*` because they are tightly intertwined with the dep graph code. And a couple of error structs moved as well.
217 lines
6.2 KiB
Rust
217 lines
6.2 KiB
Rust
use std::path::Path;
|
|
use std::{fmt, io};
|
|
|
|
use rustc_errors::codes::*;
|
|
use rustc_errors::{DiagArgName, DiagArgValue, DiagMessage};
|
|
use rustc_macros::{Diagnostic, Subdiagnostic};
|
|
use rustc_span::{Span, Symbol};
|
|
|
|
use crate::ty::{Instance, Ty};
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("overflow while adding drop-check rules for `{$ty}`", code = E0320)]
|
|
#[note("overflowed on `{$overflow_ty}`")]
|
|
pub(crate) struct DropCheckOverflow<'tcx> {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub ty: Ty<'tcx>,
|
|
pub overflow_ty: Ty<'tcx>,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("failed to write file {$path}: {$error}\"")]
|
|
pub(crate) struct FailedWritingFile<'a> {
|
|
pub path: &'a Path,
|
|
pub error: io::Error,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("concrete type differs from previous defining opaque type use")]
|
|
pub(crate) struct OpaqueHiddenTypeMismatch<'tcx> {
|
|
pub self_ty: Ty<'tcx>,
|
|
pub other_ty: Ty<'tcx>,
|
|
#[primary_span]
|
|
#[label("expected `{$self_ty}`, got `{$other_ty}`")]
|
|
pub other_span: Span,
|
|
#[subdiagnostic]
|
|
pub sub: TypeMismatchReason,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("we don't support unions yet: '{$ty_name}'")]
|
|
pub struct UnsupportedUnion {
|
|
pub ty_name: String,
|
|
}
|
|
|
|
// FIXME(autodiff): I should get used somewhere
|
|
#[derive(Diagnostic)]
|
|
#[diag("reading from a `Duplicated` const {$ty} is unsafe")]
|
|
pub struct AutodiffUnsafeInnerConstRef<'tcx> {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub ty: Ty<'tcx>,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
pub enum TypeMismatchReason {
|
|
#[label("this expression supplies two conflicting concrete types for the same opaque type")]
|
|
ConflictType {
|
|
#[primary_span]
|
|
span: Span,
|
|
},
|
|
#[note("previous use here")]
|
|
PreviousUse {
|
|
#[primary_span]
|
|
span: Span,
|
|
},
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("reached the recursion limit finding the struct tail for `{$ty}`")]
|
|
#[help(
|
|
"consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]`"
|
|
)]
|
|
pub(crate) struct RecursionLimitReached<'tcx> {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub ty: Ty<'tcx>,
|
|
pub suggested_limit: rustc_hir::limit::Limit,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("constant evaluation of enum discriminant resulted in non-integer")]
|
|
pub(crate) struct ConstEvalNonIntError {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag(
|
|
"to use `strict_coherence` on this trait, the `with_negative_coherence` feature must be enabled"
|
|
)]
|
|
pub(crate) struct StrictCoherenceNeedsNegativeCoherence {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
#[label("due to this attribute")]
|
|
pub attr_span: Span,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("requires `{$name}` lang_item")]
|
|
pub(crate) struct RequiresLangItem {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub name: Symbol,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag(
|
|
"const parameter `{$ct}` is part of concrete type but not used in parameter list for the `impl Trait` type alias"
|
|
)]
|
|
pub(super) struct ConstNotUsedTraitAlias {
|
|
pub ct: String,
|
|
#[primary_span]
|
|
pub span: Span,
|
|
}
|
|
|
|
pub struct CustomSubdiagnostic<'a> {
|
|
pub msg: fn() -> DiagMessage,
|
|
pub add_args: Box<dyn FnOnce(&mut dyn FnMut(DiagArgName, DiagArgValue)) + 'a>,
|
|
}
|
|
|
|
impl<'a> CustomSubdiagnostic<'a> {
|
|
pub fn label(x: fn() -> DiagMessage) -> Self {
|
|
Self::label_and_then(x, |_| {})
|
|
}
|
|
pub fn label_and_then<F: FnOnce(&mut dyn FnMut(DiagArgName, DiagArgValue)) + 'a>(
|
|
msg: fn() -> DiagMessage,
|
|
f: F,
|
|
) -> Self {
|
|
Self { msg, add_args: Box::new(move |x| f(x)) }
|
|
}
|
|
}
|
|
|
|
impl fmt::Debug for CustomSubdiagnostic<'_> {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
f.debug_struct("CustomSubdiagnostic").finish_non_exhaustive()
|
|
}
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
pub enum LayoutError<'tcx> {
|
|
#[diag("the type `{$ty}` has an unknown layout")]
|
|
Unknown { ty: Ty<'tcx> },
|
|
|
|
#[diag("the type `{$ty}` does not have a fixed layout")]
|
|
TooGeneric { ty: Ty<'tcx> },
|
|
|
|
#[diag("values of the type `{$ty}` are too big for the target architecture")]
|
|
Overflow { ty: Ty<'tcx> },
|
|
|
|
#[diag("the SIMD type `{$ty}` has more elements than the limit {$max_lanes}")]
|
|
SimdTooManyLanes { ty: Ty<'tcx>, max_lanes: u64 },
|
|
|
|
#[diag("the SIMD type `{$ty}` has zero elements")]
|
|
SimdZeroLength { ty: Ty<'tcx> },
|
|
|
|
#[diag("unable to determine layout for `{$ty}` because `{$failure_ty}` cannot be normalized")]
|
|
NormalizationFailure { ty: Ty<'tcx>, failure_ty: String },
|
|
|
|
#[diag("a cycle occurred during layout computation")]
|
|
Cycle,
|
|
|
|
#[diag("the type has an unknown layout")]
|
|
ReferencesError,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("erroneous constant encountered")]
|
|
pub(crate) struct ErroneousConstant {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("reached the type-length limit while instantiating `{$instance}`")]
|
|
#[help("consider adding a `#![type_length_limit=\"{$type_length}\"]` attribute to your crate")]
|
|
pub(crate) struct TypeLengthLimit<'tcx> {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub instance: Instance<'tcx>,
|
|
pub type_length: usize,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("maximum number of nodes exceeded in constant {$global_const_id}")]
|
|
pub(crate) struct MaxNumNodesInValtree {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub global_const_id: String,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("constant {$global_const_id} cannot be used as pattern")]
|
|
#[note("constants that reference mutable or external memory cannot be used as patterns")]
|
|
pub(crate) struct InvalidConstInValtree {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub global_const_id: String,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("internal compiler error: reentrant incremental verify failure, suppressing message")]
|
|
pub(crate) struct Reentrant;
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("internal compiler error: encountered incremental compilation error with {$dep_node}")]
|
|
#[note("please follow the instructions below to create a bug report with the provided information")]
|
|
#[note("for incremental compilation bugs, having a reproduction is vital")]
|
|
#[note(
|
|
"an ideal reproduction consists of the code before and some patch that then triggers the bug when applied and compiled again"
|
|
)]
|
|
#[note("as a workaround, you can run {$run_cmd} to allow your project to compile")]
|
|
pub(crate) struct IncrementCompilation {
|
|
pub run_cmd: String,
|
|
pub dep_node: String,
|
|
}
|