@@ -80,7 +80,7 @@ impl Derivable for Pod {
8080 match & input. data {
8181 Data :: Struct ( _) => {
8282 let assert_no_padding = if !completly_packed {
83- Some ( generate_assert_no_padding ( input, None ) ?)
83+ Some ( generate_assert_no_padding ( input, None , "Pod" ) ?)
8484 } else {
8585 None
8686 } ;
@@ -263,7 +263,8 @@ impl Derivable for NoUninit {
263263
264264 match & input. data {
265265 Data :: Struct ( DataStruct { .. } ) => {
266- let assert_no_padding = generate_assert_no_padding ( & input, None ) ?;
266+ let assert_no_padding =
267+ generate_assert_no_padding ( & input, None , "NoUninit" ) ?;
267268 let assert_fields_are_no_padding = generate_fields_are_trait (
268269 & input,
269270 None ,
@@ -312,7 +313,7 @@ impl Derivable for NoUninit {
312313 . iter ( )
313314 . map ( |variant| {
314315 let assert_no_padding =
315- generate_assert_no_padding ( & input, Some ( variant) ) ?;
316+ generate_assert_no_padding ( & input, Some ( variant) , "NoUninit" ) ?;
316317 let assert_fields_are_no_padding = generate_fields_are_trait (
317318 & input,
318319 Some ( variant) ,
@@ -1046,7 +1047,7 @@ fn generate_checked_bit_pattern_enum_with_fields(
10461047/// the type is equal to the sum of the size of it's fields and discriminant
10471048/// (for enums, this must be asserted for each variant).
10481049fn generate_assert_no_padding (
1049- input : & DeriveInput , enum_variant : Option < & Variant > ,
1050+ input : & DeriveInput , enum_variant : Option < & Variant > , for_trait : & str ,
10501051) -> Result < TokenStream > {
10511052 let struct_type = & input. ident ;
10521053 let fields = get_fields ( input, enum_variant) ?;
@@ -1073,10 +1074,14 @@ fn generate_assert_no_padding(
10731074 quote ! ( 0 )
10741075 } ;
10751076
1076- Ok ( quote ! { const _: fn ( ) = || {
1077- #[ doc( hidden) ]
1078- struct TypeWithoutPadding ( [ u8 ; #size_sum] ) ;
1079- let _ = :: core:: mem:: transmute:: <#struct_type, TypeWithoutPadding >;
1077+ let message =
1078+ format ! ( "derive({for_trait}) was applied to a type with padding" ) ;
1079+
1080+ Ok ( quote ! { const _: ( ) = {
1081+ assert!(
1082+ :: core:: mem:: size_of:: <#struct_type>( ) == ( #size_sum) ,
1083+ #message,
1084+ ) ;
10801085 } ; } )
10811086}
10821087
0 commit comments