142 lines
2.4 KiB
Rust
142 lines
2.4 KiB
Rust
#![warn(unused)]
|
|
#![deny(unused_variables)]
|
|
#![deny(unused_assignments)]
|
|
#![allow(dead_code, non_camel_case_types, trivial_numeric_casts, drop_copy)]
|
|
|
|
use std::ops::AddAssign;
|
|
|
|
fn f1(x: isize) {
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
fn f1b(x: &mut isize) {
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
#[allow(unused_variables)]
|
|
fn f1c(x: isize) {}
|
|
|
|
fn f1d() {
|
|
let x: isize;
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
fn f2() {
|
|
let x = 3;
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
fn f3() {
|
|
let mut x = 3;
|
|
//~^ ERROR variable `x` is assigned to, but never used
|
|
x += 4;
|
|
//~^ ERROR value assigned to `x` is never read
|
|
}
|
|
|
|
fn f3b() {
|
|
let mut z = 3;
|
|
//~^ ERROR variable `z` is assigned to, but never used
|
|
loop {
|
|
z += 4;
|
|
}
|
|
}
|
|
|
|
#[allow(unused_variables)]
|
|
fn f3c() {
|
|
let mut z = 3;
|
|
loop { z += 4; }
|
|
}
|
|
|
|
#[allow(unused_variables)]
|
|
#[allow(unused_assignments)]
|
|
fn f3d() {
|
|
let mut x = 3;
|
|
x += 4;
|
|
}
|
|
|
|
fn f4() {
|
|
match Some(3) {
|
|
Some(i) => {
|
|
//~^ ERROR unused variable: `i`
|
|
}
|
|
None => {}
|
|
}
|
|
}
|
|
|
|
enum tri {
|
|
a(isize), b(isize), c(isize)
|
|
}
|
|
|
|
fn f4b() -> isize {
|
|
match tri::a(3) {
|
|
tri::a(i) | tri::b(i) | tri::c(i) => {
|
|
i
|
|
}
|
|
}
|
|
}
|
|
|
|
fn f5a() {
|
|
for x in 1..10 { }
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
fn f5b() {
|
|
for (x, _) in [1, 2, 3].iter().enumerate() { }
|
|
//~^ ERROR unused variable: `x`
|
|
}
|
|
|
|
fn f5c() {
|
|
for (_, x) in [1, 2, 3].iter().enumerate() {
|
|
//~^ ERROR unused variable: `x`
|
|
continue;
|
|
drop(*x as i32); //~ WARNING unreachable statement
|
|
}
|
|
}
|
|
|
|
struct View<'a>(&'a mut [i32]);
|
|
|
|
impl<'a> AddAssign<i32> for View<'a> {
|
|
fn add_assign(&mut self, rhs: i32) {
|
|
for lhs in self.0.iter_mut() {
|
|
*lhs += rhs;
|
|
}
|
|
}
|
|
}
|
|
|
|
fn f6() {
|
|
let mut array = [1, 2, 3];
|
|
let mut v = View(&mut array);
|
|
|
|
// ensure an error shows up for x even if lhs of an overloaded add assign
|
|
|
|
let x;
|
|
//~^ ERROR variable `x` is assigned to, but never used
|
|
|
|
*({
|
|
x = 0; //~ ERROR value assigned to `x` is never read
|
|
&mut v
|
|
}) += 1;
|
|
}
|
|
|
|
|
|
struct MutRef<'a>(&'a mut i32);
|
|
|
|
impl<'a> AddAssign<i32> for MutRef<'a> {
|
|
fn add_assign(&mut self, rhs: i32) {
|
|
*self.0 += rhs;
|
|
}
|
|
}
|
|
|
|
fn f7() {
|
|
let mut a = 1;
|
|
{
|
|
// `b` does not trigger unused_variables
|
|
let mut b = MutRef(&mut a);
|
|
b += 1;
|
|
}
|
|
drop(a);
|
|
}
|
|
|
|
fn main() {
|
|
}
|