File tree 2 files changed +30
-2
lines changed
2 files changed +30
-2
lines changed Original file line number Diff line number Diff line change @@ -271,7 +271,7 @@ pub mod __internal {
271
271
fn zeroize_or_on_drop ( self ) ;
272
272
}
273
273
274
- impl < T : ZeroizeOnDrop > AssertZeroizeOnDrop for & & mut T {
274
+ impl < T : ZeroizeOnDrop + ? Sized > AssertZeroizeOnDrop for & & mut T {
275
275
fn zeroize_or_on_drop ( self ) { }
276
276
}
277
277
@@ -280,7 +280,7 @@ pub mod __internal {
280
280
fn zeroize_or_on_drop ( & mut self ) ;
281
281
}
282
282
283
- impl < T : Zeroize > AssertZeroize for T {
283
+ impl < T : Zeroize + ? Sized > AssertZeroize for T {
284
284
fn zeroize_or_on_drop ( & mut self ) {
285
285
self . zeroize ( )
286
286
}
Original file line number Diff line number Diff line change @@ -287,3 +287,31 @@ fn derive_inherit_both() {
287
287
}
288
288
assert_eq ! ( & value. 0 . 0 , & [ 0 , 0 , 0 ] )
289
289
}
290
+
291
+ #[ test]
292
+ fn derive_deref ( ) {
293
+ struct X ( [ u8 ; 3 ] ) ;
294
+
295
+ impl std:: ops:: Deref for X {
296
+ type Target = [ u8 ] ;
297
+
298
+ fn deref ( & self ) -> & Self :: Target {
299
+ & self . 0
300
+ }
301
+ }
302
+
303
+ impl std:: ops:: DerefMut for X {
304
+ fn deref_mut ( & mut self ) -> & mut Self :: Target {
305
+ & mut self . 0
306
+ }
307
+ }
308
+
309
+ #[ derive( Zeroize , ZeroizeOnDrop ) ]
310
+ struct Z ( X ) ;
311
+
312
+ let mut value = Z ( X ( [ 1 , 2 , 3 ] ) ) ;
313
+ unsafe {
314
+ std:: ptr:: drop_in_place ( & mut value) ;
315
+ }
316
+ assert_eq ! ( & value. 0 . 0 , & [ 0 , 0 , 0 ] )
317
+ }
You can’t perform that action at this time.
0 commit comments