about summary refs log tree commit diff
path: root/compiler/rustc_middle
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 /compiler/rustc_middle
parent00cd965046f6f3e9fcf937bf1f6fec4d7f8d50ca (diff)
downloadrust-b37e645d801a84f8eb32daba3d4d61a926aef33d.tar.gz
rust-b37e645d801a84f8eb32daba3d4d61a926aef33d.zip
Migrate limit error
Diffstat (limited to 'compiler/rustc_middle')
-rw-r--r--compiler/rustc_middle/src/error.rs10
-rw-r--r--compiler/rustc_middle/src/middle/limits.rs8
2 files changed, 12 insertions, 6 deletions
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 });
                 }
             }
         }