1
Fork 0

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

View file

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

View file

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

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

View file

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