Fixed failing tests (missing labels), added automatic error code in create_feature_err() builder
This commit is contained in:
parent
d1f14ee1b0
commit
4c82845b3a
@ -1,6 +1,6 @@
|
||||
// Not in interpret to make sure we do not use private implementation details
|
||||
|
||||
use crate::errors::MaxNumNodesExceeded;
|
||||
use crate::errors::MaxNumNodesInConstErr;
|
||||
use crate::interpret::{
|
||||
intern_const_alloc_recursive, ConstValue, InternKind, InterpCx, InterpResult, MemPlaceMeta,
|
||||
Scalar,
|
||||
@ -77,7 +77,7 @@ pub(crate) fn eval_to_valtree<'tcx>(
|
||||
ValTreeCreationError::NodesOverflow => {
|
||||
let msg = format!("maximum number of nodes exceeded in constant {}", &s);
|
||||
let mut diag = match tcx.hir().span_if_local(did) {
|
||||
Some(span) => tcx.sess.create_err(MaxNumNodesExceeded { span, s }),
|
||||
Some(span) => tcx.sess.create_err(MaxNumNodesInConstErr { span, s }),
|
||||
None => tcx.sess.struct_err(&msg),
|
||||
};
|
||||
diag.emit();
|
||||
|
@ -89,8 +89,8 @@ pub(crate) struct TransientMutBorrowErrRaw {
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
#[error(const_eval::const_evaL_max_num_nodes_exceeded)]
|
||||
pub(crate) struct MaxNumNodesExceeded {
|
||||
#[error(const_eval::const_evaL_max_num_nodes_in_const_err)]
|
||||
pub(crate) struct MaxNumNodesInConstErr {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub s: String,
|
||||
@ -109,7 +109,7 @@ pub(crate) struct UnallowedFnPointerCall {
|
||||
pub(crate) struct UnstableConstFn {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub def_id: String,
|
||||
pub def_path: String,
|
||||
}
|
||||
|
||||
#[derive(SessionDiagnostic)]
|
||||
@ -160,6 +160,7 @@ pub(crate) struct UnallowedOpInConstContext {
|
||||
#[error(const_eval::unallowed_heap_allocations, code = "E0010")]
|
||||
pub(crate) struct UnallowedHeapAllocations {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub span: Span,
|
||||
pub kind: ConstContext,
|
||||
#[note(const_eval::teach_note)]
|
||||
@ -178,6 +179,7 @@ pub(crate) struct UnallowedInlineAsm {
|
||||
#[error(const_eval::interior_mutable_data_refer, code = "E0492")]
|
||||
pub(crate) struct InteriorMutableDataRefer {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub span: Span,
|
||||
#[help]
|
||||
pub opt_help: Option<()>,
|
||||
|
@ -345,8 +345,10 @@ fn build_error(
|
||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||
let FnCallUnstable(def_id, feature) = *self;
|
||||
|
||||
let mut err =
|
||||
ccx.tcx.sess.create_err(UnstableConstFn { span, def_id: ccx.tcx.def_path_str(def_id) });
|
||||
let mut err = ccx
|
||||
.tcx
|
||||
.sess
|
||||
.create_err(UnstableConstFn { span, def_path: ccx.tcx.def_path_str(def_id) });
|
||||
|
||||
if ccx.is_const_stable_const_fn() {
|
||||
err.help("const-stable functions can only call other const-stable functions");
|
||||
@ -517,17 +519,6 @@ fn build_error(
|
||||
ccx: &ConstCx<'_, 'tcx>,
|
||||
span: Span,
|
||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||
// let raw = match self.0 {
|
||||
// hir::BorrowKind::Raw => "raw ",
|
||||
// hir::BorrowKind::Ref => "",
|
||||
// };
|
||||
|
||||
// ccx.tcx.sess.create_err(UnallowedMutableRefs {
|
||||
// span,
|
||||
// raw,
|
||||
// kind: ccx.const_kind(),
|
||||
// teach: ccx.tcx.sess.teach(&error_code!(E0764)).then_some(()),
|
||||
// })
|
||||
match self.0 {
|
||||
hir::BorrowKind::Raw => ccx.tcx.sess.create_err(UnallowedMutableRefsRaw {
|
||||
span,
|
||||
|
@ -30,11 +30,11 @@ const_eval_transient_mut_borrow = mutable references are not allowed in {$kind}s
|
||||
|
||||
const_eval_transient_mut_borrow_raw = raw mutable references are not allowed in {$kind}s
|
||||
|
||||
const_evaL_max_num_nodes_exceeded = maximum number of nodes exceeded in constant {$s}
|
||||
const_evaL_max_num_nodes_in_const_err = maximum number of nodes exceeded in constant {$s}
|
||||
|
||||
const_eval_unallowed_fn_pointer_call = function pointer calls are not allowed in {$kind}s
|
||||
|
||||
const_eval_unstable_const_fn = `{$def_id}` is not yet stable as a const fn
|
||||
const_eval_unstable_const_fn = `{$def_path}` is not yet stable as a const fn
|
||||
|
||||
const_eval_unallowed_mutable_refs =
|
||||
mutable references are not allowed in the final value of {$kind}s
|
||||
@ -65,9 +65,7 @@ const_eval_unallowed_heap_allocations =
|
||||
allocations are not allowed in {$kind}s
|
||||
.label = allocation not allowed in {$kind}s
|
||||
.teach_note =
|
||||
The value of statics and constants must be known at compile time, and they live for the entire
|
||||
lifetime of a program. Creating a boxed value allocates memory on the heap at runtime, and
|
||||
therefore cannot be done at compile time.
|
||||
The value of statics and constants must be known at compile time, and they live for the entire lifetime of a program. Creating a boxed value allocates memory on the heap at runtime, and therefore cannot be done at compile time.
|
||||
|
||||
const_eval_unallowed_inline_asm =
|
||||
inline assembly is not allowed in {$kind}s
|
||||
|
@ -20,8 +20,8 @@
|
||||
use rustc_errors::json::JsonEmitter;
|
||||
use rustc_errors::registry::Registry;
|
||||
use rustc_errors::{
|
||||
fallback_fluent_bundle, DiagnosticBuilder, DiagnosticId, DiagnosticMessage, EmissionGuarantee,
|
||||
ErrorGuaranteed, FluentBundle, LazyFallbackBundle, MultiSpan,
|
||||
error_code, fallback_fluent_bundle, DiagnosticBuilder, DiagnosticId, DiagnosticMessage,
|
||||
EmissionGuarantee, ErrorGuaranteed, FluentBundle, LazyFallbackBundle, MultiSpan,
|
||||
};
|
||||
use rustc_macros::HashStable_Generic;
|
||||
pub use rustc_span::def_id::StableCrateId;
|
||||
@ -467,6 +467,7 @@ pub fn create_feature_err<'a>(
|
||||
feature: Symbol,
|
||||
) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
|
||||
let mut err = self.parse_sess.create_err(err);
|
||||
err.code = std::option::Option::Some(error_code!(E0658));
|
||||
add_feature_diagnostics(&mut err, &self.parse_sess, feature);
|
||||
err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user