@@ -2720,14 +2720,32 @@ fn vec_null_ptr_roundtrip() {
27202720
27212721// Regression test for Undefined Behavior (UB) caused by IntoIter::nth_back (#148682)
27222722// when dealing with high-aligned Zero-Sized Types (ZSTs).
2723+ use std:: collections:: { BTreeMap , BinaryHeap , HashMap , VecDeque , LinkedList } ;
27232724#[ test]
2724- fn zst_vec_iter_nth_back_regression ( ) {
2725+ fn zst_collections_iter_nth_back_regression ( ) {
27252726 #[ repr( align( 8 ) ) ]
2727+ #[ derive( Debug , PartialEq , Eq , PartialOrd , Ord , Hash , Clone , Copy ) ]
27262728 struct Thing ;
27272729 let v = vec ! [ Thing , Thing ] ;
2728- let mut iter = v. into_iter ( ) ;
2729- let _ = iter. nth_back ( 1 ) ;
2730- let v2 = vec ! [ Thing , Thing ] ;
2731- let mut iter2 = v2. into_iter ( ) ;
2732- let _ = iter2. nth_back ( 0 ) ;
2730+ let _ = v. into_iter ( ) . nth_back ( 1 ) ;
2731+ let mut d = VecDeque :: new ( ) ;
2732+ d. push_back ( Thing ) ;
2733+ d. push_back ( Thing ) ;
2734+ let _ = d. into_iter ( ) . nth_back ( 1 ) ;
2735+ let mut map = BTreeMap :: new ( ) ;
2736+ map. insert ( 0 , Thing ) ;
2737+ map. insert ( 1 , Thing ) ;
2738+ let _ = map. into_values ( ) . nth_back ( 0 ) ;
2739+ let mut hash_map = HashMap :: new ( ) ;
2740+ hash_map. insert ( 1 , Thing ) ;
2741+ hash_map. insert ( 2 , Thing ) ;
2742+ let _ = hash_map. into_values ( ) . nth ( 1 ) ;
2743+ let mut heap = BinaryHeap :: new ( ) ;
2744+ heap. push ( Thing ) ;
2745+ heap. push ( Thing ) ;
2746+ let _ = heap. into_iter ( ) . nth_back ( 1 ) ;
2747+ let mut list = LinkedList :: new ( ) ;
2748+ list. push_back ( Thing ) ;
2749+ list. push_back ( Thing ) ;
2750+ let _ = list. into_iter ( ) . nth_back ( 1 ) ;
27332751}
0 commit comments