]> git.proxmox.com Git - rustc.git/blob - src/test/compile-fail/lint-unused-mut-variables.rs
Imported Upstream version 1.3.0+dfsg1
[rustc.git] / src / test / compile-fail / lint-unused-mut-variables.rs
1 // Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Exercise the unused_mut attribute in some positive and negative cases
12
13 #![allow(unused_assignments)]
14 #![allow(unused_variables)]
15 #![allow(dead_code)]
16 #![deny(unused_mut)]
17
18
19 fn main() {
20 // negative cases
21 let mut a = 3; //~ ERROR: variable does not need to be mutable
22 let mut a = 2; //~ ERROR: variable does not need to be mutable
23 let mut b = 3; //~ ERROR: variable does not need to be mutable
24 let mut a = vec!(3); //~ ERROR: variable does not need to be mutable
25 let (mut a, b) = (1, 2); //~ ERROR: variable does not need to be mutable
26 let mut a; //~ ERROR: variable does not need to be mutable
27 a = 3;
28
29 let mut b; //~ ERROR: variable does not need to be mutable
30 if true {
31 b = 3;
32 } else {
33 b = 4;
34 }
35
36 match 30 {
37 mut x => {} //~ ERROR: variable does not need to be mutable
38 }
39 match (30, 2) {
40 (mut x, 1) | //~ ERROR: variable does not need to be mutable
41 (mut x, 2) |
42 (mut x, 3) => {
43 }
44 _ => {}
45 }
46
47 let x = |mut y: isize| 10; //~ ERROR: variable does not need to be mutable
48 fn what(mut foo: isize) {} //~ ERROR: variable does not need to be mutable
49
50 // positive cases
51 let mut a = 2;
52 a = 3;
53 let mut a = Vec::new();
54 a.push(3);
55 let mut a = Vec::new();
56 callback(|| {
57 a.push(3);
58 });
59 let (mut a, b) = (1, 2);
60 a = 34;
61
62 match 30 {
63 mut x => {
64 x = 21;
65 }
66 }
67
68 match (30, 2) {
69 (mut x, 1) |
70 (mut x, 2) |
71 (mut x, 3) => {
72 x = 21
73 }
74 _ => {}
75 }
76
77 let x = |mut y: isize| y = 32;
78 fn nothing(mut foo: isize) { foo = 37; }
79
80 // leading underscore should avoid the warning, just like the
81 // unused variable lint.
82 let mut _allowed = 1;
83 }
84
85 fn callback<F>(f: F) where F: FnOnce() {}
86
87 // make sure the lint attribute can be turned off
88 #[allow(unused_mut)]
89 fn foo(mut a: isize) {
90 let mut a = 3;
91 let mut b = vec!(2);
92 }