don't point at const usage site for resolution-time errors

also share the code that emits the actual error
This commit is contained in:
Ralf Jung 2023-09-11 23:09:11 +02:00
parent 89ac57db4d
commit 9ac8b363e3
47 changed files with 133 additions and 171 deletions

View File

@ -2,7 +2,6 @@
use rustc_ast::InlineAsmOptions; use rustc_ast::InlineAsmOptions;
use rustc_index::IndexVec; use rustc_index::IndexVec;
use rustc_middle::mir::interpret::ErrorHandled;
use rustc_middle::ty::adjustment::PointerCoercion; use rustc_middle::ty::adjustment::PointerCoercion;
use rustc_middle::ty::layout::FnAbiOf; use rustc_middle::ty::layout::FnAbiOf;
use rustc_middle::ty::print::with_no_trimmed_paths; use rustc_middle::ty::print::with_no_trimmed_paths;
@ -251,21 +250,15 @@ pub(crate) fn verify_func(
} }
fn codegen_fn_body(fx: &mut FunctionCx<'_, '_, '_>, start_block: Block) { fn codegen_fn_body(fx: &mut FunctionCx<'_, '_, '_>, start_block: Block) {
match fx.mir.post_mono_checks(fx.tcx, ty::ParamEnv::reveal_all(), |c| Ok(fx.monomorphize(c))) { if let Err(err) =
Ok(()) => {} fx.mir.post_mono_checks(fx.tcx, ty::ParamEnv::reveal_all(), |c| Ok(fx.monomorphize(c)))
Err(ErrorHandled::TooGeneric(span)) => { {
span_bug!(span, "codegen encountered polymorphic constant"); err.emit_err(fx.tcx);
} fx.bcx.append_block_params_for_function_params(fx.block_map[START_BLOCK]);
Err(ErrorHandled::Reported(info, span)) => { fx.bcx.switch_to_block(fx.block_map[START_BLOCK]);
if !info.is_tainted_by_errors() { // compilation should have been aborted
fx.tcx.sess.span_err(span, "erroneous constant encountered"); fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
} return;
fx.bcx.append_block_params_for_function_params(fx.block_map[START_BLOCK]);
fx.bcx.switch_to_block(fx.block_map[START_BLOCK]);
// compilation should have been aborted
fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
return;
}
} }
let arg_uninhabited = fx let arg_uninhabited = fx

View File

@ -19,8 +19,6 @@ codegen_ssa_copy_path_buf = unable to copy {$source_file} to {$output_path}: {$e
codegen_ssa_create_temp_dir = couldn't create a temp dir: {$error} codegen_ssa_create_temp_dir = couldn't create a temp dir: {$error}
codegen_ssa_erroneous_constant = erroneous constant encountered
codegen_ssa_error_creating_remark_dir = failed to create remark directory: {$error} codegen_ssa_error_creating_remark_dir = failed to create remark directory: {$error}
codegen_ssa_expected_coverage_symbol = expected `coverage(off)` or `coverage(on)` codegen_ssa_expected_coverage_symbol = expected `coverage(off)` or `coverage(on)`
@ -174,8 +172,6 @@ codegen_ssa_no_natvis_directory = error enumerating natvis directory: {$error}
codegen_ssa_option_gcc_only = option `-Z gcc-ld` is used even though linker flavor is not gcc codegen_ssa_option_gcc_only = option `-Z gcc-ld` is used even though linker flavor is not gcc
codegen_ssa_polymorphic_constant_too_generic = codegen encountered polymorphic constant: TooGeneric
codegen_ssa_processing_dymutil_failed = processing debug info with `dsymutil` failed: {$status} codegen_ssa_processing_dymutil_failed = processing debug info with `dsymutil` failed: {$status}
.note = {$output} .note = {$output}

View File

@ -595,20 +595,6 @@ pub struct InvalidWindowsSubsystem {
pub subsystem: Symbol, pub subsystem: Symbol,
} }
#[derive(Diagnostic)]
#[diag(codegen_ssa_erroneous_constant)]
pub struct ErroneousConstant {
#[primary_span]
pub span: Span,
}
#[derive(Diagnostic)]
#[diag(codegen_ssa_polymorphic_constant_too_generic)]
pub struct PolymorphicConstantTooGeneric {
#[primary_span]
pub span: Span,
}
#[derive(Diagnostic)] #[derive(Diagnostic)]
#[diag(codegen_ssa_shuffle_indices_evaluation)] #[diag(codegen_ssa_shuffle_indices_evaluation)]
pub struct ShuffleIndicesEvaluation { pub struct ShuffleIndicesEvaluation {

View File

@ -1,10 +1,8 @@
use crate::base; use crate::base;
use crate::errors;
use crate::traits::*; use crate::traits::*;
use rustc_index::bit_set::BitSet; use rustc_index::bit_set::BitSet;
use rustc_index::IndexVec; use rustc_index::IndexVec;
use rustc_middle::mir; use rustc_middle::mir;
use rustc_middle::mir::interpret::ErrorHandled;
use rustc_middle::mir::traversal; use rustc_middle::mir::traversal;
use rustc_middle::mir::UnwindTerminateReason; use rustc_middle::mir::UnwindTerminateReason;
use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt, TyAndLayout}; use rustc_middle::ty::layout::{FnAbiOf, HasTyCtxt, TyAndLayout};
@ -214,20 +212,14 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
fx.per_local_var_debug_info = fx.compute_per_local_var_debug_info(&mut start_bx); fx.per_local_var_debug_info = fx.compute_per_local_var_debug_info(&mut start_bx);
// Rust post-monomorphization checks; we later rely on them. // Rust post-monomorphization checks; we later rely on them.
match mir.post_mono_checks(cx.tcx(), ty::ParamEnv::reveal_all(), |c| Ok(fx.monomorphize(c))) { if let Err(err) =
Ok(()) => {} mir.post_mono_checks(cx.tcx(), ty::ParamEnv::reveal_all(), |c| Ok(fx.monomorphize(c)))
Err(ErrorHandled::TooGeneric(span)) => { {
cx.tcx().sess.diagnostic().emit_bug(errors::PolymorphicConstantTooGeneric { span }); err.emit_err(cx.tcx());
} // This IR shouldn't ever be emitted, but let's try to guard against any of this code
Err(ErrorHandled::Reported(info, span)) => { // ever running.
if !info.is_tainted_by_errors() { start_bx.abort();
cx.tcx().sess.emit_err(errors::ErroneousConstant { span }); return;
}
// This IR shouldn't ever be emitted, but let's try to guard against any of this code
// ever running.
start_bx.abort();
return;
}
} }
let memory_locals = analyze::non_ssa_locals(&fx); let memory_locals = analyze::non_ssa_locals(&fx);

View File

@ -83,9 +83,6 @@ const_eval_dyn_call_vtable_mismatch =
const_eval_dyn_star_call_vtable_mismatch = const_eval_dyn_star_call_vtable_mismatch =
`dyn*` call on a pointer whose vtable does not match its type `dyn*` call on a pointer whose vtable does not match its type
const_eval_erroneous_constant =
erroneous constant used
const_eval_error = {$error_kind -> const_eval_error = {$error_kind ->
[static] could not evaluate static initializer [static] could not evaluate static initializer
[const] evaluation of constant value failed [const] evaluation of constant value failed

View File

@ -239,13 +239,6 @@ pub struct LongRunningWarn {
pub item_span: Span, pub item_span: Span,
} }
#[derive(Diagnostic)]
#[diag(const_eval_erroneous_constant)]
pub(crate) struct ErroneousConstUsed {
#[primary_span]
pub span: Span,
}
#[derive(Subdiagnostic)] #[derive(Subdiagnostic)]
#[note(const_eval_non_const_impl)] #[note(const_eval_non_const_impl)]
pub(crate) struct NonConstImplNote { pub(crate) struct NonConstImplNote {

View File

@ -24,7 +24,7 @@ use super::{
MemPlaceMeta, Memory, MemoryKind, OpTy, Operand, Place, PlaceTy, Pointer, PointerArithmetic, MemPlaceMeta, Memory, MemoryKind, OpTy, Operand, Place, PlaceTy, Pointer, PointerArithmetic,
Projectable, Provenance, Scalar, StackPopJump, Projectable, Provenance, Scalar, StackPopJump,
}; };
use crate::errors::{self, ErroneousConstUsed}; use crate::errors;
use crate::util; use crate::util;
use crate::{fluent_generated as fluent, ReportErrorExt}; use crate::{fluent_generated as fluent, ReportErrorExt};
@ -1063,17 +1063,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
) -> Result<T, ErrorHandled> { ) -> Result<T, ErrorHandled> {
// Use a precise span for better cycle errors. // Use a precise span for better cycle errors.
query(self.tcx.at(span.unwrap_or_else(|| self.cur_span()))).map_err(|err| { query(self.tcx.at(span.unwrap_or_else(|| self.cur_span()))).map_err(|err| {
match err { err.emit_note(*self.tcx);
ErrorHandled::Reported(err, reported_span) => {
// We trust the provided span more than the one that came out of the query.
let span = span.unwrap_or(reported_span);
if !err.is_tainted_by_errors() {
// To make it easier to figure out where this error comes from, also add a note at the current location.
self.tcx.sess.emit_note(ErroneousConstUsed { span });
}
}
ErrorHandled::TooGeneric(_) => {}
}
err err
}) })
} }

View File

@ -52,6 +52,8 @@ middle_drop_check_overflow =
overflow while adding drop-check rules for {$ty} overflow while adding drop-check rules for {$ty}
.note = overflowed on {$overflow_ty} .note = overflowed on {$overflow_ty}
middle_erroneous_constant = erroneous constant encountered
middle_layout_references_error = middle_layout_references_error =
the type has an unknown layout the type has an unknown layout

View File

@ -144,5 +144,12 @@ pub struct UnsupportedFnAbi {
pub abi: &'static str, pub abi: &'static str,
} }
#[derive(Diagnostic)]
#[diag(middle_erroneous_constant)]
pub struct ErroneousConstant {
#[primary_span]
pub span: Span,
}
/// Used by `rustc_const_eval` /// Used by `rustc_const_eval`
pub use crate::fluent_generated::middle_adjust_for_foreign_abi_error; pub use crate::fluent_generated::middle_adjust_for_foreign_abi_error;

View File

@ -1,8 +1,9 @@
use super::{AllocId, AllocRange, ConstAlloc, Pointer, Scalar}; use super::{AllocId, AllocRange, ConstAlloc, Pointer, Scalar};
use crate::error;
use crate::mir::interpret::ConstValue; use crate::mir::interpret::ConstValue;
use crate::query::TyCtxtAt; use crate::query::TyCtxtAt;
use crate::ty::{layout, tls, Ty, ValTree}; use crate::ty::{layout, tls, Ty, TyCtxt, ValTree};
use rustc_data_structures::sync::Lock; use rustc_data_structures::sync::Lock;
use rustc_errors::{ use rustc_errors::{
@ -41,6 +42,32 @@ impl ErrorHandled {
ErrorHandled::TooGeneric(_span) => ErrorHandled::TooGeneric(span), ErrorHandled::TooGeneric(_span) => ErrorHandled::TooGeneric(span),
} }
} }
pub fn emit_err(&self, tcx: TyCtxt<'_>) -> ErrorGuaranteed {
match self {
&ErrorHandled::Reported(err, span) => {
if !err.is_tainted_by_errors && !span.is_dummy() {
tcx.sess.emit_err(error::ErroneousConstant { span });
}
err.error
}
&ErrorHandled::TooGeneric(span) => tcx.sess.delay_span_bug(
span,
"encountered TooGeneric error when monomorphic data was expected",
),
}
}
pub fn emit_note(&self, tcx: TyCtxt<'_>) {
match self {
&ErrorHandled::Reported(err, span) => {
if !err.is_tainted_by_errors && !span.is_dummy() {
tcx.sess.emit_note(error::ErroneousConstant { span });
}
}
&ErrorHandled::TooGeneric(_) => {}
}
}
} }
#[derive(Debug, Copy, Clone, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)] #[derive(Debug, Copy, Clone, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
@ -54,12 +81,6 @@ impl ReportedErrorInfo {
pub fn tainted_by_errors(error: ErrorGuaranteed) -> ReportedErrorInfo { pub fn tainted_by_errors(error: ErrorGuaranteed) -> ReportedErrorInfo {
ReportedErrorInfo { is_tainted_by_errors: true, error } ReportedErrorInfo { is_tainted_by_errors: true, error }
} }
/// Returns true if evaluation failed because MIR was tainted by errors.
#[inline]
pub fn is_tainted_by_errors(self) -> bool {
self.is_tainted_by_errors
}
} }
impl From<ErrorGuaranteed> for ReportedErrorInfo { impl From<ErrorGuaranteed> for ReportedErrorInfo {

View File

@ -61,8 +61,10 @@ impl<'tcx> TyCtxt<'tcx> {
let cid = GlobalId { instance, promoted: ct.promoted }; let cid = GlobalId { instance, promoted: ct.promoted };
self.const_eval_global_id(param_env, cid, span) self.const_eval_global_id(param_env, cid, span)
} }
Ok(None) => Err(ErrorHandled::TooGeneric(span.unwrap_or(DUMMY_SP))), // For errors during resolution, we deliberately do not point at the usage site of the constant,
Err(err) => Err(ErrorHandled::Reported(err.into(), span.unwrap_or(DUMMY_SP))), // since for these errors the place the constant is used shouldn't matter.
Ok(None) => Err(ErrorHandled::TooGeneric(DUMMY_SP)),
Err(err) => Err(ErrorHandled::Reported(err.into(), DUMMY_SP)),
} }
} }
@ -117,8 +119,10 @@ impl<'tcx> TyCtxt<'tcx> {
} }
}) })
} }
Ok(None) => Err(ErrorHandled::TooGeneric(span.unwrap_or(DUMMY_SP))), // For errors during resolution, we deliberately do not point at the usage site of the constant,
Err(err) => Err(ErrorHandled::Reported(err.into(), span.unwrap_or(DUMMY_SP))), // since for these errors the place the constant is used shouldn't matter.
Ok(None) => Err(ErrorHandled::TooGeneric(DUMMY_SP)),
Err(err) => Err(ErrorHandled::Reported(err.into(), DUMMY_SP)),
} }
} }
@ -143,7 +147,8 @@ impl<'tcx> TyCtxt<'tcx> {
// improve caching of queries. // improve caching of queries.
let inputs = self.erase_regions(param_env.and(cid)); let inputs = self.erase_regions(param_env.and(cid));
if let Some(span) = span { if let Some(span) = span {
self.at(span).eval_to_const_value_raw(inputs) // The query doesn't know where it is being invoked, so we need to fix the span.
self.at(span).eval_to_const_value_raw(inputs).map_err(|e| e.with_span(span))
} else { } else {
self.eval_to_const_value_raw(inputs) self.eval_to_const_value_raw(inputs)
} }
@ -162,7 +167,8 @@ impl<'tcx> TyCtxt<'tcx> {
let inputs = self.erase_regions(param_env.and(cid)); let inputs = self.erase_regions(param_env.and(cid));
debug!(?inputs); debug!(?inputs);
if let Some(span) = span { if let Some(span) = span {
self.at(span).eval_to_valtree(inputs) // The query doesn't know where it is being invoked, so we need to fix the span.
self.at(span).eval_to_valtree(inputs).map_err(|e| e.with_span(span))
} else { } else {
self.eval_to_valtree(inputs) self.eval_to_valtree(inputs)
} }

View File

@ -588,10 +588,7 @@ impl<'tcx> Body<'tcx> {
// the body successfully evaluate. // the body successfully evaluate.
for &const_ in &self.required_consts { for &const_ in &self.required_consts {
let c = normalize_const(const_.literal)?; let c = normalize_const(const_.literal)?;
c.eval(tcx, param_env, Some(const_.span)).map_err(|e| { c.eval(tcx, param_env, Some(const_.span))?;
// The query results don't always have the span we want.
e.with_span(const_.span)
})?;
} }
Ok(()) Ok(())

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `main::{constant#3}` failed
LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true. LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4 | ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
note: erroneous constant used note: erroneous constant encountered
--> $DIR/test.rs:37:5 --> $DIR/test.rs:37:5
| |
LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true. LL | const { &ARR[idx4()] }; // Ok, should not produce stderr, since `suppress-restriction-lint-in-const` is set true.

View File

@ -24,7 +24,7 @@ error[E0080]: evaluation of `main::{constant#3}` failed
LL | const { &ARR[idx4()] }; LL | const { &ARR[idx4()] };
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4 | ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
note: erroneous constant used note: erroneous constant encountered
--> $DIR/indexing_slicing_index.rs:48:5 --> $DIR/indexing_slicing_index.rs:48:5
| |
LL | const { &ARR[idx4()] }; LL | const { &ARR[idx4()] };

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | ptr.read(); LL | ptr.read();
| ^^^^^^^^^^ accessing memory with alignment ALIGN, but alignment ALIGN is required | ^^^^^^^^^^ accessing memory with alignment ALIGN, but alignment ALIGN is required
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-ub-checks.rs:LL:CC --> $DIR/const-ub-checks.rs:LL:CC
| |
LL | let _x = UNALIGNED_READ; LL | let _x = UNALIGNED_READ;

View File

@ -6,7 +6,7 @@ LL | const VOID: ! = panic!();
| |
= note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/erroneous_const.rs:LL:CC --> $DIR/erroneous_const.rs:LL:CC
| |
LL | let _ = PrintName::<T>::VOID; LL | let _ = PrintName::<T>::VOID;

View File

@ -4,13 +4,13 @@ error[E0080]: evaluation of constant value failed
LL | const FOO: u32 = [X - Y, Y - X][(X < Y) as usize]; LL | const FOO: u32 = [X - Y, Y - X][(X < Y) as usize];
| ^^^^^ attempt to compute `5_u32 - 6_u32`, which would overflow | ^^^^^ attempt to compute `5_u32 - 6_u32`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/erroneous_const2.rs:LL:CC --> $DIR/erroneous_const2.rs:LL:CC
| |
LL | println!("{}", FOO); LL | println!("{}", FOO);
| ^^^ | ^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/erroneous_const2.rs:LL:CC --> $DIR/erroneous_const2.rs:LL:CC
| |
LL | println!("{}", FOO); LL | println!("{}", FOO);

View File

@ -4,13 +4,13 @@ error[E0080]: evaluation of `<() as Tr>::B` failed
LL | const B: u8 = Self::A + 1; LL | const B: u8 = Self::A + 1;
| ^^^^^^^^^^^ attempt to compute `u8::MAX + 1_u8`, which would overflow | ^^^^^^^^^^^ attempt to compute `u8::MAX + 1_u8`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/defaults-not-assumed-fail.rs:33:16 --> $DIR/defaults-not-assumed-fail.rs:33:16
| |
LL | assert_eq!(<() as Tr>::B, 0); // causes the error above LL | assert_eq!(<() as Tr>::B, 0); // causes the error above
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/defaults-not-assumed-fail.rs:33:5 --> $DIR/defaults-not-assumed-fail.rs:33:5
| |
LL | assert_eq!(<() as Tr>::B, 0); // causes the error above LL | assert_eq!(<() as Tr>::B, 0); // causes the error above
@ -18,7 +18,7 @@ LL | assert_eq!(<() as Tr>::B, 0); // causes the error above
| |
= note: this note originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this note originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/defaults-not-assumed-fail.rs:33:5 --> $DIR/defaults-not-assumed-fail.rs:33:5
| |
LL | assert_eq!(<() as Tr>::B, 0); // causes the error above LL | assert_eq!(<() as Tr>::B, 0); // causes the error above

View File

@ -16,7 +16,7 @@ LL | const _CONST: &[u8] = &f(&[], |_| {});
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-81899.rs:4:23 --> $DIR/issue-81899.rs:4:23
| |
LL | const _CONST: &[u8] = &f(&[], |_| {}); LL | const _CONST: &[u8] = &f(&[], |_| {});

View File

@ -16,7 +16,7 @@ LL | const _CONST: &() = &f(&|_| {});
| ^^^^^^^^^^ | ^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-88434-minimal-example.rs:3:21 --> $DIR/issue-88434-minimal-example.rs:3:21
| |
LL | const _CONST: &() = &f(&|_| {}); LL | const _CONST: &() = &f(&|_| {});

View File

@ -16,7 +16,7 @@ LL | const _CONST: &[u8] = &f(&[], |_| {});
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-88434-removal-index-should-be-less.rs:3:23 --> $DIR/issue-88434-removal-index-should-be-less.rs:3:23
| |
LL | const _CONST: &[u8] = &f(&[], |_| {}); LL | const _CONST: &[u8] = &f(&[], |_| {});

View File

@ -1,9 +1,3 @@
note: erroneous constant used
--> $DIR/issue-98629.rs:13:10
|
LL | [(); <i32 as Trait>::N]:,
| ^^^^^^^^^^^^^^^^^
error[E0046]: not all trait items implemented, missing: `N` error[E0046]: not all trait items implemented, missing: `N`
--> $DIR/issue-98629.rs:8:1 --> $DIR/issue-98629.rs:8:1
| |

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `S::<i32>::FOO` failed
LL | const FOO: u8 = [5u8][1]; LL | const FOO: u8 = [5u8][1];
| ^^^^^^^^ index out of bounds: the length is 1 but the index is 1 | ^^^^^^^^ index out of bounds: the length is 1 but the index is 1
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-late.rs:19:16 --> $DIR/const-err-late.rs:19:16
| |
LL | black_box((S::<i32>::FOO, S::<u32>::FOO)); LL | black_box((S::<i32>::FOO, S::<u32>::FOO));
@ -16,13 +16,13 @@ error[E0080]: evaluation of `S::<u32>::FOO` failed
LL | const FOO: u8 = [5u8][1]; LL | const FOO: u8 = [5u8][1];
| ^^^^^^^^ index out of bounds: the length is 1 but the index is 1 | ^^^^^^^^ index out of bounds: the length is 1 but the index is 1
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-late.rs:19:31 --> $DIR/const-err-late.rs:19:31
| |
LL | black_box((S::<i32>::FOO, S::<u32>::FOO)); LL | black_box((S::<i32>::FOO, S::<u32>::FOO));
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-late.rs:19:16 --> $DIR/const-err-late.rs:19:16
| |
LL | black_box((S::<i32>::FOO, S::<u32>::FOO)); LL | black_box((S::<i32>::FOO, S::<u32>::FOO));

View File

@ -4,19 +4,19 @@ error[E0080]: evaluation of constant value failed
LL | pub const A: i8 = -i8::MIN; LL | pub const A: i8 = -i8::MIN;
| ^^^^^^^^ attempt to negate `i8::MIN`, which would overflow | ^^^^^^^^ attempt to negate `i8::MIN`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-multi.rs:3:19 --> $DIR/const-err-multi.rs:3:19
| |
LL | pub const B: i8 = A; LL | pub const B: i8 = A;
| ^ | ^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-multi.rs:5:19 --> $DIR/const-err-multi.rs:5:19
| |
LL | pub const C: u8 = A as u8; LL | pub const C: u8 = A as u8;
| ^ | ^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-err-multi.rs:7:24 --> $DIR/const-err-multi.rs:7:24
| |
LL | pub const D: i8 = 50 - A; LL | pub const D: i8 = 50 - A;

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `PrintName::<i32>::VOID` failed
LL | const VOID: () = [()][2]; LL | const VOID: () = [()][2];
| ^^^^^^^ index out of bounds: the length is 1 but the index is 2 | ^^^^^^^ index out of bounds: the length is 1 but the index is 2
note: erroneous constant used note: erroneous constant encountered
--> $DIR/erroneous-const.rs:13:13 --> $DIR/erroneous-const.rs:13:13
| |
LL | PrintName::<T>::VOID; LL | PrintName::<T>::VOID;

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `PrintName::<i32>::VOID` failed
LL | const VOID: () = [()][2]; LL | const VOID: () = [()][2];
| ^^^^^^^ index out of bounds: the length is 1 but the index is 2 | ^^^^^^^ index out of bounds: the length is 1 but the index is 2
note: erroneous constant used note: erroneous constant encountered
--> $DIR/erroneous-const2.rs:13:9 --> $DIR/erroneous-const2.rs:13:9
| |
LL | PrintName::<i32>::VOID; LL | PrintName::<i32>::VOID;

View File

@ -4,13 +4,13 @@ error[E0080]: evaluation of `<Bar<u16, u8> as Foo>::AMT` failed
LL | const AMT: usize = [A::AMT][(A::AMT > B::AMT) as usize]; LL | const AMT: usize = [A::AMT][(A::AMT > B::AMT) as usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ index out of bounds: the length is 1 but the index is 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ index out of bounds: the length is 1 but the index is 1
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-44578.rs:25:20 --> $DIR/issue-44578.rs:25:20
| |
LL | println!("{}", <Bar<u16, u8> as Foo>::AMT); LL | println!("{}", <Bar<u16, u8> as Foo>::AMT);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-44578.rs:25:20 --> $DIR/issue-44578.rs:25:20
| |
LL | println!("{}", <Bar<u16, u8> as Foo>::AMT); LL | println!("{}", <Bar<u16, u8> as Foo>::AMT);
@ -18,7 +18,7 @@ LL | println!("{}", <Bar<u16, u8> as Foo>::AMT);
| |
= note: this note originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this note originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-44578.rs:25:20 --> $DIR/issue-44578.rs:25:20
| |
LL | println!("{}", <Bar<u16, u8> as Foo>::AMT); LL | println!("{}", <Bar<u16, u8> as Foo>::AMT);

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `<A<()> as Foo<()>>::BAR` failed
LL | const BAR: usize = [5, 6, 7][T::BOO]; LL | const BAR: usize = [5, 6, 7][T::BOO];
| ^^^^^^^^^^^^^^^^^ index out of bounds: the length is 3 but the index is 42 | ^^^^^^^^^^^^^^^^^ index out of bounds: the length is 3 but the index is 42
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-50814-2.rs:18:6 --> $DIR/issue-50814-2.rs:18:6
| |
LL | &<A<T> as Foo<T>>::BAR LL | &<A<T> as Foo<T>>::BAR

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of `<Sum<U8, U8> as Unsigned>::MAX` failed
LL | const MAX: u8 = A::MAX + B::MAX; LL | const MAX: u8 = A::MAX + B::MAX;
| ^^^^^^^^^^^^^^^ attempt to compute `u8::MAX + u8::MAX`, which would overflow | ^^^^^^^^^^^^^^^ attempt to compute `u8::MAX + u8::MAX`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-50814.rs:20:6 --> $DIR/issue-50814.rs:20:6
| |
LL | &Sum::<U8, U8>::MAX LL | &Sum::<U8, U8>::MAX

View File

@ -11,5 +11,5 @@ impl PrintName {
} }
fn main() { fn main() {
let _ = PrintName::VOID; //~ erroneous constant used let _ = PrintName::VOID; //~ erroneous constant encountered
} }

View File

@ -6,13 +6,13 @@ LL | const VOID: ! = panic!();
| |
= note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2015` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/panic-assoc-never-type.rs:14:13 --> $DIR/panic-assoc-never-type.rs:14:13
| |
LL | let _ = PrintName::VOID; LL | let _ = PrintName::VOID;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/panic-assoc-never-type.rs:14:13 --> $DIR/panic-assoc-never-type.rs:14:13
| |
LL | let _ = PrintName::VOID; LL | let _ = PrintName::VOID;

View File

@ -341,7 +341,7 @@ LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
╾ALLOC_ID╼ │ ╾──╼ ╾ALLOC_ID╼ │ ╾──╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:160:40 --> $DIR/raw-bytes.rs:160:40
| |
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }]; LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
@ -358,7 +358,7 @@ LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3
╾ALLOC_ID╼ │ ╾──╼ ╾ALLOC_ID╼ │ ╾──╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:166:42 --> $DIR/raw-bytes.rs:166:42
| |
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]); LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
@ -375,7 +375,7 @@ LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::tran
╾ALLOC_ID╼ │ ╾──╼ ╾ALLOC_ID╼ │ ╾──╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:170:42 --> $DIR/raw-bytes.rs:170:42
| |
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]); LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);

View File

@ -341,7 +341,7 @@ LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
╾ALLOC_ID╼ │ ╾──────╼ ╾ALLOC_ID╼ │ ╾──────╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:160:40 --> $DIR/raw-bytes.rs:160:40
| |
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }]; LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
@ -358,7 +358,7 @@ LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3
╾ALLOC_ID╼ │ ╾──────╼ ╾ALLOC_ID╼ │ ╾──────╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:166:42 --> $DIR/raw-bytes.rs:166:42
| |
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]); LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
@ -375,7 +375,7 @@ LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::tran
╾ALLOC_ID╼ │ ╾──────╼ ╾ALLOC_ID╼ │ ╾──────╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/raw-bytes.rs:170:42 --> $DIR/raw-bytes.rs:170:42
| |
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]); LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);

View File

@ -60,7 +60,7 @@ LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
= help: this code performed an operation that depends on the underlying bytes representing a pointer = help: this code performed an operation that depends on the underlying bytes representing a pointer
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
note: erroneous constant used note: erroneous constant encountered
--> $DIR/ub-ref-ptr.rs:36:38 --> $DIR/ub-ref-ptr.rs:36:38
| |
LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }]; LL | const REF_AS_USIZE_SLICE: &[usize] = &[unsafe { mem::transmute(&0) }];
@ -75,7 +75,7 @@ LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[us
= help: this code performed an operation that depends on the underlying bytes representing a pointer = help: this code performed an operation that depends on the underlying bytes representing a pointer
= help: the absolute address of a pointer is not known at compile-time, so such operations are not supported = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported
note: erroneous constant used note: erroneous constant encountered
--> $DIR/ub-ref-ptr.rs:39:85 --> $DIR/ub-ref-ptr.rs:39:85
| |
LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) }; LL | const REF_AS_USIZE_BOX_SLICE: Box<[usize]> = unsafe { mem::transmute::<&[usize], _>(&[mem::transmute(&0)]) };

View File

@ -139,7 +139,7 @@ LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
HEX_DUMP HEX_DUMP
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/ub-wide-ptr.rs:85:40 --> $DIR/ub-wide-ptr.rs:85:40
| |
LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }]; LL | const SLICE_CONTENT_INVALID: &[bool] = &[unsafe { mem::transmute(3u8) }];
@ -156,7 +156,7 @@ LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3
HEX_DUMP HEX_DUMP
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/ub-wide-ptr.rs:92:42 --> $DIR/ub-wide-ptr.rs:92:42
| |
LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]); LL | const MYSLICE_PREFIX_BAD: &MySliceBool = &MySlice(unsafe { mem::transmute(3u8) }, [false]);
@ -173,7 +173,7 @@ LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::tran
HEX_DUMP HEX_DUMP
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/ub-wide-ptr.rs:96:42 --> $DIR/ub-wide-ptr.rs:96:42
| |
LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]); LL | const MYSLICE_SUFFIX_BAD: &MySliceBool = &MySlice(true, [unsafe { mem::transmute(3u8) }]);

View File

@ -4,13 +4,13 @@ error[E0080]: evaluation of constant value failed
LL | const FIELD3: Field3 = unsafe { UNION.field3 }; LL | const FIELD3: Field3 = unsafe { UNION.field3 };
| ^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory | ^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory
note: erroneous constant used note: erroneous constant encountered
--> $DIR/union-const-eval-field.rs:31:5 --> $DIR/union-const-eval-field.rs:31:5
| |
LL | FIELD3 LL | FIELD3
| ^^^^^^ | ^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/union-const-eval-field.rs:31:5 --> $DIR/union-const-eval-field.rs:31:5
| |
LL | FIELD3 LL | FIELD3

View File

@ -30,25 +30,25 @@ LL | const MASKED_NAN2: u32 = f32::NAN.to_bits() ^ 0x0055_5555;
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:35:34 --> $DIR/const-float-bits-reject-conv.rs:35:34
| |
LL | const_assert!(f32::from_bits(MASKED_NAN1).is_nan()); LL | const_assert!(f32::from_bits(MASKED_NAN1).is_nan());
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:36:34 --> $DIR/const-float-bits-reject-conv.rs:36:34
| |
LL | const_assert!(f32::from_bits(MASKED_NAN1).is_nan()); LL | const_assert!(f32::from_bits(MASKED_NAN1).is_nan());
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:42:34 --> $DIR/const-float-bits-reject-conv.rs:42:34
| |
LL | const_assert!(f32::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1); LL | const_assert!(f32::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1);
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:43:34 --> $DIR/const-float-bits-reject-conv.rs:43:34
| |
LL | const_assert!(f32::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2); LL | const_assert!(f32::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);
@ -86,25 +86,25 @@ LL | const MASKED_NAN2: u64 = f64::NAN.to_bits() ^ 0x0005_5555_5555_5555;
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
= note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:57:34 --> $DIR/const-float-bits-reject-conv.rs:57:34
| |
LL | const_assert!(f64::from_bits(MASKED_NAN1).is_nan()); LL | const_assert!(f64::from_bits(MASKED_NAN1).is_nan());
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:58:34 --> $DIR/const-float-bits-reject-conv.rs:58:34
| |
LL | const_assert!(f64::from_bits(MASKED_NAN1).is_nan()); LL | const_assert!(f64::from_bits(MASKED_NAN1).is_nan());
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:61:34 --> $DIR/const-float-bits-reject-conv.rs:61:34
| |
LL | const_assert!(f64::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1); LL | const_assert!(f64::from_bits(MASKED_NAN1).to_bits(), MASKED_NAN1);
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-float-bits-reject-conv.rs:62:34 --> $DIR/const-float-bits-reject-conv.rs:62:34
| |
LL | const_assert!(f64::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2); LL | const_assert!(f64::from_bits(MASKED_NAN2).to_bits(), MASKED_NAN2);

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | const LEN: usize = ONE - TWO; LL | const LEN: usize = ONE - TWO;
| ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow | ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-len-underflow-separate-spans.rs:14:17 --> $DIR/const-len-underflow-separate-spans.rs:14:17
| |
LL | let a: [i8; LEN] = unimplemented!(); LL | let a: [i8; LEN] = unimplemented!();

View File

@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed
LL | const LEN: usize = ONE - TWO; LL | const LEN: usize = ONE - TWO;
| ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow | ^^^^^^^^^ attempt to compute `1_usize - 2_usize`, which would overflow
note: erroneous constant used note: erroneous constant encountered
--> $DIR/const-len-underflow-separate-spans.rs:14:17 --> $DIR/const-len-underflow-separate-spans.rs:14:17
| |
LL | let a: [i8; LEN] = unimplemented!(); LL | let a: [i8; LEN] = unimplemented!();

View File

@ -9,13 +9,13 @@ LL | fn main() {
╾─alloc7──╼ │ ╾──╼ ╾─alloc7──╼ │ ╾──╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/invalid-union.rs:43:25 --> $DIR/invalid-union.rs:43:25
| |
LL | let _: &'static _ = &C; LL | let _: &'static _ = &C;
| ^^ | ^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/invalid-union.rs:43:25 --> $DIR/invalid-union.rs:43:25
| |
LL | let _: &'static _ = &C; LL | let _: &'static _ = &C;

View File

@ -9,13 +9,13 @@ LL | fn main() {
╾───────alloc7────────╼ │ ╾──────╼ ╾───────alloc7────────╼ │ ╾──────╼
} }
note: erroneous constant used note: erroneous constant encountered
--> $DIR/invalid-union.rs:43:25 --> $DIR/invalid-union.rs:43:25
| |
LL | let _: &'static _ = &C; LL | let _: &'static _ = &C;
| ^^ | ^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/invalid-union.rs:43:25 --> $DIR/invalid-union.rs:43:25
| |
LL | let _: &'static _ = &C; LL | let _: &'static _ = &C;

View File

@ -10,12 +10,6 @@ note: type in trait
LL | const VALUE: usize; LL | const VALUE: usize;
| ^^^^^ | ^^^^^
note: erroneous constant used
--> $DIR/issue-70942-trait-vs-impl-mismatch.rs:13:18
|
LL | let _: [i32; Zero::VALUE] = [];
| ^^^^^^^^^^^
error: aborting due to previous error error: aborting due to previous error
For more information about this error, try `rustc --explain E0326`. For more information about this error, try `rustc --explain E0326`.

View File

@ -13,13 +13,13 @@ note: inside `<String as Bar<Vec<u32>, String>>::F`
LL | const F: u32 = (U::X, 42).1; LL | const F: u32 = (U::X, 42).1;
| ^ | ^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/assoc_const.rs:29:13 --> $DIR/assoc_const.rs:29:13
| |
LL | let y = <String as Bar<Vec<u32>, String>>::F; LL | let y = <String as Bar<Vec<u32>, String>>::F;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/assoc_const.rs:29:13 --> $DIR/assoc_const.rs:29:13
| |
LL | let y = <String as Bar<Vec<u32>, String>>::F; LL | let y = <String as Bar<Vec<u32>, String>>::F;

View File

@ -4,13 +4,13 @@ error[E0080]: evaluation of `<std::string::String as Bar<std::string::String>>::
LL | const F: u32 = 100 / U::X; LL | const F: u32 = 100 / U::X;
| ^^^^^^^^^^ attempt to divide `100_u32` by zero | ^^^^^^^^^^ attempt to divide `100_u32` by zero
note: erroneous constant used note: erroneous constant encountered
--> $DIR/assoc_const_2.rs:27:13 --> $DIR/assoc_const_2.rs:27:13
| |
LL | let y = <String as Bar<String>>::F; LL | let y = <String as Bar<String>>::F;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/assoc_const_2.rs:27:13 --> $DIR/assoc_const_2.rs:27:13
| |
LL | let y = <String as Bar<String>>::F; LL | let y = <String as Bar<String>>::F;

View File

@ -645,13 +645,13 @@ note: inside `<i32 as Const>::CONSTANT`
LL | const CONSTANT: i32 = unsafe { fake_type() }; LL | const CONSTANT: i32 = unsafe { fake_type() };
| ^^^^^^^^^^^ | ^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/uninhabited-const-issue-61744.rs:18:10 --> $DIR/uninhabited-const-issue-61744.rs:18:10
| |
LL | dbg!(i32::CONSTANT); LL | dbg!(i32::CONSTANT);
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/uninhabited-const-issue-61744.rs:18:10 --> $DIR/uninhabited-const-issue-61744.rs:18:10
| |
LL | dbg!(i32::CONSTANT); LL | dbg!(i32::CONSTANT);

View File

@ -13,13 +13,7 @@ LL | type MyA: TraitA;
LL | impl TraitB for B { LL | impl TraitB for B {
| ^^^^^^^^^^^^^^^^^ missing `MyA` in implementation | ^^^^^^^^^^^^^^^^^ missing `MyA` in implementation
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-69602-type-err-during-codegen-ice.rs:12:26
|
LL | const VALUE: usize = Self::MyA::VALUE;
| ^^^^^^^^^^^^^^^^
note: erroneous constant used
--> $DIR/issue-69602-type-err-during-codegen-ice.rs:21:17 --> $DIR/issue-69602-type-err-during-codegen-ice.rs:21:17
| |
LL | let _ = [0; B::VALUE]; LL | let _ = [0; B::VALUE];

View File

@ -11,7 +11,7 @@ note: inside `main`
LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>()); LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-55878.rs:7:26 --> $DIR/issue-55878.rs:7:26
| |
LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>()); LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>());
@ -19,7 +19,7 @@ LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>());
| |
= note: this note originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this note originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info)
note: erroneous constant used note: erroneous constant encountered
--> $DIR/issue-55878.rs:7:26 --> $DIR/issue-55878.rs:7:26
| |
LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>()); LL | println!("Size: {}", std::mem::size_of::<[u8; u64::MAX as usize]>());