about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChayim Refael Friedman <chayimfr@gmail.com>2024-09-22 06:17:33 +0300
committerChayim Refael Friedman <chayimfr@gmail.com>2024-09-22 15:00:01 +0300
commit393f9cc0ba2bc40700722830e14a0e659a42f96a (patch)
tree5150e5c5d2cf48408b4a1095ed3519bd185a9905
parent814da15d8baf2391f4d19cbc4bf73f81ffbeabdf (diff)
downloadrust-393f9cc0ba2bc40700722830e14a0e659a42f96a.tar.gz
rust-393f9cc0ba2bc40700722830e14a0e659a42f96a.zip
Consider lifetime GATs object unsafe
-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])],
+    );
+}