File tree Expand file tree Collapse file tree 2 files changed +122
-0
lines changed Expand file tree Collapse file tree 2 files changed +122
-0
lines changed Original file line number Diff line number Diff line change 1+ // compile-flags: -O
2+
3+ #![ crate_type = "lib" ]
4+
5+ use std:: arch:: asm;
6+
7+ #[ no_mangle]
8+ // CHECK-LABEL: @reserve_push_str(
9+ pub fn reserve_push_str ( v : & mut String , s : & str ) {
10+ // CHECK: do_reserve_and_handle
11+ // CHECK: "nop"
12+ // CHECK-NOT: do_reserve_and_handle
13+ // CHECK: ret
14+ v. reserve ( s. len ( ) ) ;
15+ unsafe {
16+ asm ! ( "nop" ) ; // Used to make the check logic easier
17+ }
18+ v. push_str ( s) ;
19+ }
20+
21+ #[ no_mangle]
22+ // CHECK-LABEL: @reserve_exact_push_str(
23+ pub fn reserve_exact_push_str ( v : & mut String , s : & str ) {
24+ // CHECK: finish_grow
25+ // CHECK: "nop"
26+ // CHECK-NOT: finish_grow
27+ // CHECK: ret
28+ v. reserve_exact ( s. len ( ) ) ;
29+ unsafe {
30+ asm ! ( "nop" ) ; // Used to make the check logic easier
31+ }
32+ v. push_str ( s) ;
33+ }
34+
35+ #[ no_mangle]
36+ // CHECK-LABEL: @try_reserve_push_str(
37+ pub fn try_reserve_push_str ( v : & mut String , s : & str ) {
38+ // CHECK: finish_grow
39+ // CHECK: "nop"
40+ // CHECK-NOT: finish_grow
41+ // CHECK: ret
42+ v. try_reserve ( s. len ( ) ) ;
43+ unsafe {
44+ asm ! ( "nop" ) ; // Used to make the check logic easier
45+ }
46+ v. push_str ( s) ;
47+ }
48+
49+ #[ no_mangle]
50+ // CHECK-LABEL: @try_reserve_exact_push_str(
51+ pub fn try_reserve_exact_push_str ( v : & mut String , s : & str ) {
52+ // CHECK: finish_grow
53+ // CHECK: "nop"
54+ // CHECK-NOT: finish_grow
55+ // CHECK: ret
56+ v. try_reserve_exact ( s. len ( ) ) ;
57+ unsafe {
58+ asm ! ( "nop" ) ; // Used to make the check logic easier
59+ }
60+ v. push_str ( s) ;
61+ }
Original file line number Diff line number Diff line change 1+ // compile-flags: -O
2+
3+ #![ crate_type = "lib" ]
4+
5+ use std:: arch:: asm;
6+
7+ #[ no_mangle]
8+ // CHECK-LABEL: @reserve_extend(
9+ pub fn reserve_extend ( v : & mut Vec < u8 > , s : & [ u8 ] ) {
10+ // CHECK: do_reserve_and_handle
11+ // CHECK: "nop"
12+ // CHECK-NOT: do_reserve_and_handle
13+ // CHECK: ret
14+ v. reserve ( s. len ( ) ) ;
15+ unsafe {
16+ asm ! ( "nop" ) ; // Used to make the check logic easier
17+ }
18+ v. extend_from_slice ( s) ;
19+ }
20+
21+ #[ no_mangle]
22+ // CHECK-LABEL: @reserve_exact_extend(
23+ pub fn reserve_exact_extend ( v : & mut Vec < u8 > , s : & [ u8 ] ) {
24+ // CHECK: finish_grow
25+ // CHECK: "nop"
26+ // CHECK-NOT: finish_grow
27+ // CHECK: ret
28+ v. reserve_exact ( s. len ( ) ) ;
29+ unsafe {
30+ asm ! ( "nop" ) ; // Used to make the check logic easier
31+ }
32+ v. extend_from_slice ( s) ;
33+ }
34+
35+ #[ no_mangle]
36+ // CHECK-LABEL: @try_reserve_extend(
37+ pub fn try_reserve_extend ( v : & mut Vec < u8 > , s : & [ u8 ] ) {
38+ // CHECK: finish_grow
39+ // CHECK: "nop"
40+ // CHECK-NOT: finish_grow
41+ // CHECK: ret
42+ v. try_reserve ( s. len ( ) ) ;
43+ unsafe {
44+ asm ! ( "nop" ) ; // Used to make the check logic easier
45+ }
46+ v. extend_from_slice ( s) ;
47+ }
48+
49+ #[ no_mangle]
50+ // CHECK-LABEL: @try_reserve_exact_extend(
51+ pub fn try_reserve_exact_extend ( v : & mut Vec < u8 > , s : & [ u8 ] ) {
52+ // CHECK: finish_grow
53+ // CHECK: "nop"
54+ // CHECK-NOT: finish_grow
55+ // CHECK: ret
56+ v. try_reserve_exact ( s. len ( ) ) ;
57+ unsafe {
58+ asm ! ( "nop" ) ; // Used to make the check logic easier
59+ }
60+ v. extend_from_slice ( s) ;
61+ }
You can’t perform that action at this time.
0 commit comments