Skip to content

Commit 7d9a3e1

Browse files
authored
Merge pull request #17756 from geoffw0/unusedvar6
Rust: More test cases for rust/unused-variable
2 parents 508e815 + 5e33d9a commit 7d9a3e1

File tree

5 files changed

+171
-26
lines changed

5 files changed

+171
-26
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
multipleSuccessors
2+
| main.rs:428:17:428:17 | 0 | successor | main.rs:428:9:428:10 | a2 |
3+
| main.rs:428:17:428:17 | 0 | successor | main.rs:428:20:428:62 | ClosureExpr |
4+
| main.rs:431:17:431:17 | 0 | successor | main.rs:431:9:431:10 | a3 |
5+
| main.rs:431:17:431:17 | 0 | successor | main.rs:431:20:431:41 | ClosureExpr |
6+
| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a4 |
7+
| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:35 | ClosureExpr |
8+
| main.rs:437:17:437:17 | 0 | successor | main.rs:437:9:437:10 | a5 |
9+
| main.rs:437:17:437:17 | 0 | successor | main.rs:437:20:437:35 | ClosureExpr |
10+
| main.rs:441:17:441:17 | 0 | successor | main.rs:441:9:441:10 | a6 |
11+
| main.rs:441:17:441:17 | 0 | successor | main.rs:441:20:441:46 | ClosureExpr |

rust/ql/test/query-tests/unusedentities/UnreachableCode.expected

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
| unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. |
44
| unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. |
55
| unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. |
6-
| unreachable.rs:100:16:100:23 | ExprStmt | This code is never reached. |
7-
| unreachable.rs:108:15:108:22 | ExprStmt | This code is never reached. |
8-
| unreachable.rs:124:2:124:16 | ExprStmt | This code is never reached. |
9-
| unreachable.rs:134:2:134:16 | ExprStmt | This code is never reached. |
10-
| unreachable.rs:141:3:141:17 | ExprStmt | This code is never reached. |
11-
| unreachable.rs:150:4:150:18 | ExprStmt | This code is never reached. |
12-
| unreachable.rs:156:3:156:17 | ExprStmt | This code is never reached. |
13-
| unreachable.rs:162:4:162:18 | ExprStmt | This code is never reached. |
14-
| unreachable.rs:165:2:165:16 | ExprStmt | This code is never reached. |
6+
| unreachable.rs:106:16:106:23 | ExprStmt | This code is never reached. |
7+
| unreachable.rs:114:15:114:22 | ExprStmt | This code is never reached. |
8+
| unreachable.rs:130:2:130:16 | ExprStmt | This code is never reached. |
9+
| unreachable.rs:140:2:140:16 | ExprStmt | This code is never reached. |
10+
| unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. |
11+
| unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. |
12+
| unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. |
13+
| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. |
14+
| unreachable.rs:171:2:171:16 | ExprStmt | This code is never reached. |
Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
| main.rs:25:9:25:9 | a | Variable is not used. |
22
| main.rs:90:13:90:13 | d | Variable is not used. |
33
| main.rs:141:5:141:5 | y | Variable is not used. |
4-
| main.rs:164:9:164:9 | x | Variable is not used. |
5-
| main.rs:202:17:202:17 | a | Variable is not used. |
6-
| main.rs:210:20:210:22 | val | Variable is not used. |
7-
| main.rs:223:14:223:16 | val | Variable is not used. |
8-
| main.rs:240:22:240:24 | val | Variable is not used. |
9-
| main.rs:248:24:248:26 | val | Variable is not used. |
10-
| main.rs:257:13:257:15 | num | Variable is not used. |
11-
| main.rs:272:12:272:12 | j | Variable is not used. |
12-
| main.rs:294:25:294:25 | y | Variable is not used. |
13-
| main.rs:298:28:298:28 | a | Variable is not used. |
14-
| main.rs:302:9:302:9 | p | Variable is not used. |
15-
| main.rs:309:13:309:13 | y | Variable is not used. |
16-
| main.rs:317:21:317:21 | y | Variable is not used. |
4+
| main.rs:168:9:168:9 | x | Variable is not used. |
5+
| main.rs:196:9:196:9 | x | Variable is not used. |
6+
| main.rs:201:9:201:9 | x | Variable is not used. |
7+
| main.rs:250:17:250:17 | a | Variable is not used. |
8+
| main.rs:258:20:258:22 | val | Variable is not used. |
9+
| main.rs:271:14:271:16 | val | Variable is not used. |
10+
| main.rs:288:22:288:24 | val | Variable is not used. |
11+
| main.rs:296:24:296:26 | val | Variable is not used. |
12+
| main.rs:305:13:305:15 | num | Variable is not used. |
13+
| main.rs:320:12:320:12 | j | Variable is not used. |
14+
| main.rs:342:25:342:25 | y | Variable is not used. |
15+
| main.rs:346:28:346:28 | a | Variable is not used. |
16+
| main.rs:350:9:350:9 | p | Variable is not used. |
17+
| main.rs:365:9:365:13 | right | Variable is not used. |
18+
| main.rs:371:9:371:14 | right2 | Variable is not used. |
19+
| main.rs:378:13:378:13 | y | Variable is not used. |
20+
| main.rs:386:21:386:21 | y | Variable is not used. |
21+
| main.rs:434:27:434:29 | val | Variable is not used. |
22+
| main.rs:437:22:437:24 | acc | Variable is not used. |

rust/ql/test/query-tests/unusedentities/main.rs

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@ fn parameters(
146146

147147
// --- loops ---
148148

149+
fn id(v: i32) -> i32 {
150+
return v;
151+
}
152+
149153
fn loops() {
150154
let mut a: i64 = 10;
151155
let b: i64 = 20;
@@ -171,10 +175,54 @@ fn loops() {
171175
println!("x is {}", x);
172176
}
173177

178+
for x
179+
in 1..10 {
180+
println!("x is {:?}", x);
181+
}
182+
183+
for x
184+
in 1..10 {
185+
println!("x + 1 is {}", x + 1);
186+
}
187+
188+
for x
189+
in 1..10 {
190+
for y
191+
in 1..x {
192+
println!("y is {}", y);
193+
}
194+
}
195+
196+
for x // SPURIOUS: unused variable
197+
in 1..10 {
198+
println!("x is {x}");
199+
}
200+
201+
for x // SPURIOUS: unused variable
202+
in 1..10 {
203+
_ = format!("x is {x}");
204+
}
205+
206+
for x
207+
in 1..10 {
208+
println!("x is {val}", val = x);
209+
}
210+
174211
for x
175212
in 1..10 {
176213
assert!(x != 11);
177214
}
215+
216+
for x
217+
in 1..10 {
218+
assert_eq!(x, 1);
219+
}
220+
221+
for x
222+
in 1..10 {
223+
assert_eq!(id(x), id(1));
224+
}
225+
178226
}
179227

180228
// --- lets ---
@@ -302,6 +350,27 @@ fn if_lets_matches() {
302350
p => { // BAD: unused variable
303351
}
304352
}
353+
354+
let duration1 = std::time::Duration::new(10, 0); // ten seconds
355+
assert_eq!(duration1.as_secs(), 10);
356+
357+
let duration2:Result<std::time::Duration, String> =
358+
Ok(std::time::Duration::new(10, 0));
359+
match duration2 {
360+
Ok(n) => { println!("duration was {} seconds", n.as_secs()); }
361+
Err(_) => { println!("failed"); }
362+
}
363+
364+
let (left,
365+
right) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
366+
(1, 2);
367+
_ = left;
368+
369+
let pair = (1, 2);
370+
let (left2,
371+
right2) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
372+
pair;
373+
_ = left2;
305374
}
306375

307376
fn shadowing() -> i32 {
@@ -322,7 +391,58 @@ fn shadowing() -> i32 {
322391
}
323392
}
324393

394+
// --- function pointers ---
395+
396+
type FuncPtr = fn(i32) -> i32;
397+
398+
fn increment(x: i32) -> i32 {
399+
return x + 1;
400+
}
401+
402+
fn func_ptrs() {
403+
let my_func: FuncPtr = increment;
404+
405+
for x
406+
in 1..10 {
407+
_ = x + 1;
408+
}
409+
410+
for x
411+
in 1..10 {
412+
_ = increment(x);
413+
}
414+
415+
for x
416+
in 1..10 {
417+
_ = my_func(x);
418+
}
419+
}
420+
421+
// --- folds and closures ---
422+
423+
fn folds_and_closures() {
424+
let a1 = 1..10;
425+
_ = a1.sum::<i32>();
426+
427+
let a2 = 1..10;
428+
_ = a2.fold(0, | acc: i32, val: i32 | -> i32 { acc + val } );
429+
430+
let a3 = 1..10;
431+
_ = a3.fold(0, | acc, val | acc + val);
432+
433+
let a4 = 1..10;
434+
_ = a4.fold(0, | acc, val | acc); // BAD: unused variable
435+
436+
let a5 = 1..10;
437+
_ = a5.fold(0, | acc, val | val); // BAD: unused variable
438+
439+
let i6 = 1;
440+
let a6 = 1..10;
441+
_ = a6.fold(0, | acc, val | acc + val + i6);
442+
}
443+
325444
// --- main ---
445+
326446
fn main() {
327447
locals_1();
328448
locals_2();
@@ -333,6 +453,8 @@ fn main() {
333453
loops();
334454
if_lets_matches();
335455
shadowing();
456+
func_ptrs();
457+
folds_and_closures();
336458

337459
unreachable_if();
338460
unreachable_panic();

rust/ql/test/query-tests/unusedentities/unreachable.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ fn unreachable_panic() {
7979
do_something(); // BAD: unreachable code [NOT DETECTED]
8080
}
8181

82+
if cond() {
83+
do_something();
84+
unreachable!();
85+
do_something(); // BAD: unreachable code [NOT DETECTED]
86+
}
87+
8288
if cond() {
8389
let mut maybe;
8490

@@ -97,16 +103,16 @@ fn unreachable_panic() {
97103

98104
if cond() {
99105
do_something();
100-
_ = false && panic!(); // does not panic due to short-circuiting
101-
do_something(); // SPURIOUS: unreachable
106+
_ = false && panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable
107+
do_something();
102108
_ = false || panic!();
103109
do_something(); // BAD: unreachable code [NOT DETECTED]
104110
}
105111

106112
if cond() {
107113
do_something();
108-
_ = true || panic!(); // does not panic due to short-circuiting
109-
do_something(); // SPURIOUS: unreachable
114+
_ = true || panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable
115+
do_something();
110116
_ = true && panic!();
111117
do_something(); // BAD: unreachable code [NOT DETECTED]
112118
}

0 commit comments

Comments
 (0)