File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Expand file tree Collapse file tree 1 file changed +68
-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
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+ #[ no_mangle]
66+ pub fn remove ( v : & mut VecDeque < i32 > , a : usize , b : usize ) {
67+ v. drain ( a..b) ;
68+ }
You can’t perform that action at this time.
0 commit comments