about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUrgau <urgau@numericable.fr>2025-08-15 11:59:23 +0200
committerUrgau <urgau@numericable.fr>2025-08-15 11:59:23 +0200
commitae4eeb9299b5938cca183ad7a90e70a1bb4b1174 (patch)
tree26ccb715bcb1dc45b2105d46757957873185562b
parent8800ec16657b24ad8a2f443c133bf0b56ae76033 (diff)
downloadrust-ae4eeb9299b5938cca183ad7a90e70a1bb4b1174.tar.gz
rust-ae4eeb9299b5938cca183ad7a90e70a1bb4b1174.zip
Fix wrong spans with external macros in the `dropping_copy_types` lint
-rw-r--r--compiler/rustc_lint/src/drop_forget_useless.rs2
-rw-r--r--tests/ui/lint/dropping_copy_types-macros.fixed3
-rw-r--r--tests/ui/lint/dropping_copy_types-macros.rs3
-rw-r--r--tests/ui/lint/dropping_copy_types-macros.stderr16
4 files changed, 22 insertions, 2 deletions
diff --git a/compiler/rustc_lint/src/drop_forget_useless.rs b/compiler/rustc_lint/src/drop_forget_useless.rs
index 7f098893f7d..c2d137986ce 100644
--- a/compiler/rustc_lint/src/drop_forget_useless.rs
+++ b/compiler/rustc_lint/src/drop_forget_useless.rs
@@ -151,7 +151,7 @@ impl<'tcx> LateLintPass<'tcx> for DropForgetUseless {
                     && let Node::Stmt(stmt) = node
                     && let StmtKind::Semi(e) = stmt.kind
                     && e.hir_id == expr.hir_id
-                    && let Some(arg_span) = arg.span.find_ancestor_inside(expr.span)
+                    && let Some(arg_span) = arg.span.find_ancestor_inside_same_ctxt(expr.span)
                 {
                     UseLetUnderscoreIgnoreSuggestion::Suggestion {
                         start_span: expr.span.shrink_to_lo().until(arg_span),
diff --git a/tests/ui/lint/dropping_copy_types-macros.fixed b/tests/ui/lint/dropping_copy_types-macros.fixed
index a8ceedadc80..2a0c3988157 100644
--- a/tests/ui/lint/dropping_copy_types-macros.fixed
+++ b/tests/ui/lint/dropping_copy_types-macros.fixed
@@ -9,4 +9,7 @@ fn main() {
     let mut msg = String::new();
     let _ = writeln!(&mut msg, "test");
     //~^ ERROR calls to `std::mem::drop`
+
+    let _ = format_args!("a");
+    //~^ ERROR calls to `std::mem::drop`
 }
diff --git a/tests/ui/lint/dropping_copy_types-macros.rs b/tests/ui/lint/dropping_copy_types-macros.rs
index b249b0c868f..2272e0e8560 100644
--- a/tests/ui/lint/dropping_copy_types-macros.rs
+++ b/tests/ui/lint/dropping_copy_types-macros.rs
@@ -9,4 +9,7 @@ fn main() {
     let mut msg = String::new();
     drop(writeln!(&mut msg, "test"));
     //~^ ERROR calls to `std::mem::drop`
+
+    drop(format_args!("a"));
+    //~^ ERROR calls to `std::mem::drop`
 }
diff --git a/tests/ui/lint/dropping_copy_types-macros.stderr b/tests/ui/lint/dropping_copy_types-macros.stderr
index 117e9f4fe09..5048f6e3f18 100644
--- a/tests/ui/lint/dropping_copy_types-macros.stderr
+++ b/tests/ui/lint/dropping_copy_types-macros.stderr
@@ -17,5 +17,19 @@ LL -     drop(writeln!(&mut msg, "test"));
 LL +     let _ = writeln!(&mut msg, "test");
    |
 
-error: aborting due to 1 previous error
+error: calls to `std::mem::drop` with a value that implements `Copy` does nothing
+  --> $DIR/dropping_copy_types-macros.rs:13:5
+   |
+LL |     drop(format_args!("a"));
+   |     ^^^^^-----------------^
+   |          |
+   |          argument has type `Arguments<'_>`
+   |
+help: use `let _ = ...` to ignore the expression or result
+   |
+LL -     drop(format_args!("a"));
+LL +     let _ = format_args!("a");
+   |
+
+error: aborting due to 2 previous errors