Skip to content

Commit

Permalink
Fixed failing tests (missing labels), added automatic error code in c…
Browse files Browse the repository at this point in the history
…reate_feature_err() builder
  • Loading branch information
nidnogg committed Aug 22, 2022
1 parent d1f14ee commit 4c82845
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 25 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_const_eval/src/const_eval/mod.rs
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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();
Expand Down
8 changes: 5 additions & 3 deletions compiler/rustc_const_eval/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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)]
Expand Down Expand Up @@ -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)]
Expand All @@ -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<()>,
Expand Down
17 changes: 4 additions & 13 deletions compiler/rustc_const_eval/src/transform/check_consts/ops.rs
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,10 @@ impl<'tcx> NonConstOp<'tcx> for FnCallUnstable {
) -> 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");
Expand Down Expand Up @@ -517,17 +519,6 @@ impl<'tcx> NonConstOp<'tcx> for MutBorrow {
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,
Expand Down
8 changes: 3 additions & 5 deletions compiler/rustc_error_messages/locales/en-US/const_eval.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions compiler/rustc_session/src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ use rustc_errors::emitter::{Emitter, EmitterWriter, HumanReadableErrorType};
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;
Expand Down Expand Up @@ -467,6 +467,7 @@ impl Session {
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
}
Expand Down

0 comments on commit 4c82845

Please sign in to comment.