blob: 639d7c2776dee3e173e8c30a0f4cda09e8b3fa2f [file] [log] [blame] [edit]
#![warn(unused)]
#![deny(unused_variables)]
#![deny(unused_assignments)]
#![allow(dead_code, non_camel_case_types, trivial_numeric_casts, dropping_copy_types)]
#![feature(intrinsics)]
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;
//~^ ERROR value assigned to `z` is never read
}
}
#[allow(unused_variables)]
fn f3c() {
let mut z = 3;
loop { z += 4; }
//~^ ERROR value assigned to `z` is never read
}
#[allow(unused_variables)]
#[allow(unused_assignments)]
fn f3d() {
let mut x = 3;
x += 4;
}
fn f3e() {
let a = 13;
let mut z = 3;
//~^ ERROR variable `z` is assigned to, but never used
loop {
z += a;
//~^ ERROR value assigned to `z` is never read
}
}
fn f4() {
match Some(3) {
Some(i) => {
//~^ ERROR unused variable: `i`
}
None => {}
}
}
enum tri {
a(isize), b(isize), c(isize)
}
fn f4b() {
match tri::a(3) {
tri::a(i) | tri::b(i) | tri::c(i) => {
//~^ ERROR unused variable: `i`
}
}
}
fn f4c() -> isize {
match tri::a(3) {
tri::a(i) | tri::b(i) | tri::c(i) => {
i
}
}
}
fn f4d() {
match tri::a(3) {
tri::a(i) | tri::b(i) | tri::c(i) if i == 0 => {}
_ => {}
}
}
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 f8(a: u32) {
let _ = a;
}
fn f9() {
let mut a = 10;
//~^ ERROR variable `a` is assigned to, but never used
let b = 13;
let c = 13;
let d = 13;
let e = 13;
let f = 13;
let g = 13;
let h = 13;
a += b;
//~^ ERROR value assigned to `a` is never read
a -= c;
//~^ ERROR value assigned to `a` is never read
a *= d;
//~^ ERROR value assigned to `a` is never read
a /= e;
//~^ ERROR value assigned to `a` is never read
a |= f;
//~^ ERROR value assigned to `a` is never read
a &= g;
//~^ ERROR value assigned to `a` is never read
a %= h;
//~^ ERROR value assigned to `a` is never read
}
fn f9b() {
let mut a = 10;
let b = 13;
let c = 13;
let d = 13;
let e = 13;
let f = 13;
let g = 13;
let h = 13;
a += b;
a -= c;
a *= d;
a /= e;
a |= f;
a &= g;
a %= h;
let _ = a;
}
fn f9c() {
let mut a = 10.;
//~^ ERROR variable `a` is assigned to, but never used
let b = 13.;
let c = 13.;
let d = 13.;
let e = 13.;
let f = 13.;
a += b;
//~^ ERROR value assigned to `a` is never read
a -= c;
//~^ ERROR value assigned to `a` is never read
a *= d;
//~^ ERROR value assigned to `a` is never read
a /= e;
//~^ ERROR value assigned to `a` is never read
a %= f;
//~^ ERROR value assigned to `a` is never read
}
fn f10<T>(mut a: T, b: T) {
//~^ ERROR variable `a` is assigned to, but never used
a = b;
//~^ ERROR value assigned to `a` is never read
}
fn f10b<T>(mut a: Box<T>, b: Box<T>) {
a = b;
}
// unused params warnings are not needed for intrinsic functions without bodies
#[rustc_intrinsic]
unsafe fn simd_shuffle<T, I, U>(a: T, b: T, i: I) -> U;
fn main() {
}