Rollup merge of #102486 - pierwill:middle-const-eval-err, r=compiler-errors

Add diagnostic struct for const eval error in `rustc_middle`

Part of #100717.

r? `@ghost`
This commit is contained in:
Matthias Krüger 2022-10-03 20:58:56 +02:00 committed by GitHub
commit 1b9014f273
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 5 deletions

View File

@ -15,3 +15,6 @@ middle_previous_use_here =
middle_limit_invalid = middle_limit_invalid =
`limit` must be a non-negative integer `limit` must be a non-negative integer
.label = {$error_str} .label = {$error_str}
middle_const_eval_non_int =
constant evaluation of enum discriminant resulted in non-integer

View File

@ -48,3 +48,10 @@ pub struct LimitInvalid<'a> {
pub value_span: Span, pub value_span: Span,
pub error_str: &'a str, pub error_str: &'a str,
} }
#[derive(Diagnostic)]
#[diag(middle::const_eval_non_int)]
pub struct ConstEvalNonIntError {
#[primary_span]
pub span: Span,
}

View File

@ -458,11 +458,9 @@ pub fn eval_explicit_discr(self, tcx: TyCtxt<'tcx>, expr_did: DefId) -> Option<D
Some(Discr { val: b, ty }) Some(Discr { val: b, ty })
} else { } else {
info!("invalid enum discriminant: {:#?}", val); info!("invalid enum discriminant: {:#?}", val);
crate::mir::interpret::struct_error( tcx.sess.emit_err(crate::error::ConstEvalNonIntError {
tcx.at(tcx.def_span(expr_did)), span: tcx.def_span(expr_did),
"constant evaluation of enum discriminant resulted in non-integer", });
)
.emit();
None None
} }
} }