Fixed failing tests (missing labels), added automatic error code in create_feature_err() builder
This commit is contained in:
parent
d1f14ee1b0
commit
4c82845b3a
5 changed files with 17 additions and 25 deletions
|
@ -1,6 +1,6 @@
|
||||||
// Not in interpret to make sure we do not use private implementation details
|
// Not in interpret to make sure we do not use private implementation details
|
||||||
|
|
||||||
use crate::errors::MaxNumNodesExceeded;
|
use crate::errors::MaxNumNodesInConstErr;
|
||||||
use crate::interpret::{
|
use crate::interpret::{
|
||||||
intern_const_alloc_recursive, ConstValue, InternKind, InterpCx, InterpResult, MemPlaceMeta,
|
intern_const_alloc_recursive, ConstValue, InternKind, InterpCx, InterpResult, MemPlaceMeta,
|
||||||
Scalar,
|
Scalar,
|
||||||
|
@ -77,7 +77,7 @@ pub(crate) fn eval_to_valtree<'tcx>(
|
||||||
ValTreeCreationError::NodesOverflow => {
|
ValTreeCreationError::NodesOverflow => {
|
||||||
let msg = format!("maximum number of nodes exceeded in constant {}", &s);
|
let msg = format!("maximum number of nodes exceeded in constant {}", &s);
|
||||||
let mut diag = match tcx.hir().span_if_local(did) {
|
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),
|
None => tcx.sess.struct_err(&msg),
|
||||||
};
|
};
|
||||||
diag.emit();
|
diag.emit();
|
||||||
|
|
|
@ -89,8 +89,8 @@ pub(crate) struct TransientMutBorrowErrRaw {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(SessionDiagnostic)]
|
#[derive(SessionDiagnostic)]
|
||||||
#[error(const_eval::const_evaL_max_num_nodes_exceeded)]
|
#[error(const_eval::const_evaL_max_num_nodes_in_const_err)]
|
||||||
pub(crate) struct MaxNumNodesExceeded {
|
pub(crate) struct MaxNumNodesInConstErr {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub s: String,
|
pub s: String,
|
||||||
|
@ -109,7 +109,7 @@ pub(crate) struct UnallowedFnPointerCall {
|
||||||
pub(crate) struct UnstableConstFn {
|
pub(crate) struct UnstableConstFn {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub def_id: String,
|
pub def_path: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(SessionDiagnostic)]
|
#[derive(SessionDiagnostic)]
|
||||||
|
@ -160,6 +160,7 @@ pub(crate) struct UnallowedOpInConstContext {
|
||||||
#[error(const_eval::unallowed_heap_allocations, code = "E0010")]
|
#[error(const_eval::unallowed_heap_allocations, code = "E0010")]
|
||||||
pub(crate) struct UnallowedHeapAllocations {
|
pub(crate) struct UnallowedHeapAllocations {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
|
#[label]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub kind: ConstContext,
|
pub kind: ConstContext,
|
||||||
#[note(const_eval::teach_note)]
|
#[note(const_eval::teach_note)]
|
||||||
|
@ -178,6 +179,7 @@ pub(crate) struct UnallowedInlineAsm {
|
||||||
#[error(const_eval::interior_mutable_data_refer, code = "E0492")]
|
#[error(const_eval::interior_mutable_data_refer, code = "E0492")]
|
||||||
pub(crate) struct InteriorMutableDataRefer {
|
pub(crate) struct InteriorMutableDataRefer {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
|
#[label]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
#[help]
|
#[help]
|
||||||
pub opt_help: Option<()>,
|
pub opt_help: Option<()>,
|
||||||
|
|
|
@ -345,8 +345,10 @@ impl<'tcx> NonConstOp<'tcx> for FnCallUnstable {
|
||||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
||||||
let FnCallUnstable(def_id, feature) = *self;
|
let FnCallUnstable(def_id, feature) = *self;
|
||||||
|
|
||||||
let mut err =
|
let mut err = ccx
|
||||||
ccx.tcx.sess.create_err(UnstableConstFn { span, def_id: ccx.tcx.def_path_str(def_id) });
|
.tcx
|
||||||
|
.sess
|
||||||
|
.create_err(UnstableConstFn { span, def_path: ccx.tcx.def_path_str(def_id) });
|
||||||
|
|
||||||
if ccx.is_const_stable_const_fn() {
|
if ccx.is_const_stable_const_fn() {
|
||||||
err.help("const-stable functions can only call other const-stable functions");
|
err.help("const-stable functions can only call other const-stable functions");
|
||||||
|
@ -517,17 +519,6 @@ impl<'tcx> NonConstOp<'tcx> for MutBorrow {
|
||||||
ccx: &ConstCx<'_, 'tcx>,
|
ccx: &ConstCx<'_, 'tcx>,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> DiagnosticBuilder<'tcx, ErrorGuaranteed> {
|
) -> 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 {
|
match self.0 {
|
||||||
hir::BorrowKind::Raw => ccx.tcx.sess.create_err(UnallowedMutableRefsRaw {
|
hir::BorrowKind::Raw => ccx.tcx.sess.create_err(UnallowedMutableRefsRaw {
|
||||||
span,
|
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_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_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 =
|
const_eval_unallowed_mutable_refs =
|
||||||
mutable references are not allowed in the final value of {$kind}s
|
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
|
allocations are not allowed in {$kind}s
|
||||||
.label = allocation not allowed in {$kind}s
|
.label = allocation not allowed in {$kind}s
|
||||||
.teach_note =
|
.teach_note =
|
||||||
The value of statics and constants must be known at compile time, and they live for the entire
|
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.
|
||||||
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 =
|
const_eval_unallowed_inline_asm =
|
||||||
inline assembly is not allowed in {$kind}s
|
inline assembly is not allowed in {$kind}s
|
||||||
|
|
|
@ -20,8 +20,8 @@ use rustc_errors::emitter::{Emitter, EmitterWriter, HumanReadableErrorType};
|
||||||
use rustc_errors::json::JsonEmitter;
|
use rustc_errors::json::JsonEmitter;
|
||||||
use rustc_errors::registry::Registry;
|
use rustc_errors::registry::Registry;
|
||||||
use rustc_errors::{
|
use rustc_errors::{
|
||||||
fallback_fluent_bundle, DiagnosticBuilder, DiagnosticId, DiagnosticMessage, EmissionGuarantee,
|
error_code, fallback_fluent_bundle, DiagnosticBuilder, DiagnosticId, DiagnosticMessage,
|
||||||
ErrorGuaranteed, FluentBundle, LazyFallbackBundle, MultiSpan,
|
EmissionGuarantee, ErrorGuaranteed, FluentBundle, LazyFallbackBundle, MultiSpan,
|
||||||
};
|
};
|
||||||
use rustc_macros::HashStable_Generic;
|
use rustc_macros::HashStable_Generic;
|
||||||
pub use rustc_span::def_id::StableCrateId;
|
pub use rustc_span::def_id::StableCrateId;
|
||||||
|
@ -467,6 +467,7 @@ impl Session {
|
||||||
feature: Symbol,
|
feature: Symbol,
|
||||||
) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
|
) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
|
||||||
let mut err = self.parse_sess.create_err(err);
|
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);
|
add_feature_diagnostics(&mut err, &self.parse_sess, feature);
|
||||||
err
|
err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue