File tree 1 file changed +69
-0
lines changed
1 file changed +69
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Check that draining at the front or back doesn't copy memory.
2
+
3
+ // compile-flags: -O
4
+ // ignore-debug: the debug assertions get in the way
5
+
6
+ #![ crate_type = "lib" ]
7
+
8
+ use std:: collections:: VecDeque ;
9
+
10
+ // CHECK-LABEL: @clear
11
+ // CHECK-NOT: call
12
+ // CHECK-NOT: br
13
+ // CHECK: getelementptr inbounds
14
+ // CHECK-NEXT: {{call void @llvm.memset|store}}
15
+ // CHECK-NEXT: ret void
16
+ #[ no_mangle]
17
+ pub fn clear ( v : & mut VecDeque < i32 > ) {
18
+ v. drain ( ..) ;
19
+ }
20
+
21
+ // CHECK-LABEL: @truncate
22
+ // CHECK-NOT: call
23
+ // CHECK: br
24
+ // CHECK-NOT: call
25
+ // CHECK: br
26
+ // CHECK-NOT: call
27
+ // CHECK: br
28
+ // CHECK-NOT: call
29
+ // CHECK: br
30
+ // CHECK-NOT: call
31
+ // CHECK-NOT: br
32
+ // CHECK: ret void
33
+ #[ no_mangle]
34
+ pub fn truncate ( v : & mut VecDeque < i32 > , n : usize ) {
35
+ if n < v. len ( ) {
36
+ v. drain ( n..) ;
37
+ }
38
+ }
39
+
40
+ // CHECK-LABEL: @advance
41
+ // CHECK-NOT: call
42
+ // CHECK: br
43
+ // CHECK-NOT: call
44
+ // CHECK: br
45
+ // CHECK-NOT: call
46
+ // CHECK: br
47
+ // CHECK-NOT: call
48
+ // CHECK: br
49
+ // CHECK-NOT: call
50
+ // CHECK: br
51
+ // CHECK-NOT: call
52
+ // CHECK-NOT: br
53
+ // CHECK: ret void
54
+ #[ no_mangle]
55
+ pub fn advance ( v : & mut VecDeque < i32 > , n : usize ) {
56
+ if n < v. len ( ) {
57
+ v. drain ( ..n) ;
58
+ } else {
59
+ v. clear ( ) ;
60
+ }
61
+ }
62
+
63
+ // CHECK-LABEL: @remove
64
+ // CHECK: call
65
+ // CHECK: ret void
66
+ #[ no_mangle]
67
+ pub fn remove ( v : & mut VecDeque < i32 > , a : usize , b : usize ) {
68
+ v. drain ( a..b) ;
69
+ }
You can’t perform that action at this time.
0 commit comments