about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-09-24 08:14:00 +0000
committerbors <bors@rust-lang.org>2024-09-24 08:14:00 +0000
commit5bc2e652a75faf5e94420b72860ed8fcdd523fb6 (patch)
tree439cc33100facbadceff80ffee8a4f31b737af04
parentf75aebe7e7ccd56b4ac7932a872428c979360e1c (diff)
parent393f9cc0ba2bc40700722830e14a0e659a42f96a (diff)
downloadrust-5bc2e652a75faf5e94420b72860ed8fcdd523fb6.tar.gz
rust-5bc2e652a75faf5e94420b72860ed8fcdd523fb6.zip
Auto merge of #18162 - ChayimFriedman2:gat-object-safe, r=Veykril
fix: Consider lifetime GATs object unsafe

Fixes #18156.
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/object_safety.rs2
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/object_safety/tests.rs13
2 files changed, 14 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/object_safety.rs b/src/tools/rust-analyzer/crates/hir-ty/src/object_safety.rs
index 89bf3619a0c..a4c66268555 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/object_safety.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/object_safety.rs
@@ -349,7 +349,7 @@ where
                 ControlFlow::Continue(())
             } else {
                 let generic_params = db.generic_params(item.into());
-                if generic_params.len_type_or_consts() > 0 {
+                if !generic_params.is_empty() {
                     cb(ObjectSafetyViolation::GAT(it))
                 } else {
                     ControlFlow::Continue(())
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/object_safety/tests.rs b/src/tools/rust-analyzer/crates/hir-ty/src/object_safety/tests.rs
index 3dc08c4619e..c2a9117c5be 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/object_safety/tests.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/object_safety/tests.rs
@@ -378,3 +378,16 @@ pub trait Error: core::fmt::Debug + core::fmt::Display {
         [("Error", vec![])],
     );
 }
+
+#[test]
+fn lifetime_gat_is_object_unsafe() {
+    check_object_safety(
+        r#"
+//- minicore: dispatch_from_dyn
+trait Foo {
+    type Bar<'a>;
+}
+"#,
+        [("Foo", vec![ObjectSafetyViolationKind::GAT])],
+    );
+}