@@ -3925,3 +3925,58 @@ fn g(t: &(dyn T + Send)) {
39253925 "# ,
39263926 ) ;
39273927}
3928+
3929+ #[ test]
3930+ fn auto_trait_bound ( ) {
3931+ check_types (
3932+ r#"
3933+ //- minicore: sized
3934+ auto trait Send {}
3935+ impl<T> !Send for *const T {}
3936+
3937+ struct Yes;
3938+ trait IsSend { const IS_SEND: Yes; }
3939+ impl<T: Send> IsSend for T { const IS_SEND: Yes = Yes; }
3940+
3941+ struct Struct<T>(T);
3942+ enum Enum<T> { A, B(T) }
3943+ union Union<T> { t: T }
3944+
3945+ #[lang = "phantom_data"]
3946+ struct PhantomData<T: ?Sized>;
3947+
3948+ fn f<T: Send, U>() {
3949+ T::IS_SEND;
3950+ //^^^^^^^^^^Yes
3951+ U::IS_SEND;
3952+ //^^^^^^^^^^{unknown}
3953+ <*const T>::IS_SEND;
3954+ //^^^^^^^^^^^^^^^^^^^{unknown}
3955+ Struct::<T>::IS_SEND;
3956+ //^^^^^^^^^^^^^^^^^^^^Yes
3957+ Struct::<U>::IS_SEND;
3958+ //^^^^^^^^^^^^^^^^^^^^{unknown}
3959+ Struct::<*const T>::IS_SEND;
3960+ //^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3961+ Enum::<T>::IS_SEND;
3962+ //^^^^^^^^^^^^^^^^^^Yes
3963+ Enum::<U>::IS_SEND;
3964+ //^^^^^^^^^^^^^^^^^^{unknown}
3965+ Enum::<*const T>::IS_SEND;
3966+ //^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3967+ Union::<T>::IS_SEND;
3968+ //^^^^^^^^^^^^^^^^^^^Yes
3969+ Union::<U>::IS_SEND;
3970+ //^^^^^^^^^^^^^^^^^^^{unknown}
3971+ Union::<*const T>::IS_SEND;
3972+ //^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3973+ PhantomData::<T>::IS_SEND;
3974+ //^^^^^^^^^^^^^^^^^^^^^^^^^Yes
3975+ PhantomData::<U>::IS_SEND;
3976+ //^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3977+ PhantomData::<*const T>::IS_SEND;
3978+ //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3979+ }
3980+ "# ,
3981+ ) ;
3982+ }
0 commit comments