diff options
| author | pierwill <pierwill@users.noreply.github.com> | 2022-10-02 16:02:57 -0500 |
|---|---|---|
| committer | pierwill <pierwill@users.noreply.github.com> | 2022-10-03 12:29:49 -0500 |
| commit | b9c0467e0c87c38009087eea65a79994d6bf1f26 (patch) | |
| tree | 08f79e64758d2044dde85a9a11e618b36f4d003b | |
| parent | f47e9af824a2c13873af6b898f2d65a36d029466 (diff) | |
| download | rust-b9c0467e0c87c38009087eea65a79994d6bf1f26.tar.gz rust-b9c0467e0c87c38009087eea65a79994d6bf1f26.zip | |
Add diagnostic struct for const eval error in `rustc_middle`
Co-authored-by: Michael Goulet <michael@errs.io>
| -rw-r--r-- | compiler/rustc_error_messages/locales/en-US/middle.ftl | 3 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/error.rs | 7 | ||||
| -rw-r--r-- | compiler/rustc_middle/src/ty/adt.rs | 8 |
3 files changed, 13 insertions, 5 deletions
diff --git a/compiler/rustc_error_messages/locales/en-US/middle.ftl b/compiler/rustc_error_messages/locales/en-US/middle.ftl index ed834886453..ca3c91ce24a 100644 --- a/compiler/rustc_error_messages/locales/en-US/middle.ftl +++ b/compiler/rustc_error_messages/locales/en-US/middle.ftl @@ -15,3 +15,6 @@ middle_previous_use_here = middle_limit_invalid = `limit` must be a non-negative integer .label = {$error_str} + +middle_const_eval_non_int = + constant evaluation of enum discriminant resulted in non-integer diff --git a/compiler/rustc_middle/src/error.rs b/compiler/rustc_middle/src/error.rs index a4ceb494569..e69cb546d15 100644 --- a/compiler/rustc_middle/src/error.rs +++ b/compiler/rustc_middle/src/error.rs @@ -48,3 +48,10 @@ pub struct LimitInvalid<'a> { pub value_span: Span, pub error_str: &'a str, } + +#[derive(Diagnostic)] +#[diag(middle::const_eval_non_int)] +pub struct ConstEvalNonIntError { + #[primary_span] + pub span: Span, +} diff --git a/compiler/rustc_middle/src/ty/adt.rs b/compiler/rustc_middle/src/ty/adt.rs index 74ce0b38ed2..3c485e26409 100644 --- a/compiler/rustc_middle/src/ty/adt.rs +++ b/compiler/rustc_middle/src/ty/adt.rs @@ -458,11 +458,9 @@ impl<'tcx> AdtDef<'tcx> { Some(Discr { val: b, ty }) } else { info!("invalid enum discriminant: {:#?}", val); - crate::mir::interpret::struct_error( - tcx.at(tcx.def_span(expr_did)), - "constant evaluation of enum discriminant resulted in non-integer", - ) - .emit(); + tcx.sess.emit_err(crate::error::ConstEvalNonIntError { + span: tcx.def_span(expr_did), + }); None } } |
