[INFO] updating cached repository quells/rcc [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/quells/rcc [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/quells/rcc" "work/ex/clippy-test-run/sources/stable/gh/quells/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/quells/rcc'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/quells/rcc" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/quells/rcc"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/quells/rcc'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] a19454b6b33872efb5c3c6e3a7941accfb6246cd [INFO] sha for GitHub repo quells/rcc: a19454b6b33872efb5c3c6e3a7941accfb6246cd [INFO] validating manifest of quells/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 quells/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 quells/rcc [INFO] finished frobbing quells/rcc [INFO] frobbed toml for quells/rcc written to work/ex/clippy-test-run/sources/stable/gh/quells/rcc/Cargo.toml [INFO] started frobbing quells/rcc [INFO] finished frobbing quells/rcc [INFO] frobbed toml for quells/rcc written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/quells/rcc/Cargo.toml [INFO] crate quells/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 quells/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-7/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/quells/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] ddbfbf83b28de26e1eaef1441fd27c84753ac1fa6ea20a77d0c6917587735b1e [INFO] running `"docker" "start" "-a" "ddbfbf83b28de26e1eaef1441fd27c84753ac1fa6ea20a77d0c6917587735b1e"` [INFO] [stderr] Checking rcc v0.3.1 (/opt/crater/workdir) [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:96:28 [INFO] [stderr] | [INFO] [stderr] 96 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 97 | | if let Ok(n) = i32::from_str(s) { [INFO] [stderr] 98 | | tokens.push(Token::Integer(n)); [INFO] [stderr] 99 | | } else { [INFO] [stderr] 100 | | panic!("could not tokenize integer: {}", s) [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 96 | } else if let Ok(n) = i32::from_str(s) { [INFO] [stderr] 97 | tokens.push(Token::Integer(n)); [INFO] [stderr] 98 | } else { [INFO] [stderr] 99 | panic!("could not tokenize integer: {}", s) [INFO] [stderr] 100 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/parser.rs:4:23 [INFO] [stderr] | [INFO] [stderr] 4 | const END_OF_TOKENS: &'static str = "unexpected end of token stream"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/lexer.rs:96:28 [INFO] [stderr] | [INFO] [stderr] 96 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 97 | | if let Ok(n) = i32::from_str(s) { [INFO] [stderr] 98 | | tokens.push(Token::Integer(n)); [INFO] [stderr] 99 | | } else { [INFO] [stderr] 100 | | panic!("could not tokenize integer: {}", s) [INFO] [stderr] 101 | | } [INFO] [stderr] 102 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 96 | } else if let Ok(n) = i32::from_str(s) { [INFO] [stderr] 97 | tokens.push(Token::Integer(n)); [INFO] [stderr] 98 | } else { [INFO] [stderr] 99 | panic!("could not tokenize integer: {}", s) [INFO] [stderr] 100 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/parser.rs:4:23 [INFO] [stderr] | [INFO] [stderr] 4 | const END_OF_TOKENS: &'static str = "unexpected end of token stream"; [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &KeywordToken::Int => write!(f, ""), [INFO] [stderr] 15 | | &KeywordToken::Return => write!(f, ""), [INFO] [stderr] 16 | | } [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] 13 | match *self { [INFO] [stderr] 14 | KeywordToken::Int => write!(f, ""), [INFO] [stderr] 15 | KeywordToken::Return => write!(f, ""), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:87:20 [INFO] [stderr] | [INFO] [stderr] 87 | if buffer.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:106:17 [INFO] [stderr] | [INFO] [stderr] 106 | / match single_char_token { [INFO] [stderr] 107 | | &Token::Whitespace => (), [INFO] [stderr] 108 | | _ => tokens.push((*single_char_token).clone()), [INFO] [stderr] 109 | | } [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] 106 | match *single_char_token { [INFO] [stderr] 107 | Token::Whitespace => (), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:113:24 [INFO] [stderr] | [INFO] [stderr] 113 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | / match self { [INFO] [stderr] 12 | | &Program::Function(ref func) => write!(f, "{:?}", func), [INFO] [stderr] 13 | | } [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] 11 | match *self { [INFO] [stderr] 12 | Program::Function(ref func) => write!(f, "{:?}", func), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | &Function::IntVoid(ref id, ref s) => write!(f, "int {}:<{:?}>", id, s), [INFO] [stderr] 24 | | } [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] 22 | match *self { [INFO] [stderr] 23 | Function::IntVoid(ref id, ref s) => write!(f, "int {}:<{:?}>", id, s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | / match self { [INFO] [stderr] 34 | | &Statement::Return(ref e) => write!(f, "return {:?}", e), [INFO] [stderr] 35 | | } [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] 33 | match *self { [INFO] [stderr] 34 | Statement::Return(ref e) => write!(f, "return {:?}", e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &Expr::Term(ref t) => write!(f, "{:?}", t), [INFO] [stderr] 47 | | &Expr::BinOp(ref a, ref op, ref b) => write!(f, "expr({:?}{:?}{:?})", a, op, b), [INFO] [stderr] 48 | | } [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] 45 | match *self { [INFO] [stderr] 46 | Expr::Term(ref t) => write!(f, "{:?}", t), [INFO] [stderr] 47 | Expr::BinOp(ref a, ref op, ref b) => write!(f, "expr({:?}{:?}{:?})", a, op, b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Term::Factor(ref x) => write!(f, "{:?}", x), [INFO] [stderr] 60 | | &Term::BinOp(ref a, ref op, ref b) => write!(f, "term({:?}{:?}{:?})", a, op, b), [INFO] [stderr] 61 | | } [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] 58 | match *self { [INFO] [stderr] 59 | Term::Factor(ref x) => write!(f, "{:?}", x), [INFO] [stderr] 60 | Term::BinOp(ref a, ref op, ref b) => write!(f, "term({:?}{:?}{:?})", a, op, b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &Factor::Expr(ref e) => write!(f, "{:?}", e), [INFO] [stderr] 74 | | &Factor::UnOp(ref op, ref x) => write!(f, "{:?}{:?}", op, x), [INFO] [stderr] 75 | | &Factor::Int(ref i) => write!(f, "{}", i), [INFO] [stderr] 76 | | } [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] 72 | match *self { [INFO] [stderr] 73 | Factor::Expr(ref e) => write!(f, "{:?}", e), [INFO] [stderr] 74 | Factor::UnOp(ref op, ref x) => write!(f, "{:?}{:?}", op, x), [INFO] [stderr] 75 | Factor::Int(ref i) => write!(f, "{}", i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:87:9 [INFO] [stderr] | [INFO] [stderr] 87 | / match self { [INFO] [stderr] 88 | | &UnaryOp::Negation => write!(f, "-"), [INFO] [stderr] 89 | | &UnaryOp::BitwiseComplement => write!(f, "~"), [INFO] [stderr] 90 | | &UnaryOp::LogicalNegation => write!(f, "!"), [INFO] [stderr] 91 | | } [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] 87 | match *self { [INFO] [stderr] 88 | UnaryOp::Negation => write!(f, "-"), [INFO] [stderr] 89 | UnaryOp::BitwiseComplement => write!(f, "~"), [INFO] [stderr] 90 | UnaryOp::LogicalNegation => write!(f, "!"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / match self { [INFO] [stderr] 104 | | &BinaryOp::Addition => write!(f, "+"), [INFO] [stderr] 105 | | &BinaryOp::Subtraction => write!(f, "-"), [INFO] [stderr] 106 | | &BinaryOp::Multiplication => write!(f, "*"), [INFO] [stderr] 107 | | &BinaryOp::Division => write!(f, "/"), [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] 103 | match *self { [INFO] [stderr] 104 | BinaryOp::Addition => write!(f, "+"), [INFO] [stderr] 105 | BinaryOp::Subtraction => write!(f, "-"), [INFO] [stderr] 106 | BinaryOp::Multiplication => write!(f, "*"), [INFO] [stderr] 107 | BinaryOp::Division => write!(f, "/"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:121:21 [INFO] [stderr] | [INFO] [stderr] 121 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:139:45 [INFO] [stderr] | [INFO] [stderr] 139 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:167:21 [INFO] [stderr] | [INFO] [stderr] 167 | None => Err(format!("expected one of (!~-0123456789, found none")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"expected one of (!~-0123456789, found none".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:175:13 [INFO] [stderr] | [INFO] [stderr] 175 | / loop { [INFO] [stderr] 176 | | match outer.split_first() { [INFO] [stderr] 177 | | Some((next, rest)) => { [INFO] [stderr] 178 | | match next { [INFO] [stderr] ... | [INFO] [stderr] 203 | | } [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____________^ help: try: `while let Some((next, rest)) = outer.split_first() { .. }` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:215:13 [INFO] [stderr] | [INFO] [stderr] 215 | / loop { [INFO] [stderr] 216 | | match outer.split_first() { [INFO] [stderr] 217 | | Some((next, rest)) => { [INFO] [stderr] 218 | | match next { [INFO] [stderr] ... | [INFO] [stderr] 245 | | } [INFO] [stderr] 246 | | } [INFO] [stderr] | |_____________^ help: try: `while let Some((next, rest)) = outer.split_first() { .. }` [INFO] [stderr] | [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:274:5 [INFO] [stderr] | [INFO] [stderr] 274 | / loop { [INFO] [stderr] 275 | | match parse_statement(outer) { [INFO] [stderr] 276 | | Ok((statement, rest)) => { [INFO] [stderr] 277 | | statements.push(statement); [INFO] [stderr] ... | [INFO] [stderr] 281 | | } [INFO] [stderr] 282 | | } [INFO] [stderr] | |_____^ help: try: `while let Ok((statement, rest)) = parse_statement(outer) { .. }` [INFO] [stderr] | [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: useless use of `format!` [INFO] [stderr] --> src/parser.rs:327:34 [INFO] [stderr] | [INFO] [stderr] 327 | _ => Err(format!("missing expected identifier token")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"missing expected identifier token".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:330:29 [INFO] [stderr] | [INFO] [stderr] 330 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:5:30 [INFO] [stderr] | [INFO] [stderr] 5 | UnaryOp::Negation => format!(" neg %eax /* Negate EAX */"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `" neg %eax /* Negate EAX */".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:6:39 [INFO] [stderr] | [INFO] [stderr] 6 | UnaryOp::BitwiseComplement => format!(" not %eax /* Bitwise Complement EAX */"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `" not %eax /* Bitwise Complement EAX */".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:7:37 [INFO] [stderr] | [INFO] [stderr] 7 | UnaryOp::LogicalNegation => format!(r" cmpl $0, %eax /* ZF to (exp == 0) */ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 8 | | movl $0, %eax /* zero out EAX without changing FLAGS */ [INFO] [stderr] 9 | | sete %al /* set AL register (low byte of EAX) to (ZF == true) */ [INFO] [stderr] 10 | | /* EAX is logically negated */"), [INFO] [stderr] | |______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] help: consider using .to_string() [INFO] [stderr] | [INFO] [stderr] 7 | UnaryOp::LogicalNegation => r" cmpl $0, %eax /* ZF to (exp == 0) */ [INFO] [stderr] 8 | movl $0, %eax /* zero out EAX without changing FLAGS */ [INFO] [stderr] 9 | sete %al /* set AL register (low byte of EAX) to (ZF == true) */ [INFO] [stderr] 10 | /* EAX is logically negated */".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | / match self { [INFO] [stderr] 14 | | &KeywordToken::Int => write!(f, ""), [INFO] [stderr] 15 | | &KeywordToken::Return => write!(f, ""), [INFO] [stderr] 16 | | } [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] 13 | match *self { [INFO] [stderr] 14 | KeywordToken::Int => write!(f, ""), [INFO] [stderr] 15 | KeywordToken::Return => write!(f, ""), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | dest_file.write((&asm).as_bytes())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:87:20 [INFO] [stderr] | [INFO] [stderr] 87 | if buffer.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lexer.rs:106:17 [INFO] [stderr] | [INFO] [stderr] 106 | / match single_char_token { [INFO] [stderr] 107 | | &Token::Whitespace => (), [INFO] [stderr] 108 | | _ => tokens.push((*single_char_token).clone()), [INFO] [stderr] 109 | | } [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] 106 | match *single_char_token { [INFO] [stderr] 107 | Token::Whitespace => (), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lexer.rs:113:24 [INFO] [stderr] | [INFO] [stderr] 113 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:11:9 [INFO] [stderr] | [INFO] [stderr] 11 | / match self { [INFO] [stderr] 12 | | &Program::Function(ref func) => write!(f, "{:?}", func), [INFO] [stderr] 13 | | } [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] 11 | match *self { [INFO] [stderr] 12 | Program::Function(ref func) => write!(f, "{:?}", func), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: Could not compile `rcc`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:22:9 [INFO] [stderr] | [INFO] [stderr] 22 | / match self { [INFO] [stderr] 23 | | &Function::IntVoid(ref id, ref s) => write!(f, "int {}:<{:?}>", id, s), [INFO] [stderr] 24 | | } [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] 22 | match *self { [INFO] [stderr] 23 | Function::IntVoid(ref id, ref s) => write!(f, "int {}:<{:?}>", id, s), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:33:9 [INFO] [stderr] | [INFO] [stderr] 33 | / match self { [INFO] [stderr] 34 | | &Statement::Return(ref e) => write!(f, "return {:?}", e), [INFO] [stderr] 35 | | } [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] 33 | match *self { [INFO] [stderr] 34 | Statement::Return(ref e) => write!(f, "return {:?}", e), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:45:9 [INFO] [stderr] | [INFO] [stderr] 45 | / match self { [INFO] [stderr] 46 | | &Expr::Term(ref t) => write!(f, "{:?}", t), [INFO] [stderr] 47 | | &Expr::BinOp(ref a, ref op, ref b) => write!(f, "expr({:?}{:?}{:?})", a, op, b), [INFO] [stderr] 48 | | } [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] 45 | match *self { [INFO] [stderr] 46 | Expr::Term(ref t) => write!(f, "{:?}", t), [INFO] [stderr] 47 | Expr::BinOp(ref a, ref op, ref b) => write!(f, "expr({:?}{:?}{:?})", a, op, b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &Term::Factor(ref x) => write!(f, "{:?}", x), [INFO] [stderr] 60 | | &Term::BinOp(ref a, ref op, ref b) => write!(f, "term({:?}{:?}{:?})", a, op, b), [INFO] [stderr] 61 | | } [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] 58 | match *self { [INFO] [stderr] 59 | Term::Factor(ref x) => write!(f, "{:?}", x), [INFO] [stderr] 60 | Term::BinOp(ref a, ref op, ref b) => write!(f, "term({:?}{:?}{:?})", a, op, b), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:72:9 [INFO] [stderr] | [INFO] [stderr] 72 | / match self { [INFO] [stderr] 73 | | &Factor::Expr(ref e) => write!(f, "{:?}", e), [INFO] [stderr] 74 | | &Factor::UnOp(ref op, ref x) => write!(f, "{:?}{:?}", op, x), [INFO] [stderr] 75 | | &Factor::Int(ref i) => write!(f, "{}", i), [INFO] [stderr] 76 | | } [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] 72 | match *self { [INFO] [stderr] 73 | Factor::Expr(ref e) => write!(f, "{:?}", e), [INFO] [stderr] 74 | Factor::UnOp(ref op, ref x) => write!(f, "{:?}{:?}", op, x), [INFO] [stderr] 75 | Factor::Int(ref i) => write!(f, "{}", i), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:87:9 [INFO] [stderr] | [INFO] [stderr] 87 | / match self { [INFO] [stderr] 88 | | &UnaryOp::Negation => write!(f, "-"), [INFO] [stderr] 89 | | &UnaryOp::BitwiseComplement => write!(f, "~"), [INFO] [stderr] 90 | | &UnaryOp::LogicalNegation => write!(f, "!"), [INFO] [stderr] 91 | | } [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] 87 | match *self { [INFO] [stderr] 88 | UnaryOp::Negation => write!(f, "-"), [INFO] [stderr] 89 | UnaryOp::BitwiseComplement => write!(f, "~"), [INFO] [stderr] 90 | UnaryOp::LogicalNegation => write!(f, "!"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/parser.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | / match self { [INFO] [stderr] 104 | | &BinaryOp::Addition => write!(f, "+"), [INFO] [stderr] 105 | | &BinaryOp::Subtraction => write!(f, "-"), [INFO] [stderr] 106 | | &BinaryOp::Multiplication => write!(f, "*"), [INFO] [stderr] 107 | | &BinaryOp::Division => write!(f, "/"), [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] 103 | match *self { [INFO] [stderr] 104 | BinaryOp::Addition => write!(f, "+"), [INFO] [stderr] 105 | BinaryOp::Subtraction => write!(f, "-"), [INFO] [stderr] 106 | BinaryOp::Multiplication => write!(f, "*"), [INFO] [stderr] 107 | BinaryOp::Division => write!(f, "/"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:121:21 [INFO] [stderr] | [INFO] [stderr] 121 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:139:45 [INFO] [stderr] | [INFO] [stderr] 139 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:167:21 [INFO] [stderr] | [INFO] [stderr] 167 | None => Err(format!("expected one of (!~-0123456789, found none")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"expected one of (!~-0123456789, found none".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:175:13 [INFO] [stderr] | [INFO] [stderr] 175 | / loop { [INFO] [stderr] 176 | | match outer.split_first() { [INFO] [stderr] 177 | | Some((next, rest)) => { [INFO] [stderr] 178 | | match next { [INFO] [stderr] ... | [INFO] [stderr] 203 | | } [INFO] [stderr] 204 | | } [INFO] [stderr] | |_____________^ help: try: `while let Some((next, rest)) = outer.split_first() { .. }` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:215:13 [INFO] [stderr] | [INFO] [stderr] 215 | / loop { [INFO] [stderr] 216 | | match outer.split_first() { [INFO] [stderr] 217 | | Some((next, rest)) => { [INFO] [stderr] 218 | | match next { [INFO] [stderr] ... | [INFO] [stderr] 245 | | } [INFO] [stderr] 246 | | } [INFO] [stderr] | |_____________^ help: try: `while let Some((next, rest)) = outer.split_first() { .. }` [INFO] [stderr] | [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/parser.rs:274:5 [INFO] [stderr] | [INFO] [stderr] 274 | / loop { [INFO] [stderr] 275 | | match parse_statement(outer) { [INFO] [stderr] 276 | | Ok((statement, rest)) => { [INFO] [stderr] 277 | | statements.push(statement); [INFO] [stderr] ... | [INFO] [stderr] 281 | | } [INFO] [stderr] 282 | | } [INFO] [stderr] | |_____^ help: try: `while let Ok((statement, rest)) = parse_statement(outer) { .. }` [INFO] [stderr] | [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: useless use of `format!` [INFO] [stderr] --> src/parser.rs:327:34 [INFO] [stderr] | [INFO] [stderr] 327 | _ => Err(format!("missing expected identifier token")), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"missing expected identifier token".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/parser.rs:330:29 [INFO] [stderr] | [INFO] [stderr] 330 | None => Err(format!("{}", END_OF_TOKENS)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `END_OF_TOKENS.to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:5:30 [INFO] [stderr] | [INFO] [stderr] 5 | UnaryOp::Negation => format!(" neg %eax /* Negate EAX */"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `" neg %eax /* Negate EAX */".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:6:39 [INFO] [stderr] | [INFO] [stderr] 6 | UnaryOp::BitwiseComplement => format!(" not %eax /* Bitwise Complement EAX */"), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `" not %eax /* Bitwise Complement EAX */".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/generator_gas.rs:7:37 [INFO] [stderr] | [INFO] [stderr] 7 | UnaryOp::LogicalNegation => format!(r" cmpl $0, %eax /* ZF to (exp == 0) */ [INFO] [stderr] | _____________________________________^ [INFO] [stderr] 8 | | movl $0, %eax /* zero out EAX without changing FLAGS */ [INFO] [stderr] 9 | | sete %al /* set AL register (low byte of EAX) to (ZF == true) */ [INFO] [stderr] 10 | | /* EAX is logically negated */"), [INFO] [stderr] | |______________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] help: consider using .to_string() [INFO] [stderr] | [INFO] [stderr] 7 | UnaryOp::LogicalNegation => r" cmpl $0, %eax /* ZF to (exp == 0) */ [INFO] [stderr] 8 | movl $0, %eax /* zero out EAX without changing FLAGS */ [INFO] [stderr] 9 | sete %al /* set AL register (low byte of EAX) to (ZF == true) */ [INFO] [stderr] 10 | /* EAX is logically negated */".to_string(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/lib.rs:29:5 [INFO] [stderr] | [INFO] [stderr] 29 | dest_file.write((&asm).as_bytes())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `rcc`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "ddbfbf83b28de26e1eaef1441fd27c84753ac1fa6ea20a77d0c6917587735b1e"` [INFO] running `"docker" "rm" "-f" "ddbfbf83b28de26e1eaef1441fd27c84753ac1fa6ea20a77d0c6917587735b1e"` [INFO] [stdout] ddbfbf83b28de26e1eaef1441fd27c84753ac1fa6ea20a77d0c6917587735b1e