@@ -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