@@ -3925,3 +3925,58 @@ fn g(t: &(dyn T + Send)) {
3925
3925
"# ,
3926
3926
) ;
3927
3927
}
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