@@ -4553,3 +4553,58 @@ fn foo() {
4553
4553
"# ,
4554
4554
) ;
4555
4555
}
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