[INFO] cloning repository https://github.com/hanako-eo/peanut [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/hanako-eo/peanut" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhanako-eo%2Fpeanut", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhanako-eo%2Fpeanut'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 50aa1d9f3f01f4012bcf34fe997a0896c615bb39 [INFO] building hanako-eo/peanut against try#9b5e8b16bd1c4acf4cf8e6880368314cf021a987+rustflags=-Dtail-expr-drop-order for pr-134523 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fhanako-eo%2Fpeanut" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/hanako-eo/peanut on toolchain 9b5e8b16bd1c4acf4cf8e6880368314cf021a987 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+9b5e8b16bd1c4acf4cf8e6880368314cf021a987" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/hanako-eo/peanut [INFO] finished tweaking git repo https://github.com/hanako-eo/peanut [INFO] tweaked toml for git repo https://github.com/hanako-eo/peanut written to /workspace/builds/worker-3-tc2/source/Cargo.toml [INFO] crate git repo https://github.com/hanako-eo/peanut already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+9b5e8b16bd1c4acf4cf8e6880368314cf021a987" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+9b5e8b16bd1c4acf4cf8e6880368314cf021a987" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 8a38fbd12ff0366a01a740af8396aa86d16f235bb091aaeb2d36bad4ed6416a5 [INFO] running `Command { std: "docker" "start" "-a" "8a38fbd12ff0366a01a740af8396aa86d16f235bb091aaeb2d36bad4ed6416a5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "8a38fbd12ff0366a01a740af8396aa86d16f235bb091aaeb2d36bad4ed6416a5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8a38fbd12ff0366a01a740af8396aa86d16f235bb091aaeb2d36bad4ed6416a5", kill_on_drop: false }` [INFO] [stdout] 8a38fbd12ff0366a01a740af8396aa86d16f235bb091aaeb2d36bad4ed6416a5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dtail-expr-drop-order" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:f3a9d4ad9d972b27faf3965f35b62e55ba32bbce8f20bc8fe909558a86702fde" "/opt/rustwide/cargo-home/bin/cargo" "+9b5e8b16bd1c4acf4cf8e6880368314cf021a987" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 16dca5f270026df20e4f93a5ca215be9b82720223db0c213d116101cdd0fbad1 [INFO] running `Command { std: "docker" "start" "-a" "16dca5f270026df20e4f93a5ca215be9b82720223db0c213d116101cdd0fbad1", kill_on_drop: false }` [INFO] [stderr] Compiling peanut v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] error[E0726]: implicit elided lifetime not allowed here [INFO] [stdout] --> src/frontend/ast.rs:27:14 [INFO] [stdout] | [INFO] [stdout] 27 | impl TryFrom for Op { [INFO] [stdout] | ^^^^^ expected lifetime parameter [INFO] [stdout] | [INFO] [stdout] help: indicate the anonymous lifetime [INFO] [stdout] | [INFO] [stdout] 27 | impl TryFrom> for Op { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0106]: missing lifetime specifier [INFO] [stdout] --> src/frontend/ast.rs:28:18 [INFO] [stdout] | [INFO] [stdout] 28 | type Error = Error; [INFO] [stdout] | ^^^^^ expected named lifetime parameter [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter [INFO] [stdout] | [INFO] [stdout] 28 | type Error<'a> = Error<'a>; [INFO] [stdout] | ++++ ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0106]: missing lifetime specifier [INFO] [stdout] --> src/frontend/parser.rs:16:22 [INFO] [stdout] | [INFO] [stdout] 16 | tokens: VecDeque, [INFO] [stdout] | ^^^^^ expected named lifetime parameter [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter [INFO] [stdout] | [INFO] [stdout] 15 ~ pub struct Parser<'a> { [INFO] [stdout] 16 ~ tokens: VecDeque>, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0106]: missing lifetime specifier [INFO] [stdout] --> src/runtime/environment.rs:78:12 [INFO] [stdout] | [INFO] [stdout] 78 | ) -> Result { [INFO] [stdout] | ^ expected named lifetime parameter [INFO] [stdout] | [INFO] [stdout] = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from [INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values [INFO] [stdout] | [INFO] [stdout] 78 | ) -> Result<'static, RuntimeValue> { [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0106]: missing lifetime specifier [INFO] [stdout] --> src/runtime/environment.rs:86:76 [INFO] [stdout] | [INFO] [stdout] 86 | pub fn lookup_var(env: Rc>, varname: String) -> Result { [INFO] [stdout] | ^ expected named lifetime parameter [INFO] [stdout] | [INFO] [stdout] = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from [INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values [INFO] [stdout] | [INFO] [stdout] 86 | pub fn lookup_var(env: Rc>, varname: String) -> Result<'static, RuntimeValue> { [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0106]: missing lifetime specifier [INFO] [stdout] --> src/runtime/environment.rs:112:12 [INFO] [stdout] | [INFO] [stdout] 112 | ) -> Result>> { [INFO] [stdout] | ^ expected named lifetime parameter [INFO] [stdout] | [INFO] [stdout] = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from [INFO] [stdout] help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values [INFO] [stdout] | [INFO] [stdout] 112 | ) -> Result<'static, Rc>> { [INFO] [stdout] | ++++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `ErrorKind`, `Error`, `Expr`, `Op`, `Stmt`, and `UnaryOp` [INFO] [stdout] --> src/frontend/parser.rs:402:18 [INFO] [stdout] | [INFO] [stdout] 402 | errors::{Error, ErrorKind}, [INFO] [stdout] | ^^^^^ ^^^^^^^^^ [INFO] [stdout] 403 | frontend::ast::{Expr, Op, Stmt, UnaryOp}, [INFO] [stdout] | ^^^^ ^^ ^^^^ ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `super::Parser` [INFO] [stdout] --> src/frontend/parser.rs:406:9 [INFO] [stdout] | [INFO] [stdout] 406 | use super::Parser; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default [INFO] [stdout] --> src/memory/ptr.rs:11:26 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct GarbageBox { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default [INFO] [stdout] --> src/memory/ptr.rs:110:23 [INFO] [stdout] | [INFO] [stdout] 110 | pub struct WeakRef { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no function or associated item named `tokenize` found for struct `Lexer` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:21:29 [INFO] [stdout] | [INFO] [stdout] 21 | let tokens = Lexer::tokenize(source)?; [INFO] [stdout] | ^^^^^^^^ function or associated item not found in `Lexer<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/lexer.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct Lexer<'i> { [INFO] [stdout] | -------------------- function or associated item `tokenize` not found for this struct [INFO] [stdout] | [INFO] [stdout] note: if you're trying to build a new `Lexer<'_>`, consider using `Lexer::<'i>::new` which returns `Lexer<'_>` [INFO] [stdout] --> src/frontend/lexer.rs:24:5 [INFO] [stdout] | [INFO] [stdout] 24 | pub fn new(source: &'i str) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `ID` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:60:62 [INFO] [stdout] | [INFO] [stdout] 60 | Some(token) if matches!(token.kind(), TokenKind::ID(_)) => Ok(self.eat().unwrap()), [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `ID` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 60 | Some(token) if matches!(token.kind(), TokenKind::If(_)) => Ok(self.eat().unwrap()), [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `ID` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:61:71 [INFO] [stdout] | [INFO] [stdout] 61 | Some(token) => self.generate_unexpected(token, TokenKind::ID(String::new())), [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `ID` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 61 | Some(token) => self.generate_unexpected(token, TokenKind::If), [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `ID` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:62:55 [INFO] [stdout] | [INFO] [stdout] 62 | None => self.generate_expected(TokenKind::ID(String::new())), [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `ID` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 62 | None => self.generate_expected(TokenKind::If), [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `ID` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:69:24 [INFO] [stdout] | [INFO] [stdout] 69 | TokenKind::ID(val) => Ok(val.clone()), [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `ID` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 69 | TokenKind::If(val) => Ok(val.clone()), [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `And` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:258:24 [INFO] [stdout] | [INFO] [stdout] 258 | TokenKind::And, [INFO] [stdout] | ^^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `And` not found for this enum [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `Or` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:259:24 [INFO] [stdout] | [INFO] [stdout] 259 | TokenKind::Or, [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `Or` not found for this enum [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `NotEqual` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:266:24 [INFO] [stdout] | [INFO] [stdout] 266 | TokenKind::NotEqual, [INFO] [stdout] | ^^^^^^^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `NotEqual` not found for this enum [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `Not` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:335:25 [INFO] [stdout] | [INFO] [stdout] 335 | &TokenKind::Not => Some(UnaryOp::Not), [INFO] [stdout] | ^^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `Not` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 335 | &TokenKind::Dot => Some(UnaryOp::Not), [INFO] [stdout] | ~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0599]: no variant or associated item named `ID` found for enum `TokenKind` in the current scope [INFO] [stdout] --> src/frontend/parser.rs:351:24 [INFO] [stdout] | [INFO] [stdout] 351 | TokenKind::ID(symbol) => Expr::Identifier(symbol.clone()), [INFO] [stdout] | ^^ variant or associated item not found in `TokenKind<'_>` [INFO] [stdout] | [INFO] [stdout] ::: src/frontend/token.rs:2:1 [INFO] [stdout] | [INFO] [stdout] 2 | pub enum TokenKind<'s> { [INFO] [stdout] | ---------------------- variant or associated item `ID` not found for this enum [INFO] [stdout] | [INFO] [stdout] help: there is a variant with a similar name [INFO] [stdout] | [INFO] [stdout] 351 | TokenKind::If(symbol) => Expr::Identifier(symbol.clone()), [INFO] [stdout] | ~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:77:29 [INFO] [stdout] | [INFO] [stdout] 75 | fn parse_program(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 76 | let mut statements = Vec::new(); [INFO] [stdout] 77 | while let Some(_) = self.at(0) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] 78 | statements.push(self.parse_statement()?); [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] thread 'rustc' panicked at compiler/rustc_mir_build/src/builder/scope.rs:1724:17: [INFO] [stderr] Box [INFO] [stderr] stack backtrace: [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:78:29 [INFO] [stdout] | [INFO] [stdout] 75 | fn parse_program(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 78 | statements.push(self.parse_statement()?); [INFO] [stdout] | ^^^^------------------- [INFO] [stdout] | | [INFO] [stdout] | `*self` was mutably borrowed here in the previous iteration of the loop [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:79:16 [INFO] [stdout] | [INFO] [stdout] 75 | fn parse_program(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 78 | statements.push(self.parse_statement()?); [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 79 | if self.check(TokenKind::Semicolon) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:80:17 [INFO] [stdout] | [INFO] [stdout] 75 | fn parse_program(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 78 | statements.push(self.parse_statement()?); [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 79 | if self.check(TokenKind::Semicolon) { [INFO] [stdout] 80 | self.eat(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: internal compiler error: compiler/rustc_mir_build/src/builder/scope.rs:1724:17: cannot unwind from goto -> bb100 [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] 0: 0x7722f6b81caa - ::fmt::h636462e57d5ef1e1 [INFO] [stderr] 1: 0x7722f7213cbc - core::fmt::write::h067060808ac50eb9 [INFO] [stderr] 2: 0x7722f8128e11 - std::io::Write::write_fmt::h4674fa2ed7c0dfdd [INFO] [stderr] 3: 0x7722f6b81b02 - std::sys::backtrace::BacktraceLock::print::h0c77148acfb0b5e9 [INFO] [stderr] 4: 0x7722f6b83ffa - std::panicking::default_hook::{{closure}}::h30daa8e7c6ccb09d [INFO] [stderr] 5: 0x7722f6b83e43 - std::panicking::default_hook::h25f21dc0f2064615 [INFO] [stderr] 6: 0x7722f5ceff28 - std[b36e883d67eb0403]::panicking::update_hook::>::{closure#0} [INFO] [stderr] 7: 0x7722f6b847b8 - std::panicking::rust_panic_with_hook::hc98438687e833605 [INFO] [stderr] 8: 0x7722f5d2a341 - std[b36e883d67eb0403]::panicking::begin_panic::::{closure#0} [INFO] [stderr] 9: 0x7722f5d1f526 - std[b36e883d67eb0403]::sys::backtrace::__rust_end_short_backtrace::::{closure#0}, !> [INFO] [stderr] 10: 0x7722f5d1f50d - std[b36e883d67eb0403]::panicking::begin_panic:: [INFO] [stderr] 11: 0x7722f5d342a1 - ::emit_producing_guarantee [INFO] [stderr] 12: 0x7722f6284fdc - ::span_bug:: [INFO] [stderr] 13: 0x7722f630a897 - rustc_middle[8ad6e8ce52578819]::util::bug::opt_span_bug_fmt::::{closure#0} [INFO] [stderr] 14: 0x7722f62f006a - rustc_middle[8ad6e8ce52578819]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} [INFO] [stderr] 15: 0x7722f62efefb - rustc_middle[8ad6e8ce52578819]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> [INFO] [stderr] 16: 0x7722f4734437 - rustc_middle[8ad6e8ce52578819]::util::bug::span_bug_fmt:: [INFO] [stderr] 17: 0x7722f7bd541b - ::build_unwind_tree [INFO] [stderr] 18: 0x7722f7bcd7cd - rustc_mir_build[73684a27b88b946a]::builder::mir_build [INFO] [stderr] 19: 0x7722f7207714 - rustc_mir_transform[857cd804783fef4d]::mir_built [INFO] [stderr] 20: 0x7722f72076d7 - rustc_query_impl[1e55094a59e290f4]::plumbing::__rust_begin_short_backtrace::> [INFO] [stderr] 21: 0x7722f74953d1 - rustc_query_system[67781f9dc633c543]::query::plumbing::try_execute_query::, rustc_query_system[67781f9dc633c543]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[1e55094a59e290f4]::plumbing::QueryCtxt, false> [INFO] [stderr] 22: 0x7722f7494f8d - rustc_query_impl[1e55094a59e290f4]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace [INFO] [stderr] 23: 0x7722f4267185 - rustc_mir_build[73684a27b88b946a]::check_unsafety::check_unsafety [INFO] [stderr] 24: 0x7722f7ae98a7 - rustc_query_impl[1e55094a59e290f4]::plumbing::__rust_begin_short_backtrace::> [INFO] [stderr] 25: 0x7722f7ae9b69 - rustc_query_system[67781f9dc633c543]::query::plumbing::try_execute_query::, rustc_query_system[67781f9dc633c543]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[1e55094a59e290f4]::plumbing::QueryCtxt, false> [INFO] [stderr] 26: 0x7722f7ae97d1 - rustc_query_impl[1e55094a59e290f4]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace [INFO] [stderr] 27: 0x7722f769bd32 - rustc_interface[b59e7ee7606ca029]::passes::run_required_analyses [INFO] [stderr] 28: 0x7722f812cc9e - rustc_interface[b59e7ee7606ca029]::passes::analysis [INFO] [stderr] 29: 0x7722f812cc6f - rustc_query_impl[1e55094a59e290f4]::plumbing::__rust_begin_short_backtrace::> [INFO] [stderr] 30: 0x7722f817b355 - rustc_query_system[67781f9dc633c543]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[1e55094a59e290f4]::plumbing::QueryCtxt, false> [INFO] [stderr] 31: 0x7722f817b08e - rustc_query_impl[1e55094a59e290f4]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace [INFO] [stderr] 32: 0x7722f81701de - rustc_interface[b59e7ee7606ca029]::passes::create_and_enter_global_ctxt::, rustc_driver_impl[be5855d19ccc8b6c]::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0} [INFO] [stderr] 33: 0x7722f81dff51 - rustc_interface[b59e7ee7606ca029]::interface::run_compiler::<(), rustc_driver_impl[be5855d19ccc8b6c]::run_compiler::{closure#0}>::{closure#1} [INFO] [stderr] 34: 0x7722f80f5087 - std[b36e883d67eb0403]::sys::backtrace::__rust_begin_short_backtrace::::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()> [INFO] [stderr] 35: 0x7722f80f551c - <::spawn_unchecked_::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[303105738bd0c2ae]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stderr] 36: 0x7722f80f6aef - std::sys::pal::unix::thread::Thread::new::thread_start::ha554cc4ba6335b05 [INFO] [stderr] 37: 0x7722f980eac3 - [INFO] [stderr] 38: 0x7722f989fa04 - clone [INFO] [stderr] 39: 0x0 - [INFO] [stderr] [INFO] [stderr] note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md [INFO] [stderr] [INFO] [stderr] note: please make sure that you have updated to the latest nightly [INFO] [stderr] [INFO] [stderr] warning: the ICE couldn't be written to `/opt/rustwide/workdir/rustc-ice-2025-01-01T00_11_45-9.txt`: Read-only file system (os error 30) [INFO] [stderr] [INFO] [stderr] note: rustc 1.85.0-nightly (9b5e8b16b 2024-12-19) running on x86_64-unknown-linux-gnu [INFO] [stderr] [INFO] [stderr] note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 [INFO] [stderr] [INFO] [stderr] note: some of the compiler flags provided by cargo are hidden [INFO] [stderr] [INFO] [stderr] query stack during panic: [INFO] [stderr] #0 [mir_built] building MIR for `frontend::parser::::parse_statement` [INFO] [stderr] #1 [check_unsafety] unsafety-checking `frontend::parser::::parse_statement` [INFO] [stderr] #2 [analysis] running analysis passes on this crate [INFO] [stderr] end of query stack [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:112:9 [INFO] [stdout] | [INFO] [stdout] 107 | fn parse_var_declaration(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 110 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 111 | [INFO] [stdout] 112 | self.expect(TokenKind::Equal)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:114:20 [INFO] [stdout] | [INFO] [stdout] 107 | fn parse_var_declaration(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 110 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 114 | let expr = self.parse_expr()?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:130:20 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 130 | let args = self.parse_args_definition()?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:132:27 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 132 | let return_type = self.get_ident_value().ok(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:133:28 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 133 | let is_sort_func = self.expect(TokenKind::BigArrow).is_ok(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:137:60 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 137 | body.push(Stmt::ExprStmt(Expr::Return(Box::new(self.parse_expr()?)))); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:139:13 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 139 | self.expect(TokenKind::OpenBrace)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:141:20 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 141 | if self.check(TokenKind::CloseBrace) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:145:27 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 145 | body.push(self.parse_statement()?); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:147:20 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 147 | if self.check(TokenKind::Semicolon) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:148:21 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 148 | self.eat(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:151:13 [INFO] [stdout] | [INFO] [stdout] 123 | fn parse_function(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 129 | let name = self.get_ident_value()?; [INFO] [stdout] | ----------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 151 | self.expect(TokenKind::CloseBrace)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:170:16 [INFO] [stdout] | [INFO] [stdout] 162 | fn parse_tuple_of(&mut self, callback: F) -> Result> [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 168 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 169 | loop { [INFO] [stdout] 170 | if self.check(TokenKind::CloseParen) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:174:17 [INFO] [stdout] | [INFO] [stdout] 162 | fn parse_tuple_of(&mut self, callback: F) -> Result> [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 168 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 174 | self.expect(TokenKind::Comma)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:177:32 [INFO] [stdout] | [INFO] [stdout] 162 | fn parse_tuple_of(&mut self, callback: F) -> Result> [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 168 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 177 | args.push(callback(self)?); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:179:17 [INFO] [stdout] | [INFO] [stdout] 162 | fn parse_tuple_of(&mut self, callback: F) -> Result> [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 168 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 179 | if !self.check(TokenKind::Comma) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:183:9 [INFO] [stdout] | [INFO] [stdout] 162 | fn parse_tuple_of(&mut self, callback: F) -> Result> [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 168 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 183 | self.expect(TokenKind::CloseParen)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*parser` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:190:26 [INFO] [stdout] | [INFO] [stdout] 188 | self.parse_tuple_of(|parser| { [INFO] [stdout] | ------ has type `&'1 mut Parser` [INFO] [stdout] 189 | let arg = parser.get_ident_value()?; [INFO] [stdout] | ------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*parser` is borrowed for `'1` [INFO] [stdout] 190 | let r#type = parser.get_ident_value()?; [INFO] [stdout] | ^^^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:200:27 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 200 | match (first, self.check(TokenKind::Else)) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:204:21 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 204 | self.eat(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:208:43 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 208 | let condition = match (first, self.check(TokenKind::If)) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:209:35 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 209 | (true, _) => Some(self.parse_expr()?), [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:212:21 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 212 | self.eat(); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ^^^^------------------------------ [INFO] [stdout] | | [INFO] [stdout] | `*self` was mutably borrowed here in the previous iteration of the loop [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:214:32 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 214 | let expr = self.parse_expr()?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:215:21 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 214 | let expr = self.parse_expr()?; [INFO] [stdout] 215 | self.expect(TokenKind::CloseParen)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:220:33 [INFO] [stdout] | [INFO] [stdout] 195 | fn parse_if_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 213 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 220 | let body = Box::new(self.parse_expr()?); [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:236:25 [INFO] [stdout] | [INFO] [stdout] 234 | fn parse_while_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 235 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 236 | let condition = self.parse_expr()?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:237:9 [INFO] [stdout] | [INFO] [stdout] 234 | fn parse_while_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 235 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 236 | let condition = self.parse_expr()?; [INFO] [stdout] 237 | self.expect(TokenKind::CloseParen)?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:238:20 [INFO] [stdout] | [INFO] [stdout] 234 | fn parse_while_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 235 | self.expect(TokenKind::OpenParen)?; [INFO] [stdout] | ---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 238 | let body = self.parse_expr()?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:311:12 [INFO] [stdout] | [INFO] [stdout] 308 | fn parse_call_member_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 309 | let member = self.parse_primary_expr()?; [INFO] [stdout] | -------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 310 | [INFO] [stdout] 311 | if self.check(TokenKind::OpenParen) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:312:13 [INFO] [stdout] | [INFO] [stdout] 308 | fn parse_call_member_expr(&mut self) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] 309 | let member = self.parse_primary_expr()?; [INFO] [stdout] | -------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 312 | self.parse_call_expr(member) [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable [INFO] [stdout] --> src/frontend/parser.rs:324:12 [INFO] [stdout] | [INFO] [stdout] 318 | fn parse_call_expr(&mut self, caller: Expr) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 321 | self.parse_tuple_of(|parser| parser.parse_expr())?, [INFO] [stdout] | -------------------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 324 | if self.check(TokenKind::OpenParen) { [INFO] [stdout] | ^^^^ immutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/frontend/parser.rs:325:13 [INFO] [stdout] | [INFO] [stdout] 318 | fn parse_call_expr(&mut self, caller: Expr) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 321 | self.parse_tuple_of(|parser| parser.parse_expr())?, [INFO] [stdout] | -------------------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 325 | self.parse_call_expr(expr) [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: lifetime may not live long enough [INFO] [stdout] --> src/frontend/parser.rs:385:9 [INFO] [stdout] | [INFO] [stdout] 384 | fn generate_unexpected(&self, token: &Token, expected: TokenKind) -> Result { [INFO] [stdout] | - ----- has type `&Token<'1>` [INFO] [stdout] | | [INFO] [stdout] | let's call the lifetime of this reference `'2` [INFO] [stdout] 385 | / Err(Error::from_kind(ErrorKind::UnexpectedToken { [INFO] [stdout] 386 | | received: token.clone(), [INFO] [stdout] 387 | | expected, [INFO] [stdout] 388 | | })) [INFO] [stdout] | |___________^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter and update trait if needed [INFO] [stdout] | [INFO] [stdout] 384 | fn generate_unexpected<'a, T>(&self, token: &Token<'a>, expected: TokenKind) -> Result<'a, T> { [INFO] [stdout] | +++ ++++ +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: lifetime may not live long enough [INFO] [stdout] --> src/frontend/parser.rs:385:9 [INFO] [stdout] | [INFO] [stdout] 384 | fn generate_unexpected(&self, token: &Token, expected: TokenKind) -> Result { [INFO] [stdout] | - -------- has type `TokenKind<'3>` [INFO] [stdout] | | [INFO] [stdout] | let's call the lifetime of this reference `'2` [INFO] [stdout] 385 | / Err(Error::from_kind(ErrorKind::UnexpectedToken { [INFO] [stdout] 386 | | received: token.clone(), [INFO] [stdout] 387 | | expected, [INFO] [stdout] 388 | | })) [INFO] [stdout] | |___________^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'3` [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter and update trait if needed [INFO] [stdout] | [INFO] [stdout] 384 | fn generate_unexpected<'a, T>(&self, token: &Token, expected: TokenKind<'a>) -> Result<'a, T> { [INFO] [stdout] | +++ ++++ +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: lifetime may not live long enough [INFO] [stdout] --> src/frontend/parser.rs:392:9 [INFO] [stdout] | [INFO] [stdout] 391 | fn generate_expected(&self, expected: TokenKind) -> Result { [INFO] [stdout] | - -------- has type `TokenKind<'1>` [INFO] [stdout] | | [INFO] [stdout] | let's call the lifetime of this reference `'2` [INFO] [stdout] 392 | Err(Error::from_kind(ErrorKind::ExpectedToken(expected))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter and update trait if needed [INFO] [stdout] | [INFO] [stdout] 391 | fn generate_expected<'a, T>(&self, expected: TokenKind<'a>) -> Result<'a, T> { [INFO] [stdout] | +++ ++++ +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: lifetime may not live long enough [INFO] [stdout] --> src/frontend/parser.rs:396:9 [INFO] [stdout] | [INFO] [stdout] 395 | fn generate_unsuspected(&self, unsuspected: Token) -> Result { [INFO] [stdout] | - ----------- has type `Token<'1>` [INFO] [stdout] | | [INFO] [stdout] | let's call the lifetime of this reference `'2` [INFO] [stdout] 396 | Err(Error::from_kind(ErrorKind::UnsuspectedToken(unsuspected))) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1` [INFO] [stdout] | [INFO] [stdout] help: consider introducing a named lifetime parameter and update trait if needed [INFO] [stdout] | [INFO] [stdout] 395 | fn generate_unsuspected<'a, T>(&self, unsuspected: Token<'a>) -> Result<'a, T> { [INFO] [stdout] | +++ ++++ +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return value referencing function parameter `varname` [INFO] [stdout] --> src/runtime/environment.rs:79:15 [INFO] [stdout] | [INFO] [stdout] 79 | let env = resolve_var(env, &varname)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^--------^^ [INFO] [stdout] | | | [INFO] [stdout] | | `varname` is borrowed here [INFO] [stdout] | returns a value referencing data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return value referencing function parameter `varname` [INFO] [stdout] --> src/runtime/environment.rs:87:15 [INFO] [stdout] | [INFO] [stdout] 87 | let env = resolve_var(env, &varname)?; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^--------^^ [INFO] [stdout] | | | [INFO] [stdout] | | `varname` is borrowed here [INFO] [stdout] | returns a value referencing data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return value referencing local variable `evaluator` [INFO] [stdout] --> src/runtime/evaluator.rs:73:9 [INFO] [stdout] | [INFO] [stdout] 73 | evaluator.evaluate_stmt(program, env) [INFO] [stdout] | ---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | returns a value referencing data owned by the current function [INFO] [stdout] | `evaluator` is borrowed here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:80:29 [INFO] [stdout] | [INFO] [stdout] 75 | fn evaluate_stmt(&mut self, stmt: Stmt, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 80 | value = self.evaluate_stmt(stmt, env.clone())? [INFO] [stdout] | ^^^^---------------------------------- [INFO] [stdout] | | [INFO] [stdout] | `*self` was mutably borrowed here in the previous iteration of the loop [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: captured variable cannot escape `FnMut` closure body [INFO] [stdout] --> src/runtime/evaluator.rs:178:33 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | --------- variable defined here [INFO] [stdout] ... [INFO] [stdout] 178 | .map(|expr| self.evaluate_expr(expr.clone(), env.clone())) [INFO] [stdout] | - ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | | [INFO] [stdout] | | returns a reference to a captured variable which escapes the closure body [INFO] [stdout] | | variable captured here [INFO] [stdout] | inferred to be a `FnMut` closure [INFO] [stdout] | [INFO] [stdout] = note: `FnMut` closures only have access to their captured variables while they are executing... [INFO] [stdout] = note: ...therefore, they cannot allow references to captured variables to escape [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0501]: cannot borrow `*self` as mutable because previous closure requires unique access [INFO] [stdout] --> src/runtime/evaluator.rs:213:21 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 178 | .map(|expr| self.evaluate_expr(expr.clone(), env.clone())) [INFO] [stdout] | ------ ---- first borrow occurs due to use of `*self` in closure [INFO] [stdout] | | [INFO] [stdout] | closure construction occurs here [INFO] [stdout] ... [INFO] [stdout] 187 | params.push(value?) [INFO] [stdout] | ------ returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 213 | self.evaluate_stmt(stmt, func_env.clone())?; [INFO] [stdout] | ^^^^ second borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0524]: two closures require unique access to `*self` at the same time [INFO] [stdout] --> src/runtime/evaluator.rs:229:39 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 229 | condition.map(|condition| self.evaluate_expr(condition, env.clone())); [INFO] [stdout] | ^^^^^^^^^^^ ---- borrows occur due to use of `*self` in closure [INFO] [stdout] | | [INFO] [stdout] | closures are constructed here in different iterations of loop [INFO] [stdout] ... [INFO] [stdout] 233 | if result?.borrow().is_truthy() { [INFO] [stdout] | ------- returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0501]: cannot borrow `*self` as mutable because previous closure requires unique access [INFO] [stdout] --> src/runtime/evaluator.rs:234:41 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 229 | condition.map(|condition| self.evaluate_expr(condition, env.clone())); [INFO] [stdout] | ----------- ---- first borrow occurs due to use of `*self` in closure [INFO] [stdout] | | [INFO] [stdout] | closure construction occurs here [INFO] [stdout] ... [INFO] [stdout] 233 | if result?.borrow().is_truthy() { [INFO] [stdout] | ------- returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] 234 | value = self.evaluate_expr(*expr, env)?; [INFO] [stdout] | ^^^^ second borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0501]: cannot borrow `*self` as mutable because previous closure requires unique access [INFO] [stdout] --> src/runtime/evaluator.rs:239:37 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 229 | condition.map(|condition| self.evaluate_expr(condition, env.clone())); [INFO] [stdout] | ----------- ---- first borrow occurs due to use of `*self` in closure [INFO] [stdout] | | [INFO] [stdout] | closure construction occurs here [INFO] [stdout] ... [INFO] [stdout] 233 | if result?.borrow().is_truthy() { [INFO] [stdout] | ------- returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 239 | value = self.evaluate_expr(*expr, env)?; [INFO] [stdout] | ^^^^ second borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:249:33 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 249 | let value = self.evaluate_expr(*condition.clone(), env.clone())?; [INFO] [stdout] | ^^^^------------------------------------------------ [INFO] [stdout] | | [INFO] [stdout] | `*self` was mutably borrowed here in the previous iteration of the loop [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:255:21 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 249 | let value = self.evaluate_expr(*condition.clone(), env.clone())?; [INFO] [stdout] | ---------------------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 255 | self.evaluate_expr(*body.clone(), while_env.clone())?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:269:29 [INFO] [stdout] | [INFO] [stdout] 116 | fn evaluate_expr(&mut self, expr: Expr, env: Rc>) -> Result { [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 269 | value = self.evaluate_stmt(stmt, block_env.clone())?; [INFO] [stdout] | ^^^^---------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | `*self` was mutably borrowed here in the previous iteration of the loop [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:297:17 [INFO] [stdout] | [INFO] [stdout] 286 | &mut self, [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 292 | let lhs = self.evaluate_expr(lhs, env.clone())?; [INFO] [stdout] | ------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 297 | self.evaluate_expr(rhs, env.clone()) [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time [INFO] [stdout] --> src/runtime/evaluator.rs:302:23 [INFO] [stdout] | [INFO] [stdout] 286 | &mut self, [INFO] [stdout] | - let's call the lifetime of this reference `'1` [INFO] [stdout] ... [INFO] [stdout] 292 | let lhs = self.evaluate_expr(lhs, env.clone())?; [INFO] [stdout] | ------------------------------------- [INFO] [stdout] | | [INFO] [stdout] | first mutable borrow occurs here [INFO] [stdout] | returning this value requires that `*self` is borrowed for `'1` [INFO] [stdout] ... [INFO] [stdout] 302 | let rhs = self.evaluate_expr(rhs, env.clone())?; [INFO] [stdout] | ^^^^ second mutable borrow occurs here [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return value referencing temporary value [INFO] [stdout] --> src/runtime/evaluator.rs:313:32 [INFO] [stdout] | [INFO] [stdout] 304 | let left = &*lhs.borrow(); [INFO] [stdout] | ------------ temporary value created here [INFO] [stdout] ... [INFO] [stdout] 313 | Op::QuotDiv => left.try_quot_div(right)?, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0515]: cannot return value referencing local variable `lhs` [INFO] [stdout] --> src/runtime/evaluator.rs:313:32 [INFO] [stdout] | [INFO] [stdout] 304 | let left = &*lhs.borrow(); [INFO] [stdout] | --- `lhs` is borrowed here [INFO] [stdout] ... [INFO] [stdout] 313 | Op::QuotDiv => left.try_quot_div(right)?, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ returns a value referencing data owned by the current function [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0106, E0499, E0501, E0502, E0515, E0524, E0599, E0726. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0106`. [INFO] [stdout] [INFO] [stderr] error: could not compile `peanut` (bin "peanut") due to 74 previous errors; 4 warnings emitted [INFO] running `Command { std: "docker" "inspect" "16dca5f270026df20e4f93a5ca215be9b82720223db0c213d116101cdd0fbad1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "16dca5f270026df20e4f93a5ca215be9b82720223db0c213d116101cdd0fbad1", kill_on_drop: false }` [INFO] [stdout] 16dca5f270026df20e4f93a5ca215be9b82720223db0c213d116101cdd0fbad1