@@ -2270,6 +2270,54 @@ fn test_into_iter_drop_leak_height_0() {
2270
2270
assert_eq ! ( e. dropped( ) , 1 ) ;
2271
2271
}
2272
2272
2273
+ #[ test]
2274
+ #[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
2275
+ fn test_into_iter_drop_leak_kv_panic_in_key ( ) {
2276
+ let a_k = CrashTestDummy :: new ( 0 ) ;
2277
+ let a_v = CrashTestDummy :: new ( 1 ) ;
2278
+ let b_k = CrashTestDummy :: new ( 2 ) ;
2279
+ let b_v = CrashTestDummy :: new ( 3 ) ;
2280
+ let c_k = CrashTestDummy :: new ( 4 ) ;
2281
+ let c_v = CrashTestDummy :: new ( 5 ) ;
2282
+ let mut map = BTreeMap :: new ( ) ;
2283
+ map. insert ( a_k. spawn ( Panic :: Never ) , a_v. spawn ( Panic :: Never ) ) ;
2284
+ map. insert ( b_k. spawn ( Panic :: InDrop ) , b_v. spawn ( Panic :: Never ) ) ;
2285
+ map. insert ( c_k. spawn ( Panic :: Never ) , c_v. spawn ( Panic :: Never ) ) ;
2286
+
2287
+ catch_unwind ( move || drop ( map. into_iter ( ) ) ) . unwrap_err ( ) ;
2288
+
2289
+ assert_eq ! ( a_k. dropped( ) , 1 ) ;
2290
+ assert_eq ! ( a_v. dropped( ) , 1 ) ;
2291
+ assert_eq ! ( b_k. dropped( ) , 1 ) ;
2292
+ assert_eq ! ( b_v. dropped( ) , 1 ) ;
2293
+ assert_eq ! ( c_k. dropped( ) , 1 ) ;
2294
+ assert_eq ! ( c_v. dropped( ) , 1 ) ;
2295
+ }
2296
+
2297
+ #[ test]
2298
+ #[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
2299
+ fn test_into_iter_drop_leak_kv_panic_in_val ( ) {
2300
+ let a_k = CrashTestDummy :: new ( 0 ) ;
2301
+ let a_v = CrashTestDummy :: new ( 1 ) ;
2302
+ let b_k = CrashTestDummy :: new ( 2 ) ;
2303
+ let b_v = CrashTestDummy :: new ( 3 ) ;
2304
+ let c_k = CrashTestDummy :: new ( 4 ) ;
2305
+ let c_v = CrashTestDummy :: new ( 5 ) ;
2306
+ let mut map = BTreeMap :: new ( ) ;
2307
+ map. insert ( a_k. spawn ( Panic :: Never ) , a_v. spawn ( Panic :: Never ) ) ;
2308
+ map. insert ( b_k. spawn ( Panic :: Never ) , b_v. spawn ( Panic :: InDrop ) ) ;
2309
+ map. insert ( c_k. spawn ( Panic :: Never ) , c_v. spawn ( Panic :: Never ) ) ;
2310
+
2311
+ catch_unwind ( move || drop ( map. into_iter ( ) ) ) . unwrap_err ( ) ;
2312
+
2313
+ assert_eq ! ( a_k. dropped( ) , 1 ) ;
2314
+ assert_eq ! ( a_v. dropped( ) , 1 ) ;
2315
+ assert_eq ! ( b_k. dropped( ) , 1 ) ;
2316
+ assert_eq ! ( b_v. dropped( ) , 1 ) ;
2317
+ assert_eq ! ( c_k. dropped( ) , 1 ) ;
2318
+ assert_eq ! ( c_v. dropped( ) , 1 ) ;
2319
+ }
2320
+
2273
2321
#[ test]
2274
2322
#[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
2275
2323
fn test_into_iter_drop_leak_height_1 ( ) {
0 commit comments