Skip to content

Commit 4829f59

Browse files
lowrVeykril
authored andcommitted
Add test for auto trait bounds
1 parent 0334074 commit 4829f59

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

crates/hir-ty/src/chalk_db.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ pub(crate) fn adt_datum_query(
724724
let where_clauses = convert_where_clauses(db, adt_id.into(), &bound_vars_subst);
725725

726726
let phantom_data_id = db
727-
.lang_item(krate, SmolStr::new_inline("phantom_data"))
727+
.lang_item(krate, LangItem::PhantomData)
728728
.and_then(|item| item.as_struct())
729729
.map(|item| item.into());
730730
let flags = rust_ir::AdtFlags {
@@ -754,10 +754,7 @@ pub(crate) fn adt_datum_query(
754754
.enum_data(id)
755755
.variants
756756
.iter()
757-
.map(|(local_id, _)| {
758-
let variant_id = hir_def::EnumVariantId { parent: id, local_id };
759-
variant_id_to_fields(variant_id.into())
760-
})
757+
.map(|&(variant_id, _)| variant_id_to_fields(variant_id.into()))
761758
.collect();
762759
(rust_ir::AdtKind::Enum, variants)
763760
}

crates/hir-ty/src/tests/traits.rs

+55
Original file line numberDiff line numberDiff line change
@@ -4553,3 +4553,58 @@ fn foo() {
45534553
"#,
45544554
);
45554555
}
4556+
4557+
#[test]
4558+
fn auto_trait_bound() {
4559+
check_types(
4560+
r#"
4561+
//- minicore: sized
4562+
auto trait Send {}
4563+
impl<T> !Send for *const T {}
4564+
4565+
struct Yes;
4566+
trait IsSend { const IS_SEND: Yes; }
4567+
impl<T: Send> IsSend for T { const IS_SEND: Yes = Yes; }
4568+
4569+
struct Struct<T>(T);
4570+
enum Enum<T> { A, B(T) }
4571+
union Union<T> { t: T }
4572+
4573+
#[lang = "phantom_data"]
4574+
struct PhantomData<T: ?Sized>;
4575+
4576+
fn f<T: Send, U>() {
4577+
T::IS_SEND;
4578+
//^^^^^^^^^^Yes
4579+
U::IS_SEND;
4580+
//^^^^^^^^^^{unknown}
4581+
<*const T>::IS_SEND;
4582+
//^^^^^^^^^^^^^^^^^^^{unknown}
4583+
Struct::<T>::IS_SEND;
4584+
//^^^^^^^^^^^^^^^^^^^^Yes
4585+
Struct::<U>::IS_SEND;
4586+
//^^^^^^^^^^^^^^^^^^^^{unknown}
4587+
Struct::<*const T>::IS_SEND;
4588+
//^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
4589+
Enum::<T>::IS_SEND;
4590+
//^^^^^^^^^^^^^^^^^^Yes
4591+
Enum::<U>::IS_SEND;
4592+
//^^^^^^^^^^^^^^^^^^{unknown}
4593+
Enum::<*const T>::IS_SEND;
4594+
//^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
4595+
Union::<T>::IS_SEND;
4596+
//^^^^^^^^^^^^^^^^^^^Yes
4597+
Union::<U>::IS_SEND;
4598+
//^^^^^^^^^^^^^^^^^^^{unknown}
4599+
Union::<*const T>::IS_SEND;
4600+
//^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
4601+
PhantomData::<T>::IS_SEND;
4602+
//^^^^^^^^^^^^^^^^^^^^^^^^^Yes
4603+
PhantomData::<U>::IS_SEND;
4604+
//^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
4605+
PhantomData::<*const T>::IS_SEND;
4606+
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
4607+
}
4608+
"#,
4609+
);
4610+
}

0 commit comments

Comments
 (0)