Merge pull request #17756 from geoffw0/unusedvar6

Rust: More test cases for rust/unused-variable
This commit is contained in:
Geoffrey White 2024-10-15 10:02:37 +01:00 коммит произвёл GitHub
Родитель 508e8157b3 5e33d9a145
Коммит 7d9a3e1399
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
5 изменённых файлов: 171 добавлений и 26 удалений

Просмотреть файл

@ -0,0 +1,11 @@
multipleSuccessors
| main.rs:428:17:428:17 | 0 | successor | main.rs:428:9:428:10 | a2 |
| main.rs:428:17:428:17 | 0 | successor | main.rs:428:20:428:62 | ClosureExpr |
| main.rs:431:17:431:17 | 0 | successor | main.rs:431:9:431:10 | a3 |
| main.rs:431:17:431:17 | 0 | successor | main.rs:431:20:431:41 | ClosureExpr |
| main.rs:434:17:434:17 | 0 | successor | main.rs:434:9:434:10 | a4 |
| main.rs:434:17:434:17 | 0 | successor | main.rs:434:20:434:35 | ClosureExpr |
| main.rs:437:17:437:17 | 0 | successor | main.rs:437:9:437:10 | a5 |
| main.rs:437:17:437:17 | 0 | successor | main.rs:437:20:437:35 | ClosureExpr |
| main.rs:441:17:441:17 | 0 | successor | main.rs:441:9:441:10 | a6 |
| main.rs:441:17:441:17 | 0 | successor | main.rs:441:20:441:46 | ClosureExpr |

Просмотреть файл

@ -3,12 +3,12 @@
| unreachable.rs:32:3:32:17 | ExprStmt | This code is never reached. |
| unreachable.rs:39:3:39:17 | ExprStmt | This code is never reached. |
| unreachable.rs:60:2:60:16 | ExprStmt | This code is never reached. |
| unreachable.rs:100:16:100:23 | ExprStmt | This code is never reached. |
| unreachable.rs:108:15:108:22 | ExprStmt | This code is never reached. |
| unreachable.rs:124:2:124:16 | ExprStmt | This code is never reached. |
| unreachable.rs:134:2:134:16 | ExprStmt | This code is never reached. |
| unreachable.rs:141:3:141:17 | ExprStmt | This code is never reached. |
| unreachable.rs:150:4:150:18 | ExprStmt | This code is never reached. |
| unreachable.rs:156:3:156:17 | ExprStmt | This code is never reached. |
| unreachable.rs:162:4:162:18 | ExprStmt | This code is never reached. |
| unreachable.rs:165:2:165:16 | ExprStmt | This code is never reached. |
| unreachable.rs:106:16:106:23 | ExprStmt | This code is never reached. |
| unreachable.rs:114:15:114:22 | ExprStmt | This code is never reached. |
| unreachable.rs:130:2:130:16 | ExprStmt | This code is never reached. |
| unreachable.rs:140:2:140:16 | ExprStmt | This code is never reached. |
| unreachable.rs:147:3:147:17 | ExprStmt | This code is never reached. |
| unreachable.rs:156:4:156:18 | ExprStmt | This code is never reached. |
| unreachable.rs:162:3:162:17 | ExprStmt | This code is never reached. |
| unreachable.rs:168:4:168:18 | ExprStmt | This code is never reached. |
| unreachable.rs:171:2:171:16 | ExprStmt | This code is never reached. |

Просмотреть файл

@ -1,16 +1,22 @@
| main.rs:25:9:25:9 | a | Variable is not used. |
| main.rs:90:13:90:13 | d | Variable is not used. |
| main.rs:141:5:141:5 | y | Variable is not used. |
| main.rs:164:9:164:9 | x | Variable is not used. |
| main.rs:202:17:202:17 | a | Variable is not used. |
| main.rs:210:20:210:22 | val | Variable is not used. |
| main.rs:223:14:223:16 | val | Variable is not used. |
| main.rs:240:22:240:24 | val | Variable is not used. |
| main.rs:248:24:248:26 | val | Variable is not used. |
| main.rs:257:13:257:15 | num | Variable is not used. |
| main.rs:272:12:272:12 | j | Variable is not used. |
| main.rs:294:25:294:25 | y | Variable is not used. |
| main.rs:298:28:298:28 | a | Variable is not used. |
| main.rs:302:9:302:9 | p | Variable is not used. |
| main.rs:309:13:309:13 | y | Variable is not used. |
| main.rs:317:21:317:21 | y | Variable is not used. |
| main.rs:168:9:168:9 | x | Variable is not used. |
| main.rs:196:9:196:9 | x | Variable is not used. |
| main.rs:201:9:201:9 | x | Variable is not used. |
| main.rs:250:17:250:17 | a | Variable is not used. |
| main.rs:258:20:258:22 | val | Variable is not used. |
| main.rs:271:14:271:16 | val | Variable is not used. |
| main.rs:288:22:288:24 | val | Variable is not used. |
| main.rs:296:24:296:26 | val | Variable is not used. |
| main.rs:305:13:305:15 | num | Variable is not used. |
| main.rs:320:12:320:12 | j | Variable is not used. |
| main.rs:342:25:342:25 | y | Variable is not used. |
| main.rs:346:28:346:28 | a | Variable is not used. |
| main.rs:350:9:350:9 | p | Variable is not used. |
| main.rs:365:9:365:13 | right | Variable is not used. |
| main.rs:371:9:371:14 | right2 | Variable is not used. |
| main.rs:378:13:378:13 | y | Variable is not used. |
| main.rs:386:21:386:21 | y | Variable is not used. |
| main.rs:434:27:434:29 | val | Variable is not used. |
| main.rs:437:22:437:24 | acc | Variable is not used. |

Просмотреть файл

@ -146,6 +146,10 @@ fn parameters(
// --- loops ---
fn id(v: i32) -> i32 {
return v;
}
fn loops() {
let mut a: i64 = 10;
let b: i64 = 20;
@ -171,10 +175,54 @@ fn loops() {
println!("x is {}", x);
}
for x
in 1..10 {
println!("x is {:?}", x);
}
for x
in 1..10 {
println!("x + 1 is {}", x + 1);
}
for x
in 1..10 {
for y
in 1..x {
println!("y is {}", y);
}
}
for x // SPURIOUS: unused variable
in 1..10 {
println!("x is {x}");
}
for x // SPURIOUS: unused variable
in 1..10 {
_ = format!("x is {x}");
}
for x
in 1..10 {
println!("x is {val}", val = x);
}
for x
in 1..10 {
assert!(x != 11);
}
for x
in 1..10 {
assert_eq!(x, 1);
}
for x
in 1..10 {
assert_eq!(id(x), id(1));
}
}
// --- lets ---
@ -302,6 +350,27 @@ fn if_lets_matches() {
p => { // BAD: unused variable
}
}
let duration1 = std::time::Duration::new(10, 0); // ten seconds
assert_eq!(duration1.as_secs(), 10);
let duration2:Result<std::time::Duration, String> =
Ok(std::time::Duration::new(10, 0));
match duration2 {
Ok(n) => { println!("duration was {} seconds", n.as_secs()); }
Err(_) => { println!("failed"); }
}
let (left,
right) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
(1, 2);
_ = left;
let pair = (1, 2);
let (left2,
right2) = // BAD: unused value [NOT DETECTED] SPURIOUS: unused variable
pair;
_ = left2;
}
fn shadowing() -> i32 {
@ -322,7 +391,58 @@ fn shadowing() -> i32 {
}
}
// --- function pointers ---
type FuncPtr = fn(i32) -> i32;
fn increment(x: i32) -> i32 {
return x + 1;
}
fn func_ptrs() {
let my_func: FuncPtr = increment;
for x
in 1..10 {
_ = x + 1;
}
for x
in 1..10 {
_ = increment(x);
}
for x
in 1..10 {
_ = my_func(x);
}
}
// --- folds and closures ---
fn folds_and_closures() {
let a1 = 1..10;
_ = a1.sum::<i32>();
let a2 = 1..10;
_ = a2.fold(0, | acc: i32, val: i32 | -> i32 { acc + val } );
let a3 = 1..10;
_ = a3.fold(0, | acc, val | acc + val);
let a4 = 1..10;
_ = a4.fold(0, | acc, val | acc); // BAD: unused variable
let a5 = 1..10;
_ = a5.fold(0, | acc, val | val); // BAD: unused variable
let i6 = 1;
let a6 = 1..10;
_ = a6.fold(0, | acc, val | acc + val + i6);
}
// --- main ---
fn main() {
locals_1();
locals_2();
@ -333,6 +453,8 @@ fn main() {
loops();
if_lets_matches();
shadowing();
func_ptrs();
folds_and_closures();
unreachable_if();
unreachable_panic();

Просмотреть файл

@ -79,6 +79,12 @@ fn unreachable_panic() {
do_something(); // BAD: unreachable code [NOT DETECTED]
}
if cond() {
do_something();
unreachable!();
do_something(); // BAD: unreachable code [NOT DETECTED]
}
if cond() {
let mut maybe;
@ -97,16 +103,16 @@ fn unreachable_panic() {
if cond() {
do_something();
_ = false && panic!(); // does not panic due to short-circuiting
do_something(); // SPURIOUS: unreachable
_ = false && panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable
do_something();
_ = false || panic!();
do_something(); // BAD: unreachable code [NOT DETECTED]
}
if cond() {
do_something();
_ = true || panic!(); // does not panic due to short-circuiting
do_something(); // SPURIOUS: unreachable
_ = true || panic!(); // does not panic due to short-circuiting SPURIOUS: unreachable
do_something();
_ = true && panic!();
do_something(); // BAD: unreachable code [NOT DETECTED]
}