@@ -5752,26 +5752,30 @@ mod tests {
5752
5752
} ;
5753
5753
}
5754
5754
5755
- let layout = |offset, align, _trailing_slice_elem_size| DstLayout {
5756
- align : NonZeroUsize :: new ( align) . unwrap ( ) ,
5757
- size_info : match _trailing_slice_elem_size {
5758
- None => SizeInfo :: Sized { size : offset } ,
5759
- Some ( elem_size) => SizeInfo :: SliceDst ( TrailingSliceLayout { offset, elem_size } ) ,
5760
- } ,
5761
- } ;
5755
+ let layout =
5756
+ |offset, align, trailing_slice_elem_size, statically_shallow_unpadded| DstLayout {
5757
+ align : NonZeroUsize :: new ( align) . unwrap ( ) ,
5758
+ size_info : match trailing_slice_elem_size {
5759
+ None => SizeInfo :: Sized { size : offset } ,
5760
+ Some ( elem_size) => {
5761
+ SizeInfo :: SliceDst ( TrailingSliceLayout { offset, elem_size } )
5762
+ }
5763
+ } ,
5764
+ statically_shallow_unpadded,
5765
+ } ;
5762
5766
5763
- test ! ( ( ) , layout( 0 , 1 , None ) ) ;
5764
- test ! ( u8 , layout( 1 , 1 , None ) ) ;
5767
+ test ! ( ( ) , layout( 0 , 1 , None , false ) ) ;
5768
+ test ! ( u8 , layout( 1 , 1 , None , false ) ) ;
5765
5769
// Use `align_of` because `u64` alignment may be smaller than 8 on some
5766
5770
// platforms.
5767
- test ! ( u64 , layout( 8 , mem:: align_of:: <u64 >( ) , None ) ) ;
5768
- test ! ( AU64 , layout( 8 , 8 , None ) ) ;
5771
+ test ! ( u64 , layout( 8 , mem:: align_of:: <u64 >( ) , None , false ) ) ;
5772
+ test ! ( AU64 , layout( 8 , 8 , None , false ) ) ;
5769
5773
5770
5774
test ! ( Option <& ' static ( ) >, usize :: LAYOUT ) ;
5771
5775
5772
- test ! ( [ ( ) ] , layout( 0 , 1 , Some ( 0 ) ) ) ;
5773
- test ! ( [ u8 ] , layout( 0 , 1 , Some ( 1 ) ) ) ;
5774
- test ! ( str , layout( 0 , 1 , Some ( 1 ) ) ) ;
5776
+ test ! ( [ ( ) ] , layout( 0 , 1 , Some ( 0 ) , true ) ) ;
5777
+ test ! ( [ u8 ] , layout( 0 , 1 , Some ( 1 ) , true ) ) ;
5778
+ test ! ( str , layout( 0 , 1 , Some ( 1 ) , true ) ) ;
5775
5779
}
5776
5780
5777
5781
#[ cfg( feature = "derive" ) ]
@@ -5826,11 +5830,13 @@ mod tests {
5826
5830
let sized_layout = |align, size| DstLayout {
5827
5831
align : NonZeroUsize :: new ( align) . unwrap ( ) ,
5828
5832
size_info : SizeInfo :: Sized { size } ,
5833
+ statically_shallow_unpadded : false ,
5829
5834
} ;
5830
5835
5831
- let unsized_layout = |align, elem_size, offset| DstLayout {
5836
+ let unsized_layout = |align, elem_size, offset, statically_shallow_unpadded | DstLayout {
5832
5837
align : NonZeroUsize :: new ( align) . unwrap ( ) ,
5833
5838
size_info : SizeInfo :: SliceDst ( TrailingSliceLayout { offset, elem_size } ) ,
5839
+ statically_shallow_unpadded,
5834
5840
} ;
5835
5841
5836
5842
// | `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name |
@@ -5958,7 +5964,7 @@ mod tests {
5958
5964
. pad_to_align ( ) ;
5959
5965
5960
5966
assert_eq ! ( <KL10 as KnownLayout >:: LAYOUT , expected) ;
5961
- assert_eq ! ( <KL10 as KnownLayout >:: LAYOUT , unsized_layout( 4 , 1 , 4 ) ) ;
5967
+ assert_eq ! ( <KL10 as KnownLayout >:: LAYOUT , unsized_layout( 4 , 1 , 4 , false ) ) ;
5962
5968
5963
5969
// ...with `align(N)`:
5964
5970
#[ allow( dead_code) ]
@@ -5974,7 +5980,7 @@ mod tests {
5974
5980
. pad_to_align ( ) ;
5975
5981
5976
5982
assert_eq ! ( <KL10Align as KnownLayout >:: LAYOUT , expected) ;
5977
- assert_eq ! ( <KL10Align as KnownLayout >:: LAYOUT , unsized_layout( 64 , 1 , 4 ) ) ;
5983
+ assert_eq ! ( <KL10Align as KnownLayout >:: LAYOUT , unsized_layout( 64 , 1 , 4 , false ) ) ;
5978
5984
5979
5985
// ...with `packed`:
5980
5986
#[ allow( dead_code) ]
@@ -5990,7 +5996,7 @@ mod tests {
5990
5996
. pad_to_align ( ) ;
5991
5997
5992
5998
assert_eq ! ( <KL10Packed as KnownLayout >:: LAYOUT , expected) ;
5993
- assert_eq ! ( <KL10Packed as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 4 ) ) ;
5999
+ assert_eq ! ( <KL10Packed as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 4 , false ) ) ;
5994
6000
5995
6001
// ...with `packed(N)`:
5996
6002
#[ allow( dead_code) ]
@@ -6006,7 +6012,7 @@ mod tests {
6006
6012
. pad_to_align ( ) ;
6007
6013
6008
6014
assert_eq ! ( <KL10PackedN as KnownLayout >:: LAYOUT , expected) ;
6009
- assert_eq ! ( <KL10PackedN as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 4 ) ) ;
6015
+ assert_eq ! ( <KL10PackedN as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 4 , false ) ) ;
6010
6016
6011
6017
// | `repr(C)`? | generic? | `KnownLayout`? | `Sized`? | Type Name |
6012
6018
// | Y | N | Y | Y | KL11 |
@@ -6112,35 +6118,35 @@ mod tests {
6112
6118
6113
6119
assert_eq ! ( <KLTU <( ) , AU16 > as KnownLayout >:: LAYOUT , sized_layout( 2 , 2 ) ) ;
6114
6120
6115
- assert_eq ! ( <KLTU <( ) , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 0 , 0 ) ) ;
6121
+ assert_eq ! ( <KLTU <( ) , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 0 , 0 , false ) ) ;
6116
6122
6117
- assert_eq ! ( <KLTU <( ) , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 0 ) ) ;
6123
+ assert_eq ! ( <KLTU <( ) , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 0 , false ) ) ;
6118
6124
6119
- assert_eq ! ( <KLTU <( ) , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 0 ) ) ;
6125
+ assert_eq ! ( <KLTU <( ) , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 0 , false ) ) ;
6120
6126
6121
6127
assert_eq ! ( <KLTU <u8 , ( ) > as KnownLayout >:: LAYOUT , sized_layout( 1 , 1 ) ) ;
6122
6128
6123
6129
assert_eq ! ( <KLTU <u8 , u8 > as KnownLayout >:: LAYOUT , sized_layout( 1 , 2 ) ) ;
6124
6130
6125
6131
assert_eq ! ( <KLTU <u8 , AU16 > as KnownLayout >:: LAYOUT , sized_layout( 2 , 4 ) ) ;
6126
6132
6127
- assert_eq ! ( <KLTU <u8 , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 0 , 1 ) ) ;
6133
+ assert_eq ! ( <KLTU <u8 , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 0 , 1 , false ) ) ;
6128
6134
6129
- assert_eq ! ( <KLTU <u8 , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 1 ) ) ;
6135
+ assert_eq ! ( <KLTU <u8 , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 1 , false ) ) ;
6130
6136
6131
- assert_eq ! ( <KLTU <u8 , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 2 ) ) ;
6137
+ assert_eq ! ( <KLTU <u8 , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 2 , false ) ) ;
6132
6138
6133
6139
assert_eq ! ( <KLTU <AU16 , ( ) > as KnownLayout >:: LAYOUT , sized_layout( 2 , 2 ) ) ;
6134
6140
6135
6141
assert_eq ! ( <KLTU <AU16 , u8 > as KnownLayout >:: LAYOUT , sized_layout( 2 , 4 ) ) ;
6136
6142
6137
6143
assert_eq ! ( <KLTU <AU16 , AU16 > as KnownLayout >:: LAYOUT , sized_layout( 2 , 4 ) ) ;
6138
6144
6139
- assert_eq ! ( <KLTU <AU16 , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 0 , 2 ) ) ;
6145
+ assert_eq ! ( <KLTU <AU16 , [ ( ) ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 0 , 2 , false ) ) ;
6140
6146
6141
- assert_eq ! ( <KLTU <AU16 , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 2 ) ) ;
6147
+ assert_eq ! ( <KLTU <AU16 , [ u8 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 2 , false ) ) ;
6142
6148
6143
- assert_eq ! ( <KLTU <AU16 , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 2 ) ) ;
6149
+ assert_eq ! ( <KLTU <AU16 , [ AU16 ] > as KnownLayout >:: LAYOUT , unsized_layout( 2 , 2 , 2 , false ) ) ;
6144
6150
6145
6151
// Test a variety of field counts.
6146
6152
@@ -6154,25 +6160,25 @@ mod tests {
6154
6160
#[ repr( C ) ]
6155
6161
struct KLF1 ( [ u8 ] ) ;
6156
6162
6157
- assert_eq ! ( <KLF1 as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 0 ) ) ;
6163
+ assert_eq ! ( <KLF1 as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 0 , true ) ) ;
6158
6164
6159
6165
#[ derive( KnownLayout ) ]
6160
6166
#[ repr( C ) ]
6161
6167
struct KLF2 ( NotKnownLayout < u8 > , [ u8 ] ) ;
6162
6168
6163
- assert_eq ! ( <KLF2 as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 1 ) ) ;
6169
+ assert_eq ! ( <KLF2 as KnownLayout >:: LAYOUT , unsized_layout( 1 , 1 , 1 , false ) ) ;
6164
6170
6165
6171
#[ derive( KnownLayout ) ]
6166
6172
#[ repr( C ) ]
6167
6173
struct KLF3 ( NotKnownLayout < u8 > , NotKnownLayout < AU16 > , [ u8 ] ) ;
6168
6174
6169
- assert_eq ! ( <KLF3 as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 4 ) ) ;
6175
+ assert_eq ! ( <KLF3 as KnownLayout >:: LAYOUT , unsized_layout( 2 , 1 , 4 , false ) ) ;
6170
6176
6171
6177
#[ derive( KnownLayout ) ]
6172
6178
#[ repr( C ) ]
6173
6179
struct KLF4 ( NotKnownLayout < u8 > , NotKnownLayout < AU16 > , NotKnownLayout < AU32 > , [ u8 ] ) ;
6174
6180
6175
- assert_eq ! ( <KLF4 as KnownLayout >:: LAYOUT , unsized_layout( 4 , 1 , 8 ) ) ;
6181
+ assert_eq ! ( <KLF4 as KnownLayout >:: LAYOUT , unsized_layout( 4 , 1 , 8 , false ) ) ;
6176
6182
}
6177
6183
6178
6184
#[ test]
0 commit comments