about summary refs log tree commit diff
diff options
context:
space:
mode:
author111 <mic215@ucsd.edu>2022-09-01 22:09:45 +0800
committer111 <mic215@ucsd.edu>2022-09-01 23:35:38 +0800
commitb37e645d801a84f8eb32daba3d4d61a926aef33d (patch)
tree83a772f0e331307e37d952a7f2be086090eeba55
parent00cd965046f6f3e9fcf937bf1f6fec4d7f8d50ca (diff)
downloadrust-b37e645d801a84f8eb32daba3d4d61a926aef33d.tar.gz
rust-b37e645d801a84f8eb32daba3d4d61a926aef33d.zip
Migrate limit error
-rw-r--r--compiler/rustc_error_messages/locales/en-US/middle.ftl4
-rw-r--r--compiler/rustc_middle/src/error.rs10
-rw-r--r--compiler/rustc_middle/src/middle/limits.rs8
3 files changed, 16 insertions, 6 deletions
diff --git a/compiler/rustc_error_messages/locales/en-US/middle.ftl b/compiler/rustc_error_messages/locales/en-US/middle.ftl
index bc1aebd9dbe..3a55064c707 100644
--- a/compiler/rustc_error_messages/locales/en-US/middle.ftl
+++ b/compiler/rustc_error_messages/locales/en-US/middle.ftl
@@ -11,3 +11,7 @@ middle_conflict_types =
 
 middle_previous_use_here =
     previous use here
+
+middle_limit_invalid =
+    `limit` must be a non-negative integer
+    .label = {$error_str}
diff --git a/compiler/rustc_middle/src/error.rs b/compiler/rustc_middle/src/error.rs
index 27588440aac..0dfe6374cf3 100644
--- a/compiler/rustc_middle/src/error.rs
+++ b/compiler/rustc_middle/src/error.rs
@@ -38,3 +38,13 @@ pub enum TypeMismatchReason {
         span: Span,
     },
 }
+
+#[derive(SessionDiagnostic)]
+#[diag(middle::limit_invalid)]
+pub struct LimitInvalid<'a> {
+    #[primary_span]
+    pub span: Span,
+    #[label]
+    pub value_span: Span,
+    pub error_str: &'a str,
+}
diff --git a/compiler/rustc_middle/src/middle/limits.rs b/compiler/rustc_middle/src/middle/limits.rs
index acced0492ef..53c4d926784 100644
--- a/compiler/rustc_middle/src/middle/limits.rs
+++ b/compiler/rustc_middle/src/middle/limits.rs
@@ -10,6 +10,7 @@
 //! just peeks and looks for that attribute.
 
 use crate::bug;
+use crate::error::LimitInvalid;
 use crate::ty;
 use rustc_ast::Attribute;
 use rustc_session::Session;
@@ -56,9 +57,6 @@ fn get_limit(krate_attrs: &[Attribute], sess: &Session, name: Symbol, default: u
             match s.as_str().parse() {
                 Ok(n) => return Limit::new(n),
                 Err(e) => {
-                    let mut err =
-                        sess.struct_span_err(attr.span, "`limit` must be a non-negative integer");
-
                     let value_span = attr
                         .meta()
                         .and_then(|meta| meta.name_value_literal_span())
@@ -74,9 +72,7 @@ fn get_limit(krate_attrs: &[Attribute], sess: &Session, name: Symbol, default: u
                         IntErrorKind::Zero => bug!("zero is a valid `limit`"),
                         kind => bug!("unimplemented IntErrorKind variant: {:?}", kind),
                     };
-
-                    err.span_label(value_span, error_str);
-                    err.emit();
+                    sess.emit_err(LimitInvalid { span: attr.span, value_span, error_str });
                 }
             }
         }