File tree 2 files changed +122
-0
lines changed
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