[INFO] cloning repository https://github.com/seemk/libz80-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/seemk/libz80-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fseemk%2Flibz80-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fseemk%2Flibz80-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 0a24d459e207116a9d0e1837ef69df21a974ce24 [INFO] testing seemk/libz80-rs against 1.60.0 for beta-1.61-1 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fseemk%2Flibz80-rs" "/workspace/builds/worker-18/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-18/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/seemk/libz80-rs on toolchain 1.60.0 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+1.60.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/seemk/libz80-rs [INFO] finished tweaking git repo https://github.com/seemk/libz80-rs [INFO] tweaked toml for git repo https://github.com/seemk/libz80-rs written to /workspace/builds/worker-18/source/Cargo.toml [INFO] crate git repo https://github.com/seemk/libz80-rs already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+1.60.0" "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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/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:b0c94ce3c1162fcb8e57cac5b65ec2f72eabb1eebea4fcc35e269e823f681646" "/opt/rustwide/cargo-home/bin/cargo" "+1.60.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 59f51dd47f9fcec05bec127b6cf93341fb77261fbabfb3b9ae2e6322e6921be8 [INFO] running `Command { std: "docker" "start" "-a" "59f51dd47f9fcec05bec127b6cf93341fb77261fbabfb3b9ae2e6322e6921be8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "59f51dd47f9fcec05bec127b6cf93341fb77261fbabfb3b9ae2e6322e6921be8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "59f51dd47f9fcec05bec127b6cf93341fb77261fbabfb3b9ae2e6322e6921be8", kill_on_drop: false }` [INFO] [stdout] 59f51dd47f9fcec05bec127b6cf93341fb77261fbabfb3b9ae2e6322e6921be8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/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=warn" "-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:b0c94ce3c1162fcb8e57cac5b65ec2f72eabb1eebea4fcc35e269e823f681646" "/opt/rustwide/cargo-home/bin/cargo" "+1.60.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0ec17aacb338e32825bfeaf4f78873f46900901731586819049cc197bd6fd5b9 [INFO] running `Command { std: "docker" "start" "-a" "0ec17aacb338e32825bfeaf4f78873f46900901731586819049cc197bd6fd5b9", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Compiling libc v0.2.6 [INFO] [stderr] Compiling libz80-rs v0.0.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unknown_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:51:9 [INFO] [stdout] | [INFO] [stdout] 51 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `AF` should have a snake case name [INFO] [stdout] --> src/lib.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | pub AF: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `af` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `BC` should have a snake case name [INFO] [stdout] --> src/lib.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | pub BC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `bc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `DE` should have a snake case name [INFO] [stdout] --> src/lib.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub DE: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `de` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `HL` should have a snake case name [INFO] [stdout] --> src/lib.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub HL: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `hl` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 32 | pub IX: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:33:9 [INFO] [stdout] | [INFO] [stdout] 33 | pub IY: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:34:9 [INFO] [stdout] | [INFO] [stdout] 34 | pub SP: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R1` should have a snake case name [INFO] [stdout] --> src/lib.rs:53:9 [INFO] [stdout] | [INFO] [stdout] 53 | pub R1: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R2` should have a snake case name [INFO] [stdout] --> src/lib.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 54 | pub R2: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `PC` should have a snake case name [INFO] [stdout] --> src/lib.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | pub PC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `pc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R` should have a snake case name [INFO] [stdout] --> src/lib.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | pub R: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case: `r` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `I` should have a snake case name [INFO] [stdout] --> src/lib.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | pub I: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:58:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub IFF1: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | pub IFF2: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IM` should have a snake case name [INFO] [stdout] --> src/lib.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub IM: c_uchar, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `im` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:22 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:13 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:22 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:13 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:22 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:13 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:22 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:13 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:22 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:22 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:22 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:22 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:22 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:13 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:22 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `set_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:22 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `get_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:174:24 [INFO] [stdout] | [INFO] [stdout] 174 | fn Z80Execute(ctx: *mut Context); [INFO] [stdout] | ^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(improper_ctypes)]` on by default [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:175:31 [INFO] [stdout] | [INFO] [stdout] 175 | fn Z80ExecuteTStates(ctx: *mut Context, tstates: c_uint) -> [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:178:22 [INFO] [stdout] | [INFO] [stdout] 178 | fn Z80RESET(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:179:20 [INFO] [stdout] | [INFO] [stdout] 179 | fn Z80INT(ctx: *mut Context, value: c_uchar); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:180:20 [INFO] [stdout] | [INFO] [stdout] 180 | fn Z80NMI(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 44 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 13.08s [INFO] running `Command { std: "docker" "inspect" "0ec17aacb338e32825bfeaf4f78873f46900901731586819049cc197bd6fd5b9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0ec17aacb338e32825bfeaf4f78873f46900901731586819049cc197bd6fd5b9", kill_on_drop: false }` [INFO] [stdout] 0ec17aacb338e32825bfeaf4f78873f46900901731586819049cc197bd6fd5b9 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-18/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=warn" "-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:b0c94ce3c1162fcb8e57cac5b65ec2f72eabb1eebea4fcc35e269e823f681646" "/opt/rustwide/cargo-home/bin/cargo" "+1.60.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 7ffb63f129818dca4ac47498e8f5bce0aa7f141b7e4c66868fd9e8eecadcd66a [INFO] running `Command { std: "docker" "start" "-a" "7ffb63f129818dca4ac47498e8f5bce0aa7f141b7e4c66868fd9e8eecadcd66a", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unknown_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:51:9 [INFO] [stdout] | [INFO] [stdout] 51 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `AF` should have a snake case name [INFO] [stdout] --> src/lib.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | pub AF: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `af` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `BC` should have a snake case name [INFO] [stdout] --> src/lib.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | pub BC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `bc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `DE` should have a snake case name [INFO] [stdout] --> src/lib.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub DE: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `de` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `HL` should have a snake case name [INFO] [stdout] --> src/lib.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub HL: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `hl` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 32 | pub IX: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:33:9 [INFO] [stdout] | [INFO] [stdout] 33 | pub IY: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:34:9 [INFO] [stdout] | [INFO] [stdout] 34 | pub SP: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R1` should have a snake case name [INFO] [stdout] --> src/lib.rs:53:9 [INFO] [stdout] | [INFO] [stdout] 53 | pub R1: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R2` should have a snake case name [INFO] [stdout] --> src/lib.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 54 | pub R2: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `PC` should have a snake case name [INFO] [stdout] --> src/lib.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | pub PC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `pc` [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling libz80-rs v0.0.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: structure field `R` should have a snake case name [INFO] [stdout] --> src/lib.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | pub R: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case: `r` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `I` should have a snake case name [INFO] [stdout] --> src/lib.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | pub I: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:58:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub IFF1: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | pub IFF2: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IM` should have a snake case name [INFO] [stdout] --> src/lib.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub IM: c_uchar, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `im` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:22 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:13 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:22 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:13 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:22 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:13 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:22 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:13 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:22 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:22 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:22 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:22 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:22 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:13 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:22 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `set_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:22 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `get_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:174:24 [INFO] [stdout] | [INFO] [stdout] 174 | fn Z80Execute(ctx: *mut Context); [INFO] [stdout] | ^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(improper_ctypes)]` on by default [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:175:31 [INFO] [stdout] | [INFO] [stdout] 175 | fn Z80ExecuteTStates(ctx: *mut Context, tstates: c_uint) -> [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:178:22 [INFO] [stdout] | [INFO] [stdout] 178 | fn Z80RESET(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:179:20 [INFO] [stdout] | [INFO] [stdout] 179 | fn Z80INT(ctx: *mut Context, value: c_uchar); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:180:20 [INFO] [stdout] | [INFO] [stdout] 180 | fn Z80NMI(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 44 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:25:9 [INFO] [stdout] | [INFO] [stdout] 25 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unknown_lints)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unknown lint: `uppercase_variables` [INFO] [stdout] --> src/lib.rs:51:9 [INFO] [stdout] | [INFO] [stdout] 51 | #[allow(uppercase_variables)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `AF` should have a snake case name [INFO] [stdout] --> src/lib.rs:28:9 [INFO] [stdout] | [INFO] [stdout] 28 | pub AF: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `af` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(non_snake_case)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `BC` should have a snake case name [INFO] [stdout] --> src/lib.rs:29:9 [INFO] [stdout] | [INFO] [stdout] 29 | pub BC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `bc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `DE` should have a snake case name [INFO] [stdout] --> src/lib.rs:30:9 [INFO] [stdout] | [INFO] [stdout] 30 | pub DE: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `de` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `HL` should have a snake case name [INFO] [stdout] --> src/lib.rs:31:9 [INFO] [stdout] | [INFO] [stdout] 31 | pub HL: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `hl` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:32:9 [INFO] [stdout] | [INFO] [stdout] 32 | pub IX: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:33:9 [INFO] [stdout] | [INFO] [stdout] 33 | pub IY: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case (notice the capitalization): `iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:34:9 [INFO] [stdout] | [INFO] [stdout] 34 | pub SP: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R1` should have a snake case name [INFO] [stdout] --> src/lib.rs:53:9 [INFO] [stdout] | [INFO] [stdout] 53 | pub R1: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R2` should have a snake case name [INFO] [stdout] --> src/lib.rs:54:9 [INFO] [stdout] | [INFO] [stdout] 54 | pub R2: Registers, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `r2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `PC` should have a snake case name [INFO] [stdout] --> src/lib.rs:55:9 [INFO] [stdout] | [INFO] [stdout] 55 | pub PC: c_ushort, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `pc` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `R` should have a snake case name [INFO] [stdout] --> src/lib.rs:56:9 [INFO] [stdout] | [INFO] [stdout] 56 | pub R: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case: `r` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `I` should have a snake case name [INFO] [stdout] --> src/lib.rs:57:9 [INFO] [stdout] | [INFO] [stdout] 57 | pub I: c_uchar, [INFO] [stdout] | ^ help: convert the identifier to snake case (notice the capitalization): `i` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:58:9 [INFO] [stdout] | [INFO] [stdout] 58 | pub IFF1: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IFF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:59:9 [INFO] [stdout] | [INFO] [stdout] 59 | pub IFF2: c_uchar, [INFO] [stdout] | ^^^^ help: convert the identifier to snake case (notice the capitalization): `iff2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: structure field `IM` should have a snake case name [INFO] [stdout] --> src/lib.rs:60:9 [INFO] [stdout] | [INFO] [stdout] 60 | pub IM: c_uchar, [INFO] [stdout] | ^^ help: convert the identifier to snake case: `im` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:13 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF1` should have a snake case name [INFO] [stdout] --> src/lib.rs:94:22 [INFO] [stdout] | [INFO] [stdout] 94 | reg_access!(set_AF1, get_AF1, AF, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:13 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC1` should have a snake case name [INFO] [stdout] --> src/lib.rs:95:22 [INFO] [stdout] | [INFO] [stdout] 95 | reg_access!(set_BC1, get_BC1, BC, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:13 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE1` should have a snake case name [INFO] [stdout] --> src/lib.rs:96:22 [INFO] [stdout] | [INFO] [stdout] 96 | reg_access!(set_DE1, get_DE1, DE, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:13 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL1` should have a snake case name [INFO] [stdout] --> src/lib.rs:97:22 [INFO] [stdout] | [INFO] [stdout] 97 | reg_access!(set_HL1, get_HL1, HL, R1, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl1` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:13 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_AF2` should have a snake case name [INFO] [stdout] --> src/lib.rs:98:22 [INFO] [stdout] | [INFO] [stdout] 98 | reg_access!(set_AF2, get_AF2, AF, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_af2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:13 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_BC2` should have a snake case name [INFO] [stdout] --> src/lib.rs:99:22 [INFO] [stdout] | [INFO] [stdout] 99 | reg_access!(set_BC2, get_BC2, BC, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_bc2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:13 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_DE2` should have a snake case name [INFO] [stdout] --> src/lib.rs:100:22 [INFO] [stdout] | [INFO] [stdout] 100 | reg_access!(set_DE2, get_DE2, DE, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_de2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:13 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `set_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_HL2` should have a snake case name [INFO] [stdout] --> src/lib.rs:101:22 [INFO] [stdout] | [INFO] [stdout] 101 | reg_access!(set_HL2, get_HL2, HL, R2, u16); [INFO] [stdout] | ^^^^^^^ help: convert the identifier to snake case: `get_hl2` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:13 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IY` should have a snake case name [INFO] [stdout] --> src/lib.rs:102:22 [INFO] [stdout] | [INFO] [stdout] 102 | reg_access!(set_IY, get_IY, IY, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_iy` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:13 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `set_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_IX` should have a snake case name [INFO] [stdout] --> src/lib.rs:103:22 [INFO] [stdout] | [INFO] [stdout] 103 | reg_access!(set_IX, get_IX, IX, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case (notice the capitalization): `get_ix` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `set_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:13 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `set_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `get_SP` should have a snake case name [INFO] [stdout] --> src/lib.rs:104:22 [INFO] [stdout] | [INFO] [stdout] 104 | reg_access!(set_SP, get_SP, SP, R1, u16); [INFO] [stdout] | ^^^^^^ help: convert the identifier to snake case: `get_sp` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:174:24 [INFO] [stdout] | [INFO] [stdout] 174 | fn Z80Execute(ctx: *mut Context); [INFO] [stdout] | ^^^^^^^^^^^^ not FFI-safe [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(improper_ctypes)]` on by default [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:175:31 [INFO] [stdout] | [INFO] [stdout] 175 | fn Z80ExecuteTStates(ctx: *mut Context, tstates: c_uint) -> [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:178:22 [INFO] [stdout] | [INFO] [stdout] 178 | fn Z80RESET(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:179:20 [INFO] [stdout] | [INFO] [stdout] 179 | fn Z80INT(ctx: *mut Context, value: c_uchar); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `extern` block uses type `UserData`, which is not FFI-safe [INFO] [stdout] --> src/lib.rs:180:20 [INFO] [stdout] | [INFO] [stdout] 180 | fn Z80NMI(ctx: *mut Context); [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/lib.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | pub struct UserData; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: linking with `cc` failed: exit status: 1 [INFO] [stdout] | [INFO] [stdout] = note: "cc" "-m64" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.0.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.1.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.2.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.3.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.4.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.5.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.z80.d2f80522-cgu.6.rcgu.o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd.4pez8xyqia9foiac.rcgu.o" "-Wl,--as-needed" "-L" "/opt/rustwide/target/debug/deps" "-L" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-lz80" "-Wl,-Bstatic" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libtest-b6a068090bf40c71.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgetopts-1c1e08c768cd8903.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunicode_width-3f4474e7a3a1f53f.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_std-ec55ab174918e77a.rlib" "/opt/rustwide/target/debug/deps/liblibc-811ba465cae3c225.rlib" "-Wl,--start-group" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-8d61b92a0a02f53a.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-fc45202bb435016b.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-f2400674c7513725.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-605c3a7d1a5d300d.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-3d4fb4efa907e4e8.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-65207f030ab23308.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-76ca199cb0186109.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-1e3e01ed4f561dc1.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-dd8dddcba7c13fee.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-00b13d31c3420656.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-e4c8460b81557bd5.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-600d46e5f0005455.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-e4a08a2585b62d37.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-fbc21ec567cb9dc7.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-10b3fa8e49bd978f.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-64625b73694ffce7.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-fb6b78ac543a58ee.rlib" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-1d1f2d1bec6f51b8.rlib" "-Wl,--end-group" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-acf5ff6e9595d982.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/opt/rustwide/rustup-home/toolchains/1.60.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/opt/rustwide/target/debug/deps/z80-1eab9375e4ca78cd" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs" [INFO] [stdout] = note: /usr/bin/ld: cannot find -lz80 [INFO] [stdout] collect2: error: ld returned 1 exit status [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: aborting due to previous error; 44 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `libz80-rs` due to 2 previous errors; 44 warnings emitted [INFO] running `Command { std: "docker" "inspect" "7ffb63f129818dca4ac47498e8f5bce0aa7f141b7e4c66868fd9e8eecadcd66a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7ffb63f129818dca4ac47498e8f5bce0aa7f141b7e4c66868fd9e8eecadcd66a", kill_on_drop: false }` [INFO] [stdout] 7ffb63f129818dca4ac47498e8f5bce0aa7f141b7e4c66868fd9e8eecadcd66a