@@ -37,39 +37,51 @@ pub struct Baz {
37
37
#[ no_mangle]
38
38
pub fn vec_iterator_cast_primitive ( vec : Vec < i8 > ) -> Vec < u8 > {
39
39
// CHECK-NOT: loop
40
- // CHECK-NOT: call
41
40
vec. into_iter ( ) . map ( |e| e as u8 ) . collect ( )
42
41
}
43
42
44
43
// CHECK-LABEL: @vec_iterator_cast_wrapper
45
44
#[ no_mangle]
46
45
pub fn vec_iterator_cast_wrapper ( vec : Vec < u8 > ) -> Vec < Wrapper < u8 > > {
47
46
// CHECK-NOT: loop
48
- // CHECK-NOT: call
49
47
vec. into_iter ( ) . map ( |e| Wrapper ( e) ) . collect ( )
50
48
}
51
49
50
+ // CHECK-LABEL: @vec_iterator_cast_signed
51
+ #[ no_mangle]
52
+ pub fn vec_iterator_cast_signed ( vec : Vec < i32 > ) -> Vec < u32 > {
53
+ // CHECK-NOT: and i{{[0-9]+}} %{{.*}}, {{[0-9]+}}
54
+ vec. into_iter ( ) . map ( |e| u32:: from_ne_bytes ( e. to_ne_bytes ( ) ) ) . collect ( )
55
+ }
56
+
57
+ // CHECK-LABEL: @vec_iterator_cast_signed_nested
58
+ #[ no_mangle]
59
+ pub fn vec_iterator_cast_signed_nested ( vec : Vec < Vec < i32 > > ) -> Vec < Vec < u32 > > {
60
+ // CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
61
+ // CHECK-NOT: %{{.*}} = udiv
62
+ vec. into_iter ( )
63
+ . map ( |e| e. into_iter ( ) . map ( |e| u32:: from_ne_bytes ( e. to_ne_bytes ( ) ) ) . collect ( ) )
64
+ . collect ( )
65
+ }
66
+
52
67
// CHECK-LABEL: @vec_iterator_cast_unwrap
53
68
#[ no_mangle]
54
69
pub fn vec_iterator_cast_unwrap ( vec : Vec < Wrapper < u8 > > ) -> Vec < u8 > {
55
70
// CHECK-NOT: loop
56
- // CHECK-NOT: call
57
71
vec. into_iter ( ) . map ( |e| e. 0 ) . collect ( )
58
72
}
59
73
60
74
// CHECK-LABEL: @vec_iterator_cast_aggregate
61
75
#[ no_mangle]
62
76
pub fn vec_iterator_cast_aggregate ( vec : Vec < [ u64 ; 4 ] > ) -> Vec < Foo > {
63
77
// CHECK-NOT: loop
64
- // CHECK-NOT: call
65
78
vec. into_iter ( ) . map ( |e| unsafe { std:: mem:: transmute ( e) } ) . collect ( )
66
79
}
67
80
68
81
// CHECK-LABEL: @vec_iterator_cast_deaggregate_tra
69
82
#[ no_mangle]
70
83
pub fn vec_iterator_cast_deaggregate_tra ( vec : Vec < Bar > ) -> Vec < [ u64 ; 4 ] > {
71
84
// CHECK-NOT: loop
72
- // CHECK-NOT: call
73
85
74
86
// Safety: For the purpose of this test we assume that Bar layout matches [u64; 4].
75
87
// This currently is not guaranteed for repr(Rust) types, but it happens to work here and
@@ -82,7 +94,6 @@ pub fn vec_iterator_cast_deaggregate_tra(vec: Vec<Bar>) -> Vec<[u64; 4]> {
82
94
#[ no_mangle]
83
95
pub fn vec_iterator_cast_deaggregate_fold ( vec : Vec < Baz > ) -> Vec < [ u64 ; 4 ] > {
84
96
// CHECK-NOT: loop
85
- // CHECK-NOT: call
86
97
87
98
// Safety: For the purpose of this test we assume that Bar layout matches [u64; 4].
88
99
// This currently is not guaranteed for repr(Rust) types, but it happens to work here and
@@ -95,7 +106,6 @@ pub fn vec_iterator_cast_deaggregate_fold(vec: Vec<Baz>) -> Vec<[u64; 4]> {
95
106
#[ no_mangle]
96
107
pub fn vec_iterator_cast_unwrap_drop ( vec : Vec < Wrapper < String > > ) -> Vec < String > {
97
108
// CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
98
- // CHECK-NOT: call
99
109
// CHECK-NOT: %{{.*}} = mul
100
110
// CHECK-NOT: %{{.*}} = udiv
101
111
@@ -106,7 +116,6 @@ pub fn vec_iterator_cast_unwrap_drop(vec: Vec<Wrapper<String>>) -> Vec<String> {
106
116
#[ no_mangle]
107
117
pub fn vec_iterator_cast_wrap_drop ( vec : Vec < String > ) -> Vec < Wrapper < String > > {
108
118
// CHECK-NOT: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
109
- // CHECK-NOT: call
110
119
// CHECK-NOT: %{{.*}} = mul
111
120
// CHECK-NOT: %{{.*}} = udiv
112
121
0 commit comments