@@ -3833,3 +3833,58 @@ fn test() {
3833
3833
"# ,
3834
3834
)
3835
3835
}
3836
+
3837
+ #[ test]
3838
+ fn auto_trait_bound ( ) {
3839
+ check_types (
3840
+ r#"
3841
+ //- minicore: sized
3842
+ auto trait Send {}
3843
+ impl<T> !Send for *const T {}
3844
+
3845
+ struct Yes;
3846
+ trait IsSend { const IS_SEND: Yes; }
3847
+ impl<T: Send> IsSend for T { const IS_SEND: Yes = Yes; }
3848
+
3849
+ struct Struct<T>(T);
3850
+ enum Enum<T> { A, B(T) }
3851
+ union Union<T> { t: T }
3852
+
3853
+ #[lang = "phantom_data"]
3854
+ struct PhantomData<T: ?Sized>;
3855
+
3856
+ fn f<T: Send, U>() {
3857
+ T::IS_SEND;
3858
+ //^^^^^^^^^^Yes
3859
+ U::IS_SEND;
3860
+ //^^^^^^^^^^{unknown}
3861
+ <*const T>::IS_SEND;
3862
+ //^^^^^^^^^^^^^^^^^^^{unknown}
3863
+ Struct::<T>::IS_SEND;
3864
+ //^^^^^^^^^^^^^^^^^^^^Yes
3865
+ Struct::<U>::IS_SEND;
3866
+ //^^^^^^^^^^^^^^^^^^^^{unknown}
3867
+ Struct::<*const T>::IS_SEND;
3868
+ //^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3869
+ Enum::<T>::IS_SEND;
3870
+ //^^^^^^^^^^^^^^^^^^Yes
3871
+ Enum::<U>::IS_SEND;
3872
+ //^^^^^^^^^^^^^^^^^^{unknown}
3873
+ Enum::<*const T>::IS_SEND;
3874
+ //^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3875
+ Union::<T>::IS_SEND;
3876
+ //^^^^^^^^^^^^^^^^^^^Yes
3877
+ Union::<U>::IS_SEND;
3878
+ //^^^^^^^^^^^^^^^^^^^{unknown}
3879
+ Union::<*const T>::IS_SEND;
3880
+ //^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3881
+ PhantomData::<T>::IS_SEND;
3882
+ //^^^^^^^^^^^^^^^^^^^^^^^^^Yes
3883
+ PhantomData::<U>::IS_SEND;
3884
+ //^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3885
+ PhantomData::<*const T>::IS_SEND;
3886
+ //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^{unknown}
3887
+ }
3888
+ "# ,
3889
+ ) ;
3890
+ }
0 commit comments