about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJason Newcomb <jsnewcomb@pm.me>2025-02-15 02:46:49 +0000
committerGitHub <noreply@github.com>2025-02-15 02:46:49 +0000
commit0dd5c4ddebb36db0fd463cdd665e217e48acb3ae (patch)
tree9d80d98bbb7f7e725729d32aa6c02626cd8addc3
parent4e899e16f9daad8fc134fc9f18d7564ca6fb4d6a (diff)
parentb167895a19dd8c634c66b5c672a83cdb610ab8a9 (diff)
downloadrust-0dd5c4ddebb36db0fd463cdd665e217e48acb3ae.tar.gz
rust-0dd5c4ddebb36db0fd463cdd665e217e48acb3ae.zip
Fix `used_underscore_items` lint uses of foreign functions (#14205)
Fixed #14156

changelog: none
-rw-r--r--clippy_lints/src/misc.rs4
-rw-r--r--tests/ui/used_underscore_items.rs10
2 files changed, 12 insertions, 2 deletions
diff --git a/clippy_lints/src/misc.rs b/clippy_lints/src/misc.rs
index fca416d9e64..693d1a8dd76 100644
--- a/clippy_lints/src/misc.rs
+++ b/clippy_lints/src/misc.rs
@@ -7,7 +7,6 @@ use clippy_utils::{
 };
 use rustc_errors::Applicability;
 use rustc_hir::def::Res;
-use rustc_hir::def_id::LOCAL_CRATE;
 use rustc_hir::intravisit::FnKind;
 use rustc_hir::{
     BinOpKind, BindingMode, Body, ByRef, Expr, ExprKind, FnDecl, Mutability, PatKind, QPath, Stmt, StmtKind,
@@ -286,7 +285,8 @@ fn used_underscore_items<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
     if name.starts_with('_')
         && !name.starts_with("__")
         && !definition_span.from_expansion()
-        && def_id.krate == LOCAL_CRATE
+        && def_id.is_local()
+        && !cx.tcx.is_foreign_item(def_id)
     {
         span_lint_and_then(
             cx,
diff --git a/tests/ui/used_underscore_items.rs b/tests/ui/used_underscore_items.rs
index 223016a5c96..ed76f4e68dc 100644
--- a/tests/ui/used_underscore_items.rs
+++ b/tests/ui/used_underscore_items.rs
@@ -61,3 +61,13 @@ fn external_item_call() {
 
     external_item::_exernal_foo();
 }
+
+// should not lint foreign functions.
+// issue #14156
+extern "C" {
+    pub fn _exit(code: i32) -> !;
+}
+
+fn _f() {
+    unsafe { _exit(1) }
+}