]> git.lizzy.rs Git - rust.git/blob - tests/ui/liveness/liveness-unused.rs
Don't resolve type var roots in point_at_expr_source_of_inferred_type
[rust.git] / tests / ui / liveness / liveness-unused.rs
1 #![warn(unused)]
2 #![deny(unused_variables)]
3 #![deny(unused_assignments)]
4 #![allow(dead_code, non_camel_case_types, trivial_numeric_casts)]
5
6 use std::ops::AddAssign;
7
8 fn f1(x: isize) {
9     //~^ ERROR unused variable: `x`
10 }
11
12 fn f1b(x: &mut isize) {
13     //~^ ERROR unused variable: `x`
14 }
15
16 #[allow(unused_variables)]
17 fn f1c(x: isize) {}
18
19 fn f1d() {
20     let x: isize;
21     //~^ ERROR unused variable: `x`
22 }
23
24 fn f2() {
25     let x = 3;
26     //~^ ERROR unused variable: `x`
27 }
28
29 fn f3() {
30     let mut x = 3;
31     //~^ ERROR variable `x` is assigned to, but never used
32     x += 4;
33     //~^ ERROR value assigned to `x` is never read
34 }
35
36 fn f3b() {
37     let mut z = 3;
38     //~^ ERROR variable `z` is assigned to, but never used
39     loop {
40         z += 4;
41     }
42 }
43
44 #[allow(unused_variables)]
45 fn f3c() {
46     let mut z = 3;
47     loop { z += 4; }
48 }
49
50 #[allow(unused_variables)]
51 #[allow(unused_assignments)]
52 fn f3d() {
53     let mut x = 3;
54     x += 4;
55 }
56
57 fn f4() {
58     match Some(3) {
59       Some(i) => {
60         //~^ ERROR unused variable: `i`
61       }
62       None => {}
63     }
64 }
65
66 enum tri {
67     a(isize), b(isize), c(isize)
68 }
69
70 fn f4b() -> isize {
71     match tri::a(3) {
72       tri::a(i) | tri::b(i) | tri::c(i) => {
73         i
74       }
75     }
76 }
77
78 fn f5a() {
79     for x in 1..10 { }
80     //~^ ERROR unused variable: `x`
81 }
82
83 fn f5b() {
84     for (x, _) in [1, 2, 3].iter().enumerate() { }
85     //~^ ERROR unused variable: `x`
86 }
87
88 fn f5c() {
89     for (_, x) in [1, 2, 3].iter().enumerate() {
90     //~^ ERROR unused variable: `x`
91         continue;
92         drop(*x as i32); //~ WARNING unreachable statement
93     }
94 }
95
96 struct View<'a>(&'a mut [i32]);
97
98 impl<'a> AddAssign<i32> for View<'a> {
99     fn add_assign(&mut self, rhs: i32) {
100         for lhs in self.0.iter_mut() {
101             *lhs += rhs;
102         }
103     }
104 }
105
106 fn f6() {
107     let mut array = [1, 2, 3];
108     let mut v = View(&mut array);
109
110     // ensure an error shows up for x even if lhs of an overloaded add assign
111
112     let x;
113     //~^ ERROR variable `x` is assigned to, but never used
114
115     *({
116         x = 0;  //~ ERROR value assigned to `x` is never read
117         &mut v
118     }) += 1;
119 }
120
121
122 struct MutRef<'a>(&'a mut i32);
123
124 impl<'a> AddAssign<i32> for MutRef<'a> {
125     fn add_assign(&mut self, rhs: i32) {
126         *self.0 += rhs;
127     }
128 }
129
130 fn f7() {
131     let mut a = 1;
132     {
133         // `b` does not trigger unused_variables
134         let mut b = MutRef(&mut a);
135         b += 1;
136     }
137     drop(a);
138 }
139
140 fn main() {
141 }