[INFO] updating cached repository wbowling/rcc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/wbowling/rcc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/wbowling/rcc" "work/ex/clippy-test-run/sources/stable/gh/wbowling/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/wbowling/rcc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/wbowling/rcc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/wbowling/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/wbowling/rcc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] b171df8755d07161c74dd0c688bfdc9b0a9b4f1d [INFO] sha for GitHub repo wbowling/rcc: b171df8755d07161c74dd0c688bfdc9b0a9b4f1d [INFO] validating manifest of wbowling/rcc on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of wbowling/rcc on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing wbowling/rcc [INFO] finished frobbing wbowling/rcc [INFO] frobbed toml for wbowling/rcc written to work/ex/clippy-test-run/sources/stable/gh/wbowling/rcc/Cargo.toml [INFO] started frobbing wbowling/rcc [INFO] finished frobbing wbowling/rcc [INFO] frobbed toml for wbowling/rcc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/wbowling/rcc/Cargo.toml [INFO] crate wbowling/rcc has a lockfile. skipping [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting wbowling/rcc against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/wbowling/rcc:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 817c5728b1045695d3af51c58585d2bc2e668ce578d0f4d1a0ddb73e48f303dc [INFO] running `"docker" "start" "-a" "817c5728b1045695d3af51c58585d2bc2e668ce578d0f4d1a0ddb73e48f303dc"` [INFO] [stderr] Checking either v1.4.0 [INFO] [stderr] Checking itertools v0.7.5 [INFO] [stderr] Checking rcc v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser/ast.rs:284:9 [INFO] [stderr] | [INFO] [stderr] 284 | / loop { [INFO] [stderr] 285 | | match self.peek() { [INFO] [stderr] 286 | | Some(Token::Question) => { [INFO] [stderr] 287 | | self.next(); [INFO] [stderr] ... | [INFO] [stderr] 294 | | } [INFO] [stderr] 295 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(Token::Question) = self.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:97:44 [INFO] [stderr] | [INFO] [stderr] 97 | fn gen_func_args(&mut self, arguments: &Vec) -> Assembly { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Variable]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:103:17 [INFO] [stderr] | [INFO] [stderr] 103 | / match arg { [INFO] [stderr] 104 | | &Variable { ref size, .. } => { [INFO] [stderr] 105 | | match size { [INFO] [stderr] 106 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 103 | match *arg { [INFO] [stderr] 104 | Variable { ref size, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:105:25 [INFO] [stderr] | [INFO] [stderr] 105 | / match size { [INFO] [stderr] 106 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] 107 | | &Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_byte(regs[i]))), [INFO] [stderr] 108 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 105 | match *size { [INFO] [stderr] 106 | Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] 107 | Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_byte(regs[i]))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in arguments.into_iter().enumerate()` or similar iterators [INFO] [stderr] --> src/parser/generate.rs:353:28 [INFO] [stderr] | [INFO] [stderr] 353 | for exp in arguments.into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:397:38 [INFO] [stderr] | [INFO] [stderr] 397 | fn gen_set_variable(&self, name: &String, var_map: &HashMap) -> Assembly { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:400:72 [INFO] [stderr] | [INFO] [stderr] 400 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match size { [INFO] [stderr] | ________________________________________________________________________^ [INFO] [stderr] 401 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], eax", index)), [INFO] [stderr] 402 | | &Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], al", index)), [INFO] [stderr] 403 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 400 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match *size { [INFO] [stderr] 401 | Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], eax", index)), [INFO] [stderr] 402 | Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], al", index)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:409:38 [INFO] [stderr] | [INFO] [stderr] 409 | fn gen_get_variable(&self, name: &String, var_map: &HashMap) -> Assembly { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:412:72 [INFO] [stderr] | [INFO] [stderr] 412 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match size { [INFO] [stderr] | ________________________________________________________________________^ [INFO] [stderr] 413 | | &Size::Int => asm.add(format!("mov eax, DWORD PTR[rbp + {}]", index)), [INFO] [stderr] 414 | | &Size::Byte => asm.add(format!("mov al, BYTE PTR[rbp + {}]", index)), [INFO] [stderr] 415 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 412 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match *size { [INFO] [stderr] 413 | Size::Int => asm.add(format!("mov eax, DWORD PTR[rbp + {}]", index)), [INFO] [stderr] 414 | Size::Byte => asm.add(format!("mov al, BYTE PTR[rbp + {}]", index)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:422:34 [INFO] [stderr] | [INFO] [stderr] 422 | fn get_var_sizes(statements: &Vec, arguments: &Vec) -> (HashMap, u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: change this to: `&[Statement]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:422:62 [INFO] [stderr] | [INFO] [stderr] 422 | fn get_var_sizes(statements: &Vec, arguments: &Vec) -> (HashMap, u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Variable]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:430:13 [INFO] [stderr] | [INFO] [stderr] 430 | / match arg { [INFO] [stderr] 431 | | &Variable { ref name, ref size } => { [INFO] [stderr] 432 | | Generator::check_var(&var_map, &name); [INFO] [stderr] 433 | | let s = match size { [INFO] [stderr] ... | [INFO] [stderr] 445 | | } [INFO] [stderr] 446 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 430 | match *arg { [INFO] [stderr] 431 | Variable { ref name, ref size } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:433:29 [INFO] [stderr] | [INFO] [stderr] 433 | let s = match size { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 434 | | &Size::Int => Size::Int, [INFO] [stderr] 435 | | &Size::Byte => Size::Byte [INFO] [stderr] 436 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 433 | let s = match *size { [INFO] [stderr] 434 | Size::Int => Size::Int, [INFO] [stderr] 435 | Size::Byte => Size::Byte [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:450:13 [INFO] [stderr] | [INFO] [stderr] 450 | / match statement { [INFO] [stderr] 451 | | &Statement::Exp(Expression::Assign(ref name, _)) | [INFO] [stderr] 452 | | &Statement::Exp(Expression::AssignPostfix(ref name, _)) | [INFO] [stderr] 453 | | &Statement::Exp(Expression::Variable(ref name)) | [INFO] [stderr] ... | [INFO] [stderr] 466 | | _ => (), [INFO] [stderr] 467 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 450 | match *statement { [INFO] [stderr] 451 | Statement::Exp(Expression::Assign(ref name, _)) | [INFO] [stderr] 452 | Statement::Exp(Expression::AssignPostfix(ref name, _)) | [INFO] [stderr] 453 | Statement::Exp(Expression::Variable(ref name)) | [INFO] [stderr] 454 | Statement::Exp(Expression::VariableRef(ref name)) => { [INFO] [stderr] 455 | Generator::check_no_var(&var_map, name) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:459:21 [INFO] [stderr] | [INFO] [stderr] 459 | / match size { [INFO] [stderr] 460 | | &Size::Int => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Int,i)), [INFO] [stderr] 461 | | &Size::Byte => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Byte,i)), [INFO] [stderr] 462 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 459 | match *size { [INFO] [stderr] 460 | Size::Int => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Int,i)), [INFO] [stderr] 461 | Size::Byte => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Byte,i)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:475:65 [INFO] [stderr] | [INFO] [stderr] 475 | fn check_var(var_map: &HashMap, name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:481:68 [INFO] [stderr] | [INFO] [stderr] 481 | fn check_no_var(var_map: &HashMap, name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser/ast.rs:284:9 [INFO] [stderr] | [INFO] [stderr] 284 | / loop { [INFO] [stderr] 285 | | match self.peek() { [INFO] [stderr] 286 | | Some(Token::Question) => { [INFO] [stderr] 287 | | self.next(); [INFO] [stderr] ... | [INFO] [stderr] 294 | | } [INFO] [stderr] 295 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(Token::Question) = self.peek() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:97:44 [INFO] [stderr] | [INFO] [stderr] 97 | fn gen_func_args(&mut self, arguments: &Vec) -> Assembly { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Variable]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:103:17 [INFO] [stderr] | [INFO] [stderr] 103 | / match arg { [INFO] [stderr] 104 | | &Variable { ref size, .. } => { [INFO] [stderr] 105 | | match size { [INFO] [stderr] 106 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] ... | [INFO] [stderr] 110 | | } [INFO] [stderr] 111 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 103 | match *arg { [INFO] [stderr] 104 | Variable { ref size, .. } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:105:25 [INFO] [stderr] | [INFO] [stderr] 105 | / match size { [INFO] [stderr] 106 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] 107 | | &Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_byte(regs[i]))), [INFO] [stderr] 108 | | } [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 105 | match *size { [INFO] [stderr] 106 | Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_dword(regs[i]))), [INFO] [stderr] 107 | Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], {}", (i as i32 + 1) * -8, Generator::reg_byte(regs[i]))), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the variable `i` is used as a loop counter. Consider using `for (i, item) in arguments.into_iter().enumerate()` or similar iterators [INFO] [stderr] --> src/parser/generate.rs:353:28 [INFO] [stderr] | [INFO] [stderr] 353 | for exp in arguments.into_iter() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:397:38 [INFO] [stderr] | [INFO] [stderr] 397 | fn gen_set_variable(&self, name: &String, var_map: &HashMap) -> Assembly { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:400:72 [INFO] [stderr] | [INFO] [stderr] 400 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match size { [INFO] [stderr] | ________________________________________________________________________^ [INFO] [stderr] 401 | | &Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], eax", index)), [INFO] [stderr] 402 | | &Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], al", index)), [INFO] [stderr] 403 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 400 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match *size { [INFO] [stderr] 401 | Size::Int => asm.add(format!("mov DWORD PTR[rbp + {}], eax", index)), [INFO] [stderr] 402 | Size::Byte => asm.add(format!("mov BYTE PTR[rbp + {}], al", index)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:409:38 [INFO] [stderr] | [INFO] [stderr] 409 | fn gen_get_variable(&self, name: &String, var_map: &HashMap) -> Assembly { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:412:72 [INFO] [stderr] | [INFO] [stderr] 412 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match size { [INFO] [stderr] | ________________________________________________________________________^ [INFO] [stderr] 413 | | &Size::Int => asm.add(format!("mov eax, DWORD PTR[rbp + {}]", index)), [INFO] [stderr] 414 | | &Size::Byte => asm.add(format!("mov al, BYTE PTR[rbp + {}]", index)), [INFO] [stderr] 415 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 412 | Some(&ProgVariable::StackVariable(ref size, ref index)) => match *size { [INFO] [stderr] 413 | Size::Int => asm.add(format!("mov eax, DWORD PTR[rbp + {}]", index)), [INFO] [stderr] 414 | Size::Byte => asm.add(format!("mov al, BYTE PTR[rbp + {}]", index)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:422:34 [INFO] [stderr] | [INFO] [stderr] 422 | fn get_var_sizes(statements: &Vec, arguments: &Vec) -> (HashMap, u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: change this to: `&[Statement]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/parser/generate.rs:422:62 [INFO] [stderr] | [INFO] [stderr] 422 | fn get_var_sizes(statements: &Vec, arguments: &Vec) -> (HashMap, u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: change this to: `&[Variable]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:430:13 [INFO] [stderr] | [INFO] [stderr] 430 | / match arg { [INFO] [stderr] 431 | | &Variable { ref name, ref size } => { [INFO] [stderr] 432 | | Generator::check_var(&var_map, &name); [INFO] [stderr] 433 | | let s = match size { [INFO] [stderr] ... | [INFO] [stderr] 445 | | } [INFO] [stderr] 446 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 430 | match *arg { [INFO] [stderr] 431 | Variable { ref name, ref size } => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:433:29 [INFO] [stderr] | [INFO] [stderr] 433 | let s = match size { [INFO] [stderr] | _____________________________^ [INFO] [stderr] 434 | | &Size::Int => Size::Int, [INFO] [stderr] 435 | | &Size::Byte => Size::Byte [INFO] [stderr] 436 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 433 | let s = match *size { [INFO] [stderr] 434 | Size::Int => Size::Int, [INFO] [stderr] 435 | Size::Byte => Size::Byte [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:450:13 [INFO] [stderr] | [INFO] [stderr] 450 | / match statement { [INFO] [stderr] 451 | | &Statement::Exp(Expression::Assign(ref name, _)) | [INFO] [stderr] 452 | | &Statement::Exp(Expression::AssignPostfix(ref name, _)) | [INFO] [stderr] 453 | | &Statement::Exp(Expression::Variable(ref name)) | [INFO] [stderr] ... | [INFO] [stderr] 466 | | _ => (), [INFO] [stderr] 467 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 450 | match *statement { [INFO] [stderr] 451 | Statement::Exp(Expression::Assign(ref name, _)) | [INFO] [stderr] 452 | Statement::Exp(Expression::AssignPostfix(ref name, _)) | [INFO] [stderr] 453 | Statement::Exp(Expression::Variable(ref name)) | [INFO] [stderr] 454 | Statement::Exp(Expression::VariableRef(ref name)) => { [INFO] [stderr] 455 | Generator::check_no_var(&var_map, name) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser/generate.rs:459:21 [INFO] [stderr] | [INFO] [stderr] 459 | / match size { [INFO] [stderr] 460 | | &Size::Int => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Int,i)), [INFO] [stderr] 461 | | &Size::Byte => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Byte,i)), [INFO] [stderr] 462 | | }; [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 459 | match *size { [INFO] [stderr] 460 | Size::Int => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Int,i)), [INFO] [stderr] 461 | Size::Byte => var_map.insert(name.clone(), ProgVariable::StackVariable(Size::Byte,i)), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:475:65 [INFO] [stderr] | [INFO] [stderr] 475 | fn check_var(var_map: &HashMap, name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/parser/generate.rs:481:68 [INFO] [stderr] | [INFO] [stderr] 481 | fn check_no_var(var_map: &HashMap, name: &String) { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 4.44s [INFO] running `"docker" "inspect" "817c5728b1045695d3af51c58585d2bc2e668ce578d0f4d1a0ddb73e48f303dc"` [INFO] running `"docker" "rm" "-f" "817c5728b1045695d3af51c58585d2bc2e668ce578d0f4d1a0ddb73e48f303dc"` [INFO] [stdout] 817c5728b1045695d3af51c58585d2bc2e668ce578d0f4d1a0ddb73e48f303dc