[INFO] crate td_revent 0.2.2 is already in cache [INFO] extracting crate td_revent 0.2.2 into work/ex/clippy-test-run/sources/stable/reg/td_revent/0.2.2 [INFO] extracting crate td_revent 0.2.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/td_revent/0.2.2 [INFO] validating manifest of td_revent-0.2.2 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of td_revent-0.2.2 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing td_revent-0.2.2 [INFO] removed 0 missing tests [INFO] finished frobbing td_revent-0.2.2 [INFO] frobbed toml for td_revent-0.2.2 written to work/ex/clippy-test-run/sources/stable/reg/td_revent/0.2.2/Cargo.toml [INFO] started frobbing td_revent-0.2.2 [INFO] removed 0 missing tests [INFO] finished frobbing td_revent-0.2.2 [INFO] frobbed toml for td_revent-0.2.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/td_revent/0.2.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting td_revent-0.2.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/td_revent/0.2.2:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] fb8cda0cbda6382bc6e247c87c11d633dc9d61ead37707a9d86f1002adf0a8b7 [INFO] running `"docker" "start" "-a" "fb8cda0cbda6382bc6e247c87c11d633dc9d61ead37707a9d86f1002adf0a8b7"` [INFO] [stderr] Checking rbtree v0.1.5 [INFO] [stderr] Checking psocket v0.1.5 [INFO] [stderr] Checking td_revent v0.2.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | selector: selector, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `selector` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:63:13 [INFO] [stderr] | [INFO] [stderr] 63 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/timer.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | time_max_id: time_max_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `time_max_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | tick_step: tick_step, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tick_step` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | read: read, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `read` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | write: write, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `write` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:119:13 [INFO] [stderr] | [INFO] [stderr] 119 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:132:13 [INFO] [stderr] | [INFO] [stderr] 132 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | accept: accept, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `accept` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:144:13 [INFO] [stderr] | [INFO] [stderr] 144 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_buffer.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | socket: socket, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `socket` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | entry: entry, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `entry` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | epfd: epfd, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `epfd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/from_raw_arc.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:61:13 [INFO] [stderr] | [INFO] [stderr] 61 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:62:13 [INFO] [stderr] | [INFO] [stderr] 62 | selector: selector, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `selector` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_loop.rs:63:13 [INFO] [stderr] | [INFO] [stderr] 63 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/timer.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | time_max_id: time_max_id, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `time_max_id` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:78:13 [INFO] [stderr] | [INFO] [stderr] 78 | tick_step: tick_step, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `tick_step` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:84:13 [INFO] [stderr] | [INFO] [stderr] 84 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:99:13 [INFO] [stderr] | [INFO] [stderr] 99 | timer: timer, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `timer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | read: read, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `read` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:116:13 [INFO] [stderr] | [INFO] [stderr] 116 | write: write, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `write` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:117:13 [INFO] [stderr] | [INFO] [stderr] 117 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:119:13 [INFO] [stderr] | [INFO] [stderr] 119 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:132:13 [INFO] [stderr] | [INFO] [stderr] 132 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:133:13 [INFO] [stderr] | [INFO] [stderr] 133 | accept: accept, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `accept` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:134:13 [INFO] [stderr] | [INFO] [stderr] 134 | end: end, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `end` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:136:13 [INFO] [stderr] | [INFO] [stderr] 136 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | ev_events: ev_events, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: replace it with: `ev_events` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_entry.rs:144:13 [INFO] [stderr] | [INFO] [stderr] 144 | ev_fd: ev_fd, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `ev_fd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/event_buffer.rs:143:13 [INFO] [stderr] | [INFO] [stderr] 143 | socket: socket, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `socket` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:41:13 [INFO] [stderr] | [INFO] [stderr] 41 | buffer: buffer, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `buffer` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | entry: entry, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `entry` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/unix/epoll.rs:164:13 [INFO] [stderr] | [INFO] [stderr] 164 | epfd: epfd, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `epfd` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/sys/from_raw_arc.rs:42:13 [INFO] [stderr] | [INFO] [stderr] 42 | data: data, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `data` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:3:43 [INFO] [stderr] | [INFO] [stderr] 3 | const FLAG_TIMEOUT = 0b000000000001, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:4:43 [INFO] [stderr] | [INFO] [stderr] 4 | const FLAG_READ = 0b000000000010, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:5:43 [INFO] [stderr] | [INFO] [stderr] 5 | const FLAG_WRITE = 0b000000000100, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:6:43 [INFO] [stderr] | [INFO] [stderr] 6 | const FLAG_PERSIST = 0b000000001000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:7:43 [INFO] [stderr] | [INFO] [stderr] 7 | const FLAG_ERROR = 0b000000010000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:8:43 [INFO] [stderr] | [INFO] [stderr] 8 | const FLAG_ACCEPT = 0b000000100000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:9:43 [INFO] [stderr] | [INFO] [stderr] 9 | const FLAG_ENDED = 0b000001000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:10:43 [INFO] [stderr] | [INFO] [stderr] 10 | const FLAG_READ_PERSIST = 0b000010000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:11:43 [INFO] [stderr] | [INFO] [stderr] 11 | const FLAG_WRITE_PERSIST = 0b000100000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0001_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/event_entry.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | ret [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/event_entry.rs:178:19 [INFO] [stderr] | [INFO] [stderr] 178 | let ret = self.timer.unwrap()(ev, timer, self.data.as_mut()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sys/unix/epoll.rs:336:9 [INFO] [stderr] | [INFO] [stderr] 336 | return err; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `err` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:3:43 [INFO] [stderr] | [INFO] [stderr] 3 | const FLAG_TIMEOUT = 0b000000000001, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0001` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:4:43 [INFO] [stderr] | [INFO] [stderr] 4 | const FLAG_READ = 0b000000000010, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0010` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:5:43 [INFO] [stderr] | [INFO] [stderr] 5 | const FLAG_WRITE = 0b000000000100, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_0100` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:6:43 [INFO] [stderr] | [INFO] [stderr] 6 | const FLAG_PERSIST = 0b000000001000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0000_1000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:7:43 [INFO] [stderr] | [INFO] [stderr] 7 | const FLAG_ERROR = 0b000000010000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:8:43 [INFO] [stderr] | [INFO] [stderr] 8 | const FLAG_ACCEPT = 0b000000100000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:9:43 [INFO] [stderr] | [INFO] [stderr] 9 | const FLAG_ENDED = 0b000001000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_0100_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:10:43 [INFO] [stderr] | [INFO] [stderr] 10 | const FLAG_READ_PERSIST = 0b000010000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0000_1000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/event_flags.rs:11:43 [INFO] [stderr] | [INFO] [stderr] 11 | const FLAG_WRITE_PERSIST = 0b000100000000, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider: `0b0001_0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/event_entry.rs:182:9 [INFO] [stderr] | [INFO] [stderr] 182 | ret [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/event_entry.rs:178:19 [INFO] [stderr] | [INFO] [stderr] 178 | let ret = self.timer.unwrap()(ev, timer, self.data.as_mut()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/sys/unix/epoll.rs:336:9 [INFO] [stderr] | [INFO] [stderr] 336 | return err; [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `err` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:194:16 [INFO] [stderr] | [INFO] [stderr] 194 | if value.events.contains(EPOLLIN) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(safe_packed_borrows)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:197:16 [INFO] [stderr] | [INFO] [stderr] 197 | if value.events.contains(EPOLLOUT) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:231:16 [INFO] [stderr] | [INFO] [stderr] 231 | if value.events.contains(EPOLLIN) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:234:16 [INFO] [stderr] | [INFO] [stderr] 234 | if value.events.contains(EPOLLOUT) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | let _ = Selector::register_socket(self, buffer, entry)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | let _ = Selector::modify_socket(self, is_del, socket, entry)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | let _ = Selector::unregister_socket(self, ev_fd)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/event_loop.rs:167:42 [INFO] [stderr] | [INFO] [stderr] 167 | pub fn send_socket(&mut self, ev_fd: &SOCKET, data: &[u8]) -> io::Result { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `SOCKET` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: item `event_buffer::Buffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/event_buffer.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | / impl Buffer { [INFO] [stderr] 14 | | pub fn new() -> Buffer { [INFO] [stderr] 15 | | Buffer { [INFO] [stderr] 16 | | val: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 80 | | } [INFO] [stderr] 81 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `event_buffer::Buffer` [INFO] [stderr] --> src/event_buffer.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | / pub fn new() -> Buffer { [INFO] [stderr] 15 | | Buffer { [INFO] [stderr] 16 | | val: Vec::new(), [INFO] [stderr] 17 | | rpos: 0, [INFO] [stderr] 18 | | wpos: 0, [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 7 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | self.val.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.val.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:92:25 [INFO] [stderr] | [INFO] [stderr] 92 | if left == 0 || buf.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buf.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:109:12 [INFO] [stderr] | [INFO] [stderr] 109 | if buf.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buf.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sys/unix/epoll.rs:74:9 [INFO] [stderr] | [INFO] [stderr] 74 | / match ret { [INFO] [stderr] 75 | | RetValue::OVER => { [INFO] [stderr] 76 | | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 77 | | } [INFO] [stderr] ... | [INFO] [stderr] 80 | | } [INFO] [stderr] 81 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 74 | if let RetValue::OVER = ret { [INFO] [stderr] 75 | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 76 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:85:20 [INFO] [stderr] | [INFO] [stderr] 85 | if len <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sys/unix/epoll.rs:99:21 [INFO] [stderr] | [INFO] [stderr] 99 | / match event.entry.read_cb(event_loop, &mut event_clone.buffer) { [INFO] [stderr] 100 | | RetValue::OVER => { [INFO] [stderr] 101 | | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 102 | | return; [INFO] [stderr] 103 | | } [INFO] [stderr] 104 | | _ => (), [INFO] [stderr] 105 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 99 | if let RetValue::OVER = event.entry.read_cb(event_loop, &mut event_clone.buffer) { [INFO] [stderr] 100 | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 101 | return; [INFO] [stderr] 102 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:123:21 [INFO] [stderr] | [INFO] [stderr] 123 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:134:16 [INFO] [stderr] | [INFO] [stderr] 134 | if len <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:173:29 [INFO] [stderr] | [INFO] [stderr] 173 | let timeout_ms = if timeout as isize >= isize::MAX { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because isize::MAX is the maximum value for this type, the case where the two sides are not equal never occurs, consider using timeout as isize == isize::MAX instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/sys/unix/epoll.rs:351:9 [INFO] [stderr] | [INFO] [stderr] 351 | let _ = event_loop.selector.deregister(socket, EventFlags::all())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sys/unix/epoll.rs:357:60 [INFO] [stderr] | [INFO] [stderr] 357 | pub fn send_socket(event_loop: &mut EventLoop, socket: &SOCKET, data: &[u8]) -> io::Result { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `SOCKET` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:364:25 [INFO] [stderr] | [INFO] [stderr] 364 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/sys/unix/epoll.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | event.buffer.write.write(data)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `td_revent`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:194:16 [INFO] [stderr] | [INFO] [stderr] 194 | if value.events.contains(EPOLLIN) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(safe_packed_borrows)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:197:16 [INFO] [stderr] | [INFO] [stderr] 197 | if value.events.contains(EPOLLOUT) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:231:16 [INFO] [stderr] | [INFO] [stderr] 231 | if value.events.contains(EPOLLIN) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133) [INFO] [stderr] --> src/sys/unix/epoll.rs:234:16 [INFO] [stderr] | [INFO] [stderr] 234 | if value.events.contains(EPOLLOUT) { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #46043 [INFO] [stderr] = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:149:9 [INFO] [stderr] | [INFO] [stderr] 149 | let _ = Selector::register_socket(self, buffer, entry)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:155:9 [INFO] [stderr] | [INFO] [stderr] 155 | let _ = Selector::modify_socket(self, is_del, socket, entry)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/event_loop.rs:162:9 [INFO] [stderr] | [INFO] [stderr] 162 | let _ = Selector::unregister_socket(self, ev_fd)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/event_loop.rs:167:42 [INFO] [stderr] | [INFO] [stderr] 167 | pub fn send_socket(&mut self, ev_fd: &SOCKET, data: &[u8]) -> io::Result { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `SOCKET` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: item `event_buffer::Buffer` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/event_buffer.rs:13:1 [INFO] [stderr] | [INFO] [stderr] 13 | / impl Buffer { [INFO] [stderr] 14 | | pub fn new() -> Buffer { [INFO] [stderr] 15 | | Buffer { [INFO] [stderr] 16 | | val: Vec::new(), [INFO] [stderr] ... | [INFO] [stderr] 80 | | } [INFO] [stderr] 81 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `event_buffer::Buffer` [INFO] [stderr] --> src/event_buffer.rs:14:5 [INFO] [stderr] | [INFO] [stderr] 14 | / pub fn new() -> Buffer { [INFO] [stderr] 15 | | Buffer { [INFO] [stderr] 16 | | val: Vec::new(), [INFO] [stderr] 17 | | rpos: 0, [INFO] [stderr] 18 | | wpos: 0, [INFO] [stderr] 19 | | } [INFO] [stderr] 20 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 7 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | self.val.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.val.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:92:25 [INFO] [stderr] | [INFO] [stderr] 92 | if left == 0 || buf.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buf.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/event_buffer.rs:109:12 [INFO] [stderr] | [INFO] [stderr] 109 | if buf.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buf.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sys/unix/epoll.rs:74:9 [INFO] [stderr] | [INFO] [stderr] 74 | / match ret { [INFO] [stderr] 75 | | RetValue::OVER => { [INFO] [stderr] 76 | | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 77 | | } [INFO] [stderr] ... | [INFO] [stderr] 80 | | } [INFO] [stderr] 81 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 74 | if let RetValue::OVER = ret { [INFO] [stderr] 75 | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 76 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:85:20 [INFO] [stderr] | [INFO] [stderr] 85 | if len <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::absurd_extreme_comparisons)] on by default [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/sys/unix/epoll.rs:99:21 [INFO] [stderr] | [INFO] [stderr] 99 | / match event.entry.read_cb(event_loop, &mut event_clone.buffer) { [INFO] [stderr] 100 | | RetValue::OVER => { [INFO] [stderr] 101 | | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 102 | | return; [INFO] [stderr] 103 | | } [INFO] [stderr] 104 | | _ => (), [INFO] [stderr] 105 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 99 | if let RetValue::OVER = event.entry.read_cb(event_loop, &mut event_clone.buffer) { [INFO] [stderr] 100 | let _ = event_loop.unregister_socket(event.as_raw_socket()); [INFO] [stderr] 101 | return; [INFO] [stderr] 102 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:123:21 [INFO] [stderr] | [INFO] [stderr] 123 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:134:16 [INFO] [stderr] | [INFO] [stderr] 134 | if len <= 0 { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because 0 is the minimum value for this type, the case where the two sides are not equal never occurs, consider using len == 0 instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] error: this comparison involving the minimum or maximum element for this type contains a case that is always true or always false [INFO] [stderr] --> src/sys/unix/epoll.rs:173:29 [INFO] [stderr] | [INFO] [stderr] 173 | let timeout_ms = if timeout as isize >= isize::MAX { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: because isize::MAX is the maximum value for this type, the case where the two sides are not equal never occurs, consider using timeout as isize == isize::MAX instead [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/sys/unix/epoll.rs:351:9 [INFO] [stderr] | [INFO] [stderr] 351 | let _ = event_loop.selector.deregister(socket, EventFlags::all())?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/sys/unix/epoll.rs:357:60 [INFO] [stderr] | [INFO] [stderr] 357 | pub fn send_socket(event_loop: &mut EventLoop, socket: &SOCKET, data: &[u8]) -> io::Result { [INFO] [stderr] | ^^^^^^^ help: consider passing by value instead: `SOCKET` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/sys/unix/epoll.rs:364:25 [INFO] [stderr] | [INFO] [stderr] 364 | let mut event = event_loop.selector.event_maps.get_mut(&socket).map(|e| e.clone()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `event_loop.selector.event_maps.get_mut(&socket).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/sys/unix/epoll.rs:366:9 [INFO] [stderr] | [INFO] [stderr] 366 | event.buffer.write.write(data)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: unused return value of `std::clone::Clone::clone` that must be used [INFO] [stderr] --> src/sys/from_raw_arc.rs:137:13 [INFO] [stderr] | [INFO] [stderr] 137 | a.clone(); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: cloning is often expensive and is not expected to have side effects [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `td_revent`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "fb8cda0cbda6382bc6e247c87c11d633dc9d61ead37707a9d86f1002adf0a8b7"` [INFO] running `"docker" "rm" "-f" "fb8cda0cbda6382bc6e247c87c11d633dc9d61ead37707a9d86f1002adf0a8b7"` [INFO] [stdout] fb8cda0cbda6382bc6e247c87c11d633dc9d61ead37707a9d86f1002adf0a8b7