Unnamed repository; edit this file 'description' to name the repository.
Consider lifetime GATs object unsafe
Chayim Refael Friedman 2024-09-22
parent 6dad8c5 · commit 1418338
-rw-r--r--crates/hir-ty/src/object_safety.rs2
-rw-r--r--crates/hir-ty/src/object_safety/tests.rs13
2 files changed, 14 insertions, 1 deletions
diff --git a/crates/hir-ty/src/object_safety.rs b/crates/hir-ty/src/object_safety.rs
index 89bf3619a0..a4c6626855 100644
--- a/crates/hir-ty/src/object_safety.rs
+++ b/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/crates/hir-ty/src/object_safety/tests.rs b/crates/hir-ty/src/object_safety/tests.rs
index 3dc08c4619..c2a9117c5b 100644
--- a/crates/hir-ty/src/object_safety/tests.rs
+++ b/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])],
+ );
+}