about summary refs log tree commit diff
diff options
context:
space:
mode:
authoryukang <moorekang@gmail.com>2024-03-02 23:18:06 +0800
committeryukang <moorekang@gmail.com>2024-03-03 10:48:40 +0800
commit53dba7fb5546f5a0d450bbef6995a2d5425e72e5 (patch)
tree0ae2efd233858e09333a7c031d80747821d35402
parent5a5c6dfb33ec9f17416ac96ca66554a033ecd387 (diff)
downloadrust-53dba7fb5546f5a0d450bbef6995a2d5425e72e5.tar.gz
rust-53dba7fb5546f5a0d450bbef6995a2d5425e72e5.zip
fix spans of arguments in diagnostic
-rw-r--r--compiler/rustc_attr/messages.ftl4
-rw-r--r--compiler/rustc_attr/src/builtin.rs13
-rw-r--r--tests/ui/attributes/arg-error-issue-121425.rs2
-rw-r--r--tests/ui/attributes/arg-error-issue-121425.stderr12
-rw-r--r--tests/ui/attributes/nonterminal-expansion.rs2
-rw-r--r--tests/ui/attributes/nonterminal-expansion.stderr2
-rw-r--r--tests/ui/repr/repr-align.stderr48
7 files changed, 45 insertions, 38 deletions
diff --git a/compiler/rustc_attr/messages.ftl b/compiler/rustc_attr/messages.ftl
index 9c01e6a9d2c..eb51e568f81 100644
--- a/compiler/rustc_attr/messages.ftl
+++ b/compiler/rustc_attr/messages.ftl
@@ -28,14 +28,14 @@ attr_incorrect_repr_format_align_one_arg =
     incorrect `repr(align)` attribute format: `align` takes exactly one argument in parentheses
 
 attr_incorrect_repr_format_expect_literal_integer =
-    incorrect `repr(align)` attribute format: `align` expect a literal integer as argument
+    incorrect `repr(align)` attribute format: `align` expects a literal integer as argument
 
 attr_incorrect_repr_format_generic =
     incorrect `repr({$repr_arg})` attribute format
     .suggestion = use parentheses instead
 
 attr_incorrect_repr_format_packed_expect_integer =
-    incorrect `repr(packed)` attribute format: `packed` expect a literal integer as argument
+    incorrect `repr(packed)` attribute format: `packed` expects a literal integer as argument
 
 attr_incorrect_repr_format_packed_one_or_zero_arg =
     incorrect `repr(packed)` attribute format: `packed` takes exactly one parenthesized argument, or no parentheses at all
diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs
index 6b6eefc64f8..3d2cf25e98b 100644
--- a/compiler/rustc_attr/src/builtin.rs
+++ b/compiler/rustc_attr/src/builtin.rs
@@ -984,17 +984,24 @@ pub fn parse_repr_attr(sess: &Session, attr: &Attribute) -> Vec<ReprAttr> {
                 }
             } else if let Some((name, value)) = item.name_value_literal() {
                 let mut literal_error = None;
+                let mut err_span = item.span();
                 if name == sym::align {
                     recognised = true;
                     match parse_alignment(&value.kind) {
                         Ok(literal) => acc.push(ReprAlign(literal)),
-                        Err(message) => literal_error = Some(message),
+                        Err(message) => {
+                            err_span = value.span;
+                            literal_error = Some(message)
+                        }
                     };
                 } else if name == sym::packed {
                     recognised = true;
                     match parse_alignment(&value.kind) {
                         Ok(literal) => acc.push(ReprPacked(literal)),
-                        Err(message) => literal_error = Some(message),
+                        Err(message) => {
+                            err_span = value.span;
+                            literal_error = Some(message)
+                        }
                     };
                 } else if matches!(name, sym::Rust | sym::C | sym::simd | sym::transparent)
                     || int_type_of_word(name).is_some()
@@ -1007,7 +1014,7 @@ pub fn parse_repr_attr(sess: &Session, attr: &Attribute) -> Vec<ReprAttr> {
                 }
                 if let Some(literal_error) = literal_error {
                     sess.dcx().emit_err(session_diagnostics::InvalidReprGeneric {
-                        span: item.span(),
+                        span: err_span,
                         repr_arg: name.to_ident_string(),
                         error_part: literal_error,
                     });
diff --git a/tests/ui/attributes/arg-error-issue-121425.rs b/tests/ui/attributes/arg-error-issue-121425.rs
index 47b85fa1400..c15b276ad4e 100644
--- a/tests/ui/attributes/arg-error-issue-121425.rs
+++ b/tests/ui/attributes/arg-error-issue-121425.rs
@@ -19,7 +19,7 @@ struct X;
 
 const P: usize = 8;
 #[repr(packed(P))]
-//~^ ERROR: attribute format: `packed` expect a literal integer as argument
+//~^ ERROR: attribute format: `packed` expects a literal integer as argument
 struct A;
 
 #[repr(packed())]
diff --git a/tests/ui/attributes/arg-error-issue-121425.stderr b/tests/ui/attributes/arg-error-issue-121425.stderr
index 10f3f3c0b8f..1beb99b1703 100644
--- a/tests/ui/attributes/arg-error-issue-121425.stderr
+++ b/tests/ui/attributes/arg-error-issue-121425.stderr
@@ -1,20 +1,20 @@
-error[E0693]: incorrect `repr(align)` attribute format: `align` expect a literal integer as argument
+error[E0693]: incorrect `repr(align)` attribute format: `align` expects a literal integer as argument
   --> $DIR/arg-error-issue-121425.rs:4:14
    |
 LL | #[repr(align(N))]
    |              ^
 
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/arg-error-issue-121425.rs:8:8
+  --> $DIR/arg-error-issue-121425.rs:8:14
    |
 LL | #[repr(align('a'))]
-   |        ^^^^^^^^^^
+   |              ^^^
 
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/arg-error-issue-121425.rs:12:8
+  --> $DIR/arg-error-issue-121425.rs:12:14
    |
 LL | #[repr(align("str"))]
-   |        ^^^^^^^^^^^^
+   |              ^^^^^
 
 error[E0693]: incorrect `repr(align)` attribute format: `align` takes exactly one argument in parentheses
   --> $DIR/arg-error-issue-121425.rs:16:8
@@ -22,7 +22,7 @@ error[E0693]: incorrect `repr(align)` attribute format: `align` takes exactly on
 LL | #[repr(align())]
    |        ^^^^^^^
 
-error[E0552]: incorrect `repr(packed)` attribute format: `packed` expect a literal integer as argument
+error[E0552]: incorrect `repr(packed)` attribute format: `packed` expects a literal integer as argument
   --> $DIR/arg-error-issue-121425.rs:21:15
    |
 LL | #[repr(packed(P))]
diff --git a/tests/ui/attributes/nonterminal-expansion.rs b/tests/ui/attributes/nonterminal-expansion.rs
index decf3ec8185..6db7aea0745 100644
--- a/tests/ui/attributes/nonterminal-expansion.rs
+++ b/tests/ui/attributes/nonterminal-expansion.rs
@@ -15,6 +15,6 @@ macro_rules! n {
 }
 
 pass_nonterminal!(n!());
-//~^ ERROR incorrect `repr(align)` attribute format: `align` expect a literal integer as argument [E0693]
+//~^ ERROR incorrect `repr(align)` attribute format: `align` expects a literal integer as argument [E0693]
 
 fn main() {}
diff --git a/tests/ui/attributes/nonterminal-expansion.stderr b/tests/ui/attributes/nonterminal-expansion.stderr
index 4d995eee5ac..78541495b32 100644
--- a/tests/ui/attributes/nonterminal-expansion.stderr
+++ b/tests/ui/attributes/nonterminal-expansion.stderr
@@ -9,7 +9,7 @@ LL | pass_nonterminal!(n!());
    |
    = note: this error originates in the macro `pass_nonterminal` (in Nightly builds, run with -Z macro-backtrace for more info)
 
-error[E0693]: incorrect `repr(align)` attribute format: `align` expect a literal integer as argument
+error[E0693]: incorrect `repr(align)` attribute format: `align` expects a literal integer as argument
   --> $DIR/nonterminal-expansion.rs:17:19
    |
 LL | pass_nonterminal!(n!());
diff --git a/tests/ui/repr/repr-align.stderr b/tests/ui/repr/repr-align.stderr
index 84d33a08a6f..bb0e17ba395 100644
--- a/tests/ui/repr/repr-align.stderr
+++ b/tests/ui/repr/repr-align.stderr
@@ -1,84 +1,84 @@
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/repr-align.rs:3:8
+  --> $DIR/repr-align.rs:3:14
    |
 LL | #[repr(align(16.0))]
-   |        ^^^^^^^^^^^
+   |              ^^^^
 
 error[E0589]: invalid `repr(align)` attribute: not a power of two
-  --> $DIR/repr-align.rs:7:8
+  --> $DIR/repr-align.rs:7:14
    |
 LL | #[repr(align(15))]
-   |        ^^^^^^^^^
+   |              ^^
 
 error[E0589]: invalid `repr(align)` attribute: larger than 2^29
-  --> $DIR/repr-align.rs:11:8
+  --> $DIR/repr-align.rs:11:14
    |
 LL | #[repr(align(4294967296))]
-   |        ^^^^^^^^^^^^^^^^^
+   |              ^^^^^^^^^^
 
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/repr-align.rs:18:8
+  --> $DIR/repr-align.rs:18:14
    |
 LL | #[repr(align(16.0))]
-   |        ^^^^^^^^^^^
+   |              ^^^^
 
 error[E0589]: invalid `repr(align)` attribute: not a power of two
-  --> $DIR/repr-align.rs:22:8
+  --> $DIR/repr-align.rs:22:14
    |
 LL | #[repr(align(15))]
-   |        ^^^^^^^^^
+   |              ^^
 
 error[E0589]: invalid `repr(align)` attribute: larger than 2^29
-  --> $DIR/repr-align.rs:26:8
+  --> $DIR/repr-align.rs:26:14
    |
 LL | #[repr(align(4294967296))]
-   |        ^^^^^^^^^^^^^^^^^
+   |              ^^^^^^^^^^
 
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/repr-align.rs:3:8
+  --> $DIR/repr-align.rs:3:14
    |
 LL | #[repr(align(16.0))]
-   |        ^^^^^^^^^^^
+   |              ^^^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error[E0589]: invalid `repr(align)` attribute: not a power of two
-  --> $DIR/repr-align.rs:7:8
+  --> $DIR/repr-align.rs:7:14
    |
 LL | #[repr(align(15))]
-   |        ^^^^^^^^^
+   |              ^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error[E0589]: invalid `repr(align)` attribute: larger than 2^29
-  --> $DIR/repr-align.rs:11:8
+  --> $DIR/repr-align.rs:11:14
    |
 LL | #[repr(align(4294967296))]
-   |        ^^^^^^^^^^^^^^^^^
+   |              ^^^^^^^^^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error[E0589]: invalid `repr(align)` attribute: not an unsuffixed integer
-  --> $DIR/repr-align.rs:18:8
+  --> $DIR/repr-align.rs:18:14
    |
 LL | #[repr(align(16.0))]
-   |        ^^^^^^^^^^^
+   |              ^^^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error[E0589]: invalid `repr(align)` attribute: not a power of two
-  --> $DIR/repr-align.rs:22:8
+  --> $DIR/repr-align.rs:22:14
    |
 LL | #[repr(align(15))]
-   |        ^^^^^^^^^
+   |              ^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error[E0589]: invalid `repr(align)` attribute: larger than 2^29
-  --> $DIR/repr-align.rs:26:8
+  --> $DIR/repr-align.rs:26:14
    |
 LL | #[repr(align(4294967296))]
-   |        ^^^^^^^^^^^^^^^^^
+   |              ^^^^^^^^^^
    |
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`