Fixed failing tests (missing labels), added automatic error code in create_feature_err() builder

This commit is contained in:
nidnogg 2022-08-20 16:27:41 -03:00
parent d1f14ee1b0
commit 4c82845b3a
5 changed files with 17 additions and 25 deletions

View File

@ -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();

View File

@ -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<()>,

View File

@ -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,

View File

@ -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

View File

@ -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
}