@@ -1718,19 +1718,23 @@ unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#,
1718
1718
) ;
1719
1719
1720
1720
match in_elem. kind ( ) {
1721
- ty:: RawPtr ( p) => require ! (
1722
- p. ty. is_sized( bx. tcx. at( span) , ty:: ParamEnv :: reveal_all( ) ) ,
1723
- "cannot cast pointer to unsized type `{}`" ,
1724
- in_elem
1725
- ) ,
1721
+ ty:: RawPtr ( p) => {
1722
+ let ( metadata, check_sized) = p. ty . ptr_metadata_ty ( bx. tcx , |ty| {
1723
+ bx. tcx . normalize_erasing_regions ( ty:: ParamEnv :: reveal_all ( ) , ty)
1724
+ } ) ;
1725
+ assert ! ( !check_sized) ; // we are in codegen, so we shouldn't see these types
1726
+ require ! ( metadata. is_unit( ) , "cannot cast fat pointer `{}`" , in_elem)
1727
+ }
1726
1728
_ => return_error ! ( "expected pointer, got `{}`" , in_elem) ,
1727
1729
}
1728
1730
match out_elem. kind ( ) {
1729
- ty:: RawPtr ( p) => require ! (
1730
- p. ty. is_sized( bx. tcx. at( span) , ty:: ParamEnv :: reveal_all( ) ) ,
1731
- "cannot cast to pointer to unsized type `{}`" ,
1732
- out_elem
1733
- ) ,
1731
+ ty:: RawPtr ( p) => {
1732
+ let ( metadata, check_sized) = p. ty . ptr_metadata_ty ( bx. tcx , |ty| {
1733
+ bx. tcx . normalize_erasing_regions ( ty:: ParamEnv :: reveal_all ( ) , ty)
1734
+ } ) ;
1735
+ assert ! ( !check_sized) ; // we are in codegen, so we shouldn't see these types
1736
+ require ! ( metadata. is_unit( ) , "cannot cast to fat pointer `{}`" , out_elem)
1737
+ }
1734
1738
_ => return_error ! ( "expected pointer, got `{}`" , out_elem) ,
1735
1739
}
1736
1740
0 commit comments