[INFO] cloning repository https://github.com/gen0x39/gba-engine
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gen0x39/gba-engine" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgen0x39%2Fgba-engine", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgen0x39%2Fgba-engine'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b77472582ce8f1100f224a03e3801d2014dd170c
[INFO] checking gen0x39/gba-engine against try#66388cc165a6c4ac98c074dc9f0281ff23528c55 for pr-150727
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgen0x39%2Fgba-engine" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gen0x39/gba-engine
[INFO] finished tweaking git repo https://github.com/gen0x39/gba-engine
[INFO] tweaked toml for git repo https://github.com/gen0x39/gba-engine written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gen0x39/gba-engine on toolchain 66388cc165a6c4ac98c074dc9f0281ff23528c55
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+66388cc165a6c4ac98c074dc9f0281ff23528c55" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/gen0x39/gba-engine 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" "+66388cc165a6c4ac98c074dc9f0281ff23528c55" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: `default_features` is deprecated in favor of `default-features` and will not work in the 2024 edition
[INFO] [stderr] (in the `linked_list_allocator` dependency)
[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 linked_list_allocator v0.8.6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+66388cc165a6c4ac98c074dc9f0281ff23528c55" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7b33448832a5ba17455f9b164b3b146481ad64fc7f54c7b72bf733684917ea74
[INFO] running `Command { std: "docker" "start" "-a" "7b33448832a5ba17455f9b164b3b146481ad64fc7f54c7b72bf733684917ea74", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7b33448832a5ba17455f9b164b3b146481ad64fc7f54c7b72bf733684917ea74", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7b33448832a5ba17455f9b164b3b146481ad64fc7f54c7b72bf733684917ea74", kill_on_drop: false }`
[INFO] [stdout] 7b33448832a5ba17455f9b164b3b146481ad64fc7f54c7b72bf733684917ea74
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-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:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+66388cc165a6c4ac98c074dc9f0281ff23528c55" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d37cdf0207d7bd5ea7cf3ab0af5ecd12e9b4e90c21778d4b4dbd580a4e82d199
[INFO] running `Command { std: "docker" "start" "-a" "d37cdf0207d7bd5ea7cf3ab0af5ecd12e9b4e90c21778d4b4dbd580a4e82d199", kill_on_drop: false }`
[INFO] [stderr] warning: `default_features` is deprecated in favor of `default-features` and will not work in the 2024 edition
[INFO] [stderr] (in the `linked_list_allocator` dependency)
[INFO] [stderr]     Checking linked_list_allocator v0.8.6
[INFO] [stderr]     Checking lifegameboy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | #![feature(start)]
[INFO] [stdout]   |            ^^^^^ feature has been removed
[INFO] [stdout]   |
[INFO] [stdout]   = note: removed in 1.86.0; see <https://github.com/rust-lang/rust/pull/134299> for more information
[INFO] [stdout]   = note: not portable enough and never RFC'd
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `start` in this scope
[INFO] [stdout]   --> src/main.rs:46:3
[INFO] [stdout]    |
[INFO] [stdout] 46 | #[start]
[INFO] [stdout]    |   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: no global memory allocator found but one is required; link to std or add `#[global_allocator]` to a static item that implements the GlobalAlloc trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]   --> src/graphics.rs:87:39
[INFO] [stdout]    |
[INFO] [stdout] 87 |             self.draw_char(character, (x + offset_x), y, color);
[INFO] [stdout]    |                                       ^            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 87 -             self.draw_char(character, (x + offset_x), y, color);
[INFO] [stdout] 87 +             self.draw_char(character, x + offset_x, y, color);
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 |     if ((key_state & KEY_A) > 0) {
[INFO] [stdout]    |        ^                       ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 25 -     if ((key_state & KEY_A) > 0) {
[INFO] [stdout] 25 +     if (key_state & KEY_A) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 |     if ((key_state & KEY_RIGHT) > 0) {
[INFO] [stdout]    |        ^                           ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 35 -     if ((key_state & KEY_RIGHT) > 0) {
[INFO] [stdout] 35 +     if (key_state & KEY_RIGHT) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 |     if ((key_state & KEY_LEFT) > 0) {
[INFO] [stdout]    |        ^                          ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 46 -     if ((key_state & KEY_LEFT) > 0) {
[INFO] [stdout] 46 +     if (key_state & KEY_LEFT) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:57:8
[INFO] [stdout]    |
[INFO] [stdout] 57 |     if ((key_state & KEY_UP) > 0) {
[INFO] [stdout]    |        ^                        ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 57 -     if ((key_state & KEY_UP) > 0) {
[INFO] [stdout] 57 +     if (key_state & KEY_UP) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 |     if ((key_state & KEY_DOWN) > 0) {
[INFO] [stdout]    |        ^                          ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 68 -     if ((key_state & KEY_DOWN) > 0) {
[INFO] [stdout] 68 +     if (key_state & KEY_DOWN) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::io::key_up_is_pressed`
[INFO] [stdout]   --> src/main.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::io::key_up_is_pressed;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `object_attributes` should have an upper camel case name
[INFO] [stdout]   --> src/main.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct object_attributes {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ObjectAttributes`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/main.rs:115:16
[INFO] [stdout]     |
[INFO] [stdout] 115 |             if (key_a_is_pressed()) {
[INFO] [stdout]     |                ^                  ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 115 -             if (key_a_is_pressed()) {
[INFO] [stdout] 115 +             if key_a_is_pressed() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `while` condition
[INFO] [stdout]    --> src/main.rs:137:15
[INFO] [stdout]     |
[INFO] [stdout] 137 |         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout]     |               ^                          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 137 -         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout] 137 +         while *REG_DISPLAY_VCOUNT >= 160 {;}
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/main.rs:137:44
[INFO] [stdout]     |
[INFO] [stdout] 137 |         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout]     |                                            ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `while` condition
[INFO] [stdout]    --> src/main.rs:138:15
[INFO] [stdout]     |
[INFO] [stdout] 138 |         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout]     |               ^                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 138 -         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout] 138 +         while *REG_DISPLAY_VCOUNT < 160 {;}
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/main.rs:138:44
[INFO] [stdout]     |
[INFO] [stdout] 138 |         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout]     |                                            ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0580]: `main` function has wrong type
[INFO] [stdout]   --> src/main.rs:47:1
[INFO] [stdout]    |
[INFO] [stdout] 47 | fn main(_argc: isize, _argv: *const *const u8) -> isize {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ incorrect number of function parameters
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected signature `fn() -> ()`
[INFO] [stdout]               found signature `fn(isize, *const *const u8) -> isize`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0557]: feature has been removed
[INFO] [stdout]  --> src/main.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | #![feature(start)]
[INFO] [stdout]   |            ^^^^^ feature has been removed
[INFO] [stdout]   |
[INFO] [stdout]   = note: removed in 1.86.0; see <https://github.com/rust-lang/rust/pull/134299> for more information
[INFO] [stdout]   = note: not portable enough and never RFC'd
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/main.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | /     loop {
[INFO] [stdout] 111 | |         unsafe {
[INFO] [stdout] 112 | |             wait_for_vsync();
[INFO] [stdout] ...   |
[INFO] [stdout] 122 | |     }
[INFO] [stdout]     | |_____- any code following this expression is unreachable
[INFO] [stdout] 123 |       0
[INFO] [stdout]     |       ^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `key_state` is never read
[INFO] [stdout]   --> src/io.rs:21:30
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let mut key_state: u32 = 0;
[INFO] [stdout]    |                              ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `key_state` is never read
[INFO] [stdout]   --> src/io.rs:31:30
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let mut key_state: u32 = 0;
[INFO] [stdout]    |                              ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `key_state` is never read
[INFO] [stdout]   --> src/io.rs:42:30
[INFO] [stdout]    |
[INFO] [stdout] 42 |     let mut key_state: u32 = 0;
[INFO] [stdout]    |                              ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `key_state` is never read
[INFO] [stdout]   --> src/io.rs:53:30
[INFO] [stdout]    |
[INFO] [stdout] 53 |     let mut key_state: u32 = 0;
[INFO] [stdout]    |                              ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `key_state` is never read
[INFO] [stdout]   --> src/io.rs:64:30
[INFO] [stdout]    |
[INFO] [stdout] 64 |     let mut key_state: u32 = 0;
[INFO] [stdout]    |                              ^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/main.rs:111:9
[INFO] [stdout]     |
[INFO] [stdout] 111 |         unsafe {
[INFO] [stdout]     |         ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let mut x: u16 = 100;
[INFO] [stdout]    |         ----^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 69 |     let mut y: u16 = 100;
[INFO] [stdout]    |         ----^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:109:9
[INFO] [stdout]     |
[INFO] [stdout] 109 |     let mut key_state: u32 = 0;
[INFO] [stdout]     |         ----^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `red`
[INFO] [stdout]   --> src/main.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |     let red: RGB = RGB::red();
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_red`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `vram` is assigned to, but never used
[INFO] [stdout]   --> src/main.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 |     let mut vram: *mut u16 = (MEM_VRAM + (offset * 2)) as *mut u16;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: consider using `_vram` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `green`
[INFO] [stdout]   --> src/main.rs:65:9
[INFO] [stdout]    |
[INFO] [stdout] 65 |     let green: RGB = RGB::green();
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_green`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `blue`
[INFO] [stdout]   --> src/main.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let blue: RGB = RGB::blue();
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_blue`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `white`
[INFO] [stdout]   --> src/main.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let white: RGB = RGB::white();
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_white`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `paddle_attributes`
[INFO] [stdout]   --> src/main.rs:87:9
[INFO] [stdout]    |
[INFO] [stdout] 87 |     let paddle_attributes = object_attributes {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_paddle_attributes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ball_attributes`
[INFO] [stdout]   --> src/main.rs:94:9
[INFO] [stdout]    |
[INFO] [stdout] 94 |     let ball_attributes = object_attributes {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ball_attributes`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key_state`
[INFO] [stdout]    --> src/main.rs:109:9
[INFO] [stdout]     |
[INFO] [stdout] 109 |     let mut key_state: u32 = 0;
[INFO] [stdout]     |         ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_key_state`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `vram` is never read
[INFO] [stdout]   --> src/main.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     vram = (MEM_VRAM + (offset * 2)) as *mut u16;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0557, E0580.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0557`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `lifegameboy` (bin "lifegameboy") due to 4 previous errors; 32 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error: cannot find attribute `start` in this scope
[INFO] [stdout]   --> src/main.rs:46:3
[INFO] [stdout]    |
[INFO] [stdout] 46 | #[start]
[INFO] [stdout]    |   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]   --> src/graphics.rs:87:39
[INFO] [stdout]    |
[INFO] [stdout] 87 |             self.draw_char(character, (x + offset_x), y, color);
[INFO] [stdout]    |                                       ^            ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 87 -             self.draw_char(character, (x + offset_x), y, color);
[INFO] [stdout] 87 +             self.draw_char(character, x + offset_x, y, color);
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 |     if ((key_state & KEY_A) > 0) {
[INFO] [stdout]    |        ^                       ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 25 -     if ((key_state & KEY_A) > 0) {
[INFO] [stdout] 25 +     if (key_state & KEY_A) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 |     if ((key_state & KEY_RIGHT) > 0) {
[INFO] [stdout]    |        ^                           ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 35 -     if ((key_state & KEY_RIGHT) > 0) {
[INFO] [stdout] 35 +     if (key_state & KEY_RIGHT) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:46:8
[INFO] [stdout]    |
[INFO] [stdout] 46 |     if ((key_state & KEY_LEFT) > 0) {
[INFO] [stdout]    |        ^                          ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 46 -     if ((key_state & KEY_LEFT) > 0) {
[INFO] [stdout] 46 +     if (key_state & KEY_LEFT) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:57:8
[INFO] [stdout]    |
[INFO] [stdout] 57 |     if ((key_state & KEY_UP) > 0) {
[INFO] [stdout]    |        ^                        ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 57 -     if ((key_state & KEY_UP) > 0) {
[INFO] [stdout] 57 +     if (key_state & KEY_UP) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]   --> src/io.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 |     if ((key_state & KEY_DOWN) > 0) {
[INFO] [stdout]    |        ^                          ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 68 -     if ((key_state & KEY_DOWN) > 0) {
[INFO] [stdout] 68 +     if (key_state & KEY_DOWN) > 0  {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::io::key_up_is_pressed`
[INFO] [stdout]   --> src/main.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::io::key_up_is_pressed;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `object_attributes` should have an upper camel case name
[INFO] [stdout]   --> src/main.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct object_attributes {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^ help: convert the identifier to upper camel case: `ObjectAttributes`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/main.rs:115:16
[INFO] [stdout]     |
[INFO] [stdout] 115 |             if (key_a_is_pressed()) {
[INFO] [stdout]     |                ^                  ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 115 -             if (key_a_is_pressed()) {
[INFO] [stdout] 115 +             if key_a_is_pressed() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `while` condition
[INFO] [stdout]    --> src/main.rs:137:15
[INFO] [stdout]     |
[INFO] [stdout] 137 |         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout]     |               ^                          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 137 -         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout] 137 +         while *REG_DISPLAY_VCOUNT >= 160 {;}
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/main.rs:137:44
[INFO] [stdout]     |
[INFO] [stdout] 137 |         while (*REG_DISPLAY_VCOUNT >= 160){;}
[INFO] [stdout]     |                                            ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `while` condition
[INFO] [stdout]    --> src/main.rs:138:15
[INFO] [stdout]     |
[INFO] [stdout] 138 |         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout]     |               ^                         ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 138 -         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout] 138 +         while *REG_DISPLAY_VCOUNT < 160 {;}
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/main.rs:138:44
[INFO] [stdout]     |
[INFO] [stdout] 138 |         while (*REG_DISPLAY_VCOUNT < 160) {;}
[INFO] [stdout]     |                                            ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0152]: found duplicate lang item `panic_impl`
[INFO] [stdout]  --> src/main.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | / fn panic(_info: &core::panic::PanicInfo) -> ! {
[INFO] [stdout] 7 | |     loop {}
[INFO] [stdout] 8 | | }
[INFO] [stdout]   | |_^
[INFO] [stdout]   |
[INFO] [stdout]   = note: the lang item is first defined in crate `std` (which `test` depends on)
[INFO] [stdout]   = note: first definition in `std` loaded from /opt/rustwide/rustup-home/toolchains/66388cc165a6c4ac98c074dc9f0281ff23528c55/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-ad248a6e6fe48fd9.rlib
[INFO] [stdout]   = note: second definition in the local crate (`lifegameboy`)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0152, E0557.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0152`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `lifegameboy` (bin "lifegameboy" test) due to 3 previous errors; 13 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "d37cdf0207d7bd5ea7cf3ab0af5ecd12e9b4e90c21778d4b4dbd580a4e82d199", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d37cdf0207d7bd5ea7cf3ab0af5ecd12e9b4e90c21778d4b4dbd580a4e82d199", kill_on_drop: false }`
[INFO] [stdout] d37cdf0207d7bd5ea7cf3ab0af5ecd12e9b4e90c21778d4b4dbd580a4e82d199
