[INFO] cloning repository https://github.com/dobrakmato/rust-brainfuck [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/dobrakmato/rust-brainfuck" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdobrakmato%2Frust-brainfuck", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdobrakmato%2Frust-brainfuck'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 8fa3572c26c888987b9519d610f3b59b9d5aefee [INFO] testing dobrakmato/rust-brainfuck against master#d98a5da813da67eb189387b8ccfb73cf481275d8+rustflags=-Copt-level=3 for pr-138759-retry [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdobrakmato%2Frust-brainfuck" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/dobrakmato/rust-brainfuck [INFO] finished tweaking git repo https://github.com/dobrakmato/rust-brainfuck [INFO] tweaked toml for git repo https://github.com/dobrakmato/rust-brainfuck written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/dobrakmato/rust-brainfuck on toolchain d98a5da813da67eb189387b8ccfb73cf481275d8 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/dobrakmato/rust-brainfuck 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" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded termion v1.5.1 [INFO] [stderr] Downloaded libc v0.2.51 [INFO] [stderr] Downloaded winapi v0.3.6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 39df94d85125c6621ba3e83409b6c01aa55021f4d4c3368df7cecfb91a496077 [INFO] running `Command { std: "docker" "start" "-a" "39df94d85125c6621ba3e83409b6c01aa55021f4d4c3368df7cecfb91a496077", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "39df94d85125c6621ba3e83409b6c01aa55021f4d4c3368df7cecfb91a496077", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "39df94d85125c6621ba3e83409b6c01aa55021f4d4c3368df7cecfb91a496077", kill_on_drop: false }` [INFO] [stdout] 39df94d85125c6621ba3e83409b6c01aa55021f4d4c3368df7cecfb91a496077 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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 -Copt-level=3" "-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c1f5ee6a97bea8977a35096782496ffc52ef9ed979b440068612194c757f69eb [INFO] running `Command { std: "docker" "start" "-a" "c1f5ee6a97bea8977a35096782496ffc52ef9ed979b440068612194c757f69eb", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.51 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Compiling unicode-width v0.1.5 [INFO] [stderr] Compiling vec_map v0.8.1 [INFO] [stderr] Compiling strsim v0.8.0 [INFO] [stderr] Compiling ansi_term v0.11.0 [INFO] [stderr] Compiling textwrap v0.11.0 [INFO] [stderr] Compiling atty v0.2.11 [INFO] [stderr] Compiling memmap v0.7.0 [INFO] [stderr] Compiling clap v2.33.3 [INFO] [stderr] Compiling bfjit v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:14:12 [INFO] [stdout] | [INFO] [stdout] 14 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: expected names are: `docsrs`, `feature`, and `test` and 31 more [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:71:12 [INFO] [stdout] | [INFO] [stdout] 71 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:90:12 [INFO] [stdout] | [INFO] [stdout] 90 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `mul_unsigned` and `mov_to_mem_offset` are never used [INFO] [stdout] --> src/assembler.rs:102:12 [INFO] [stdout] | [INFO] [stdout] 50 | impl<'a> Assembler<'a> { [INFO] [stdout] | ---------------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 102 | pub fn mul_unsigned(&mut self, reg: X64Register) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 282 | pub fn mov_to_mem_offset(&mut self, to_memory: X64Register, from_reg: X64Register, offset: i8) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `1` is never read [INFO] [stdout] --> src/ir.rs:24:25 [INFO] [stdout] | [INFO] [stdout] 24 | JumpIfNotZero(Link, Link), [INFO] [stdout] | ------------- ^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IrOp` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 24 - JumpIfNotZero(Link, Link), [INFO] [stdout] 24 + JumpIfNotZero(Link, ()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Noop` is never constructed [INFO] [stdout] --> src/ir.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum IrOp { [INFO] [stdout] | ---- variant in this enum [INFO] [stdout] 11 | Noop(Link), [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `IrOp` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/ir.rs:246:17 [INFO] [stdout] | [INFO] [stdout] 246 | pub fn iter(&self) -> Iter { [INFO] [stdout] | ^^^^^ ---- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 246 | pub fn iter(&self) -> Iter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` fn uses type `Brainfuck`, which is not FFI-safe [INFO] [stdout] --> src/compiler.rs:146:31 [INFO] [stdout] | [INFO] [stdout] 146 | pub extern "C" fn execute(self) { [INFO] [stdout] | ^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct [INFO] [stdout] = note: this struct has unspecified layout [INFO] [stdout] note: the type is defined here [INFO] [stdout] --> src/compiler.rs:126:1 [INFO] [stdout] | [INFO] [stdout] 126 | pub struct Brainfuck { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(improper_ctypes_definitions)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 18.60s [INFO] running `Command { std: "docker" "inspect" "c1f5ee6a97bea8977a35096782496ffc52ef9ed979b440068612194c757f69eb", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c1f5ee6a97bea8977a35096782496ffc52ef9ed979b440068612194c757f69eb", kill_on_drop: false }` [INFO] [stdout] c1f5ee6a97bea8977a35096782496ffc52ef9ed979b440068612194c757f69eb [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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 -Copt-level=3" "-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 81969a9a782ee16245c2cda4ac0f120f7aa3535a4994f80693a99991db185da9 [INFO] running `Command { std: "docker" "start" "-a" "81969a9a782ee16245c2cda4ac0f120f7aa3535a4994f80693a99991db185da9", kill_on_drop: false }` [INFO] [stderr] Compiling matches v0.1.8 [INFO] [stderr] Compiling bfjit v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:14:12 [INFO] [stdout] | [INFO] [stdout] 14 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: expected names are: `docsrs`, `feature`, and `test` and 31 more [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:71:12 [INFO] [stdout] | [INFO] [stdout] 71 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stdout] --> src/main.rs:90:12 [INFO] [stdout] | [INFO] [stdout] 90 | #[cfg_attr(tarpaulin, skip)] [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using a Cargo feature instead [INFO] [stdout] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stdout] [lints.rust] [INFO] [stdout] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stdout] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stdout] = note: see for more information about checking conditional configuration [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `1` is never read [INFO] [stdout] --> src/ir.rs:24:25 [INFO] [stdout] | [INFO] [stdout] 24 | JumpIfNotZero(Link, Link), [INFO] [stdout] | ------------- ^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IrOp` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 24 - JumpIfNotZero(Link, Link), [INFO] [stdout] 24 + JumpIfNotZero(Link, ()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/ir.rs:246:17 [INFO] [stdout] | [INFO] [stdout] 246 | pub fn iter(&self) -> Iter { [INFO] [stdout] | ^^^^^ ---- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 246 | pub fn iter(&self) -> Iter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` fn uses type `Brainfuck`, which is not FFI-safe [INFO] [stdout] --> src/compiler.rs:146:31 [INFO] [stdout] | [INFO] [stdout] 146 | pub extern "C" fn execute(self) { [INFO] [stdout] | ^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct [INFO] [stdout] = note: this struct has unspecified layout [INFO] [stdout] note: the type is defined here [INFO] [stdout] --> src/compiler.rs:126:1 [INFO] [stdout] | [INFO] [stdout] 126 | pub struct Brainfuck { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] = note: `#[warn(improper_ctypes_definitions)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/interpreter.rs:71:34 [INFO] [stdout] | [INFO] [stdout] 71 | fn make_interpreter(program: &Program) -> Interpreter { [INFO] [stdout] | ^^^^^^^^ -------------------------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 71 | fn make_interpreter(program: &Program) -> Interpreter<'_, Stdin, Stdout> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 2.16s [INFO] running `Command { std: "docker" "inspect" "81969a9a782ee16245c2cda4ac0f120f7aa3535a4994f80693a99991db185da9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "81969a9a782ee16245c2cda4ac0f120f7aa3535a4994f80693a99991db185da9", kill_on_drop: false }` [INFO] [stdout] 81969a9a782ee16245c2cda4ac0f120f7aa3535a4994f80693a99991db185da9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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 -Copt-level=3" "-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 31b6d5a6d031fadffc5c69b70fece2f6a0b152f0e78bd80404afe61b28be9620 [INFO] running `Command { std: "docker" "start" "-a" "31b6d5a6d031fadffc5c69b70fece2f6a0b152f0e78bd80404afe61b28be9620", kill_on_drop: false }` [INFO] [stderr] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stderr] --> src/main.rs:14:12 [INFO] [stderr] | [INFO] [stderr] 14 | #[cfg_attr(tarpaulin, skip)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: expected names are: `docsrs`, `feature`, and `test` and 31 more [INFO] [stderr] = help: consider using a Cargo feature instead [INFO] [stderr] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stderr] [lints.rust] [INFO] [stderr] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stderr] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stderr] = note: see for more information about checking conditional configuration [INFO] [stderr] = note: `#[warn(unexpected_cfgs)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stderr] --> src/main.rs:71:12 [INFO] [stderr] | [INFO] [stderr] 71 | #[cfg_attr(tarpaulin, skip)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider using a Cargo feature instead [INFO] [stderr] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stderr] [lints.rust] [INFO] [stderr] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stderr] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stderr] = note: see for more information about checking conditional configuration [INFO] [stderr] [INFO] [stderr] warning: unexpected `cfg` condition name: `tarpaulin` [INFO] [stderr] --> src/main.rs:90:12 [INFO] [stderr] | [INFO] [stderr] 90 | #[cfg_attr(tarpaulin, skip)] [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: consider using a Cargo feature instead [INFO] [stderr] = help: or consider adding in `Cargo.toml` the `check-cfg` lint config for the lint: [INFO] [stderr] [lints.rust] [INFO] [stderr] unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin)'] } [INFO] [stderr] = help: or consider adding `println!("cargo::rustc-check-cfg=cfg(tarpaulin)");` to the top of the `build.rs` [INFO] [stderr] = note: see for more information about checking conditional configuration [INFO] [stderr] [INFO] [stderr] warning: field `1` is never read [INFO] [stderr] --> src/ir.rs:24:25 [INFO] [stderr] | [INFO] [stderr] 24 | JumpIfNotZero(Link, Link), [INFO] [stderr] | ------------- ^^^^ [INFO] [stderr] | | [INFO] [stderr] | field in this variant [INFO] [stderr] | [INFO] [stderr] = note: `IrOp` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] = note: `#[warn(dead_code)]` on by default [INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stderr] | [INFO] [stderr] 24 - JumpIfNotZero(Link, Link), [INFO] [stderr] 24 + JumpIfNotZero(Link, ()), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stderr] --> src/ir.rs:246:17 [INFO] [stderr] | [INFO] [stderr] 246 | pub fn iter(&self) -> Iter { [INFO] [stderr] | ^^^^^ ---- the lifetime gets resolved as `'_` [INFO] [stderr] | | [INFO] [stderr] | this lifetime flows to the output [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stderr] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stderr] | [INFO] [stderr] 246 | pub fn iter(&self) -> Iter<'_> { [INFO] [stderr] | ++++ [INFO] [stderr] [INFO] [stderr] warning: `extern` fn uses type `Brainfuck`, which is not FFI-safe [INFO] [stderr] --> src/compiler.rs:146:31 [INFO] [stderr] | [INFO] [stderr] 146 | pub extern "C" fn execute(self) { [INFO] [stderr] | ^^^^ not FFI-safe [INFO] [stderr] | [INFO] [stderr] = help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct [INFO] [stderr] = note: this struct has unspecified layout [INFO] [stderr] note: the type is defined here [INFO] [stderr] --> src/compiler.rs:126:1 [INFO] [stderr] | [INFO] [stderr] 126 | pub struct Brainfuck { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: `#[warn(improper_ctypes_definitions)]` on by default [INFO] [stderr] [INFO] [stderr] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stderr] --> src/interpreter.rs:71:34 [INFO] [stderr] | [INFO] [stderr] 71 | fn make_interpreter(program: &Program) -> Interpreter { [INFO] [stderr] | ^^^^^^^^ -------------------------- the lifetime gets resolved as `'_` [INFO] [stderr] | | [INFO] [stderr] | this lifetime flows to the output [INFO] [stderr] | [INFO] [stderr] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stderr] | [INFO] [stderr] 71 | fn make_interpreter(program: &Program) -> Interpreter<'_, Stdin, Stdout> { [INFO] [stderr] | +++ [INFO] [stderr] [INFO] [stderr] warning: `bfjit` (bin "bfjit" test) generated 7 warnings [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.06s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/bfjit-8af528634b759e0c) [INFO] [stdout] [INFO] [stdout] running 46 tests [INFO] [stdout] test assembler::test::add_indirect ... ok [INFO] [stdout] test assembler::test::call ... ok [INFO] [stdout] test assembler::test::add ... ok [INFO] [stdout] test assembler::test::add_to_mem_offset ... ok [INFO] [stdout] test assembler::test::je ... ok [INFO] [stdout] test assembler::test::cmp_indirect ... ok [INFO] [stdout] test assembler::test::jne ... ok [INFO] [stdout] test assembler::test::mov_indirect ... ok [INFO] [stdout] test assembler::test::mul_unsigned ... ok [INFO] [stdout] test assembler::test::sub_indirect ... ok [INFO] [stdout] test brainfuck::test::check_supported_ops ... ok [INFO] [stdout] test brainfuck::test::find_matching_parentheses ... ok [INFO] [stdout] test assembler::test::sub ... ok [INFO] [stdout] test brainfuck::test::ignores_comments ... ok [INFO] [stdout] test compiler::test::copy_multiplied ... ok [INFO] [stdout] test assembler::test::push ... ok [INFO] [stdout] test assembler::test::pop ... ok [INFO] [stdout] test assembler::test::mov_to_memory ... ok [INFO] [stdout] test assembler::test::mov_to_mem_offset ... ok [INFO] [stdout] test assembler::test::mov ... ok [INFO] [stdout] test assembler::test::mov_to_reg ... ok [INFO] [stdout] test assembler::test::mul_signed ... ok [INFO] [stdout] test interpreter::test::can_read_input ... ok [INFO] [stdout] test interpreter::test::increment_memory ... ok [INFO] [stdout] test ir::test::len ... ok [INFO] [stdout] test ir::test::optimizes_clear_loops ... ok [INFO] [stdout] test interpreter::test::can_write_output ... ok [INFO] [stdout] test interpreter::test::decrement_memory ... ok [INFO] [stdout] test ir::test::optimizes_adds_following_preceding_clear_loops ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_adds ... ok [INFO] [stdout] test ir::test::multiplication_loop_negative_bug ... ok [INFO] [stdout] test interpreter::test::loops_work ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_lefts_rights ... ok [INFO] [stdout] test interpreter::test::move_ptr ... ok [INFO] [stdout] test assembler::test::ret ... ok [INFO] [stdout] test compiler::test::does_not_crash ... ok [INFO] [stdout] test ir::test::iter ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_mixed_adds ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_sets ... ok [INFO] [stdout] test ir::test::optimizes_multiplication_loops ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_subtractions ... ok [INFO] [stdout] test ir::test::optimizes_tail_instructions ... ok [INFO] [stdout] test ir::test::optimizes_consecutive_mixed_lefts_rights ... ok [INFO] [stdout] test compiler::test::can_run_pi_bf ... FAILED [INFO] [stdout] test interpreter::test::can_run_pi_bf ... ok [INFO] [stderr] error: test failed, to rerun pass `--bin bfjit` [INFO] [stdout] test ir::test::can_print_debug ... ok [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- compiler::test::can_run_pi_bf stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'compiler::test::can_run_pi_bf' panicked at src/compiler.rs:214:9: [INFO] [stdout] assertion `left == right` failed [INFO] [stdout] left: 77 [INFO] [stdout] right: 51 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x5ddac223e852 - std::backtrace_rs::backtrace::libunwind::trace::hd39b1f53d3cf9745 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x5ddac223e852 - std::backtrace_rs::backtrace::trace_unsynchronized::he91d9a75d4e3972b [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x5ddac223e852 - std::sys::backtrace::_print_fmt::hca46938f8c6e22cf [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/backtrace.rs:66:9 [INFO] [stdout] 3: 0x5ddac223e852 - ::fmt::ha499add612cccf8e [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/backtrace.rs:39:26 [INFO] [stdout] 4: 0x5ddac2263a23 - core::fmt::rt::Argument::fmt::hd21145b75a833b7a [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/fmt/rt.rs:173:76 [INFO] [stdout] 5: 0x5ddac2263a23 - core::fmt::write::hb10c956f5235c8a4 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/fmt/mod.rs:1465:25 [INFO] [stdout] 6: 0x5ddac223b953 - std::io::default_write_fmt::hdb7615052be2ba4d [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x5ddac223b953 - std::io::Write::write_fmt::he1bcd251ec6e4153 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/io/mod.rs:1954:13 [INFO] [stdout] 8: 0x5ddac223e6a2 - std::sys::backtrace::BacktraceLock::print::hb47c770ef659fd10 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/backtrace.rs:42:9 [INFO] [stdout] 9: 0x5ddac223fdcc - std::panicking::default_hook::{{closure}}::hdda8afb9d457a22c [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:300:27 [INFO] [stdout] 10: 0x5ddac223fc22 - std::panicking::default_hook::h7c46b44874fe5c9a [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:324:9 [INFO] [stdout] 11: 0x5ddac2207384 - as core::ops::function::Fn>::call::h178a5fcedee41e2f [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/alloc/src/boxed.rs:1985:9 [INFO] [stdout] 12: 0x5ddac2207384 - test::test_main_with_exit_callback::{{closure}}::h951a41e0149d6d5d [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x5ddac22408ab - as core::ops::function::Fn>::call::h13602080f5b63276 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/alloc/src/boxed.rs:1985:9 [INFO] [stdout] 14: 0x5ddac22408ab - std::panicking::rust_panic_with_hook::ha6cb99ed099eb1c5 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:841:13 [INFO] [stdout] 15: 0x5ddac224057a - std::panicking::begin_panic_handler::{{closure}}::he11808bc797ee921 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:706:13 [INFO] [stdout] 16: 0x5ddac223ed59 - std::sys::backtrace::__rust_end_short_backtrace::h9418807cb7346258 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/backtrace.rs:168:18 [INFO] [stdout] 17: 0x5ddac224020d - __rustc[18fb429eef004894]::rust_begin_unwind [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:697:5 [INFO] [stdout] 18: 0x5ddac2262570 - core::panicking::panic_fmt::hd890aeb12c3a3fc3 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/panicking.rs:75:14 [INFO] [stdout] 19: 0x5ddac2262807 - core::panicking::assert_failed_inner::h02e1528dd7bc6647 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/panicking.rs:448:17 [INFO] [stdout] 20: 0x5ddac21cdac9 - core::panicking::assert_failed::ha4511cdf83bbdaf1 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/panicking.rs:403:5 [INFO] [stdout] 21: 0x5ddac21cb258 - bfjit::compiler::test::can_run_pi_bf::h39b7a9767a5fe102 [INFO] [stdout] 22: 0x5ddac21cd679 - bfjit::compiler::test::can_run_pi_bf::{{closure}}::h976c9eed5aab1db6 [INFO] [stdout] at /opt/rustwide/workdir/src/compiler.rs:197:23 [INFO] [stdout] 23: 0x5ddac21cd679 - core::ops::function::FnOnce::call_once::hf925e038f12d46d8 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 24: 0x5ddac220cb0b - core::ops::function::FnOnce::call_once::h2869fb5b0a2b0bdc [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x5ddac220cb0b - test::__rust_begin_short_backtrace::h7dd7142bd62fa711 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:648:18 [INFO] [stdout] 26: 0x5ddac220bcfe - test::run_test_in_process::{{closure}}::h43a753f038d36b3f [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:671:74 [INFO] [stdout] 27: 0x5ddac220bcfe - as core::ops::function::FnOnce<()>>::call_once::h0ca95dd3e12d1e16 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 28: 0x5ddac220bcfe - std::panicking::catch_unwind::do_call::he308587d70ac34ba [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:589:40 [INFO] [stdout] 29: 0x5ddac220bcfe - std::panicking::catch_unwind::h30dcba31973e8fb0 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:552:19 [INFO] [stdout] 30: 0x5ddac220bcfe - std::panic::catch_unwind::hfb68364e5621fbee [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panic.rs:359:14 [INFO] [stdout] 31: 0x5ddac220bcfe - test::run_test_in_process::hcdcc2977903b998a [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:671:27 [INFO] [stdout] 32: 0x5ddac220bcfe - test::run_test::{{closure}}::h544a6550958c5d14 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:592:43 [INFO] [stdout] 33: 0x5ddac21cf874 - test::run_test::{{closure}}::hb172e48ebe2b92c7 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/test/src/lib.rs:622:41 [INFO] [stdout] 34: 0x5ddac21cf874 - std::sys::backtrace::__rust_begin_short_backtrace::h7e79d8706638bea0 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/backtrace.rs:152:18 [INFO] [stdout] 35: 0x5ddac21d324a - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::hc4a275f1e71b8ab0 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/thread/mod.rs:559:17 [INFO] [stdout] 36: 0x5ddac21d324a - as core::ops::function::FnOnce<()>>::call_once::h01ed0d242df78cfd [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/panic/unwind_safe.rs:272:9 [INFO] [stdout] 37: 0x5ddac21d324a - std::panicking::catch_unwind::do_call::h052f373fb905fee0 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:589:40 [INFO] [stdout] 38: 0x5ddac21d324a - std::panicking::catch_unwind::hb425d20c8ffb09c8 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panicking.rs:552:19 [INFO] [stdout] 39: 0x5ddac21d324a - std::panic::catch_unwind::ha0d5dfbf18fdeda5 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/panic.rs:359:14 [INFO] [stdout] 40: 0x5ddac21d324a - std::thread::Builder::spawn_unchecked_::{{closure}}::hbe79182bd37949c7 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/thread/mod.rs:557:30 [INFO] [stdout] 41: 0x5ddac21d324a - core::ops::function::FnOnce::call_once{{vtable.shim}}::hc096c4a06972fde5 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 42: 0x5ddac2243807 - as core::ops::function::FnOnce>::call_once::h47377e27fb938a26 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/alloc/src/boxed.rs:1971:9 [INFO] [stdout] 43: 0x5ddac2243807 - as core::ops::function::FnOnce>::call_once::h72f1fe5d095abf57 [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/alloc/src/boxed.rs:1971:9 [INFO] [stdout] 44: 0x5ddac2243807 - std::sys::pal::unix::thread::Thread::new::thread_start::h0a4d8e1b9c0d38cf [INFO] [stdout] at /rustc/d98a5da813da67eb189387b8ccfb73cf481275d8/library/std/src/sys/pal/unix/thread.rs:97:17 [INFO] [stdout] 45: 0x776226d8daa4 - [INFO] [stdout] 46: 0x776226e1aa34 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] compiler::test::can_run_pi_bf [INFO] [stdout] [INFO] [stdout] test result: FAILED. 45 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "31b6d5a6d031fadffc5c69b70fece2f6a0b152f0e78bd80404afe61b28be9620", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "31b6d5a6d031fadffc5c69b70fece2f6a0b152f0e78bd80404afe61b28be9620", kill_on_drop: false }` [INFO] [stdout] 31b6d5a6d031fadffc5c69b70fece2f6a0b152f0e78bd80404afe61b28be9620