11// min-llvm-version: 15.0
2- // compile-flags: -C opt-level=3 -C target-cpu=native
2+ // compile-flags: -C opt-level=3
33
44// The below two functions ensure that both `String::new()` and `"".to_string()`
55// produce the identical code.
66
77#![ crate_type = "lib" ]
88
99// CHECK-LABEL: @string_new = unnamed_addr alias void (ptr), ptr @empty_to_string
10- // CHECK: define void @empty_to_string
1110#[ no_mangle]
1211pub fn string_new ( ) -> String {
1312 String :: new ( )
1413}
1514
15+ // CHECK-LABEL: define void @empty_to_string
1616#[ no_mangle]
1717pub fn empty_to_string ( ) -> String {
1818 // CHECK-NOT: load i8
19- // CHECK: store i64
19+ // CHECK: store i{{32|64}}
2020 // CHECK-NEXT: getelementptr
2121 // CHECK-NEXT: store ptr
2222 // CHECK-NEXT: getelementptr
23- // CHECK-NOT: store i8
24- // CHECK-NEXT: store i64
23+ // CHECK-NEXT: store i{{32|64}}
2524 // CHECK-NEXT: ret void
2625 "" . to_string ( )
2726}
@@ -32,25 +31,25 @@ pub fn empty_to_string() -> String {
3231// CHECK-LABEL: @empty_vec
3332#[ no_mangle]
3433pub fn empty_vec ( ) -> Vec < u8 > {
35- // CHECK: store i64
34+ // CHECK: store i{{32|64}}
3635 // CHECK-NOT: load i8
3736 // CHECK-NEXT: getelementptr
3837 // CHECK-NEXT: store ptr
3938 // CHECK-NEXT: getelementptr
40- // CHECK-NEXT: store i64
39+ // CHECK-NEXT: store i{{32|64}}
4140 // CHECK-NEXT: ret void
4241 vec ! [ ]
4342}
4443
4544// CHECK-LABEL: @empty_vec_clone
4645#[ no_mangle]
4746pub fn empty_vec_clone ( ) -> Vec < u8 > {
48- // CHECK: store i64
47+ // CHECK: store i{{32|64}}
4948 // CHECK-NOT: load i8
5049 // CHECK-NEXT: getelementptr
5150 // CHECK-NEXT: store ptr
5251 // CHECK-NEXT: getelementptr
53- // CHECK-NEXT: store i64
52+ // CHECK-NEXT: store i{{32|64}}
5453 // CHECK-NEXT: ret void
5554 vec ! [ ] . clone ( )
5655}
0 commit comments