[INFO] cloning repository https://github.com/ole-thoeb/rusty-solver
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ole-thoeb/rusty-solver" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fole-thoeb%2Frusty-solver", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fole-thoeb%2Frusty-solver'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 0158e1341d5c36fe71397608f7d3bc1f7409a28c
[INFO] checking ole-thoeb/rusty-solver against try#b1f2594eac607c1f051534800237eeedb5590a49 for pr-139493-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fole-thoeb%2Frusty-solver" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/ole-thoeb/rusty-solver
[INFO] finished tweaking git repo https://github.com/ole-thoeb/rusty-solver
[INFO] tweaked toml for git repo https://github.com/ole-thoeb/rusty-solver written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/ole-thoeb/rusty-solver on toolchain b1f2594eac607c1f051534800237eeedb5590a49
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b1f2594eac607c1f051534800237eeedb5590a49" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/ole-thoeb/rusty-solver 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" "+b1f2594eac607c1f051534800237eeedb5590a49" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+b1f2594eac607c1f051534800237eeedb5590a49" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] f091753415e45c65d54af0915b4850b2b5db48b25dc6b621d2be4e9375a22c03
[INFO] running `Command { std: "docker" "start" "-a" "f091753415e45c65d54af0915b4850b2b5db48b25dc6b621d2be4e9375a22c03", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f091753415e45c65d54af0915b4850b2b5db48b25dc6b621d2be4e9375a22c03", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f091753415e45c65d54af0915b4850b2b5db48b25dc6b621d2be4e9375a22c03", kill_on_drop: false }`
[INFO] [stdout] f091753415e45c65d54af0915b4850b2b5db48b25dc6b621d2be4e9375a22c03
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-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" "+b1f2594eac607c1f051534800237eeedb5590a49" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 341cff6ecb76aed4acabe2f3b36882d164204e9b134aa38b175834ad137ac26b
[INFO] running `Command { std: "docker" "start" "-a" "341cff6ecb76aed4acabe2f3b36882d164204e9b134aa38b175834ad137ac26b", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.66
[INFO] [stderr]    Compiling unicode-ident v1.0.11
[INFO] [stderr]    Compiling libc v0.2.147
[INFO] [stderr]     Checking once_cell v1.18.0
[INFO] [stderr]     Checking either v1.9.0
[INFO] [stderr]     Checking strum v0.26.1
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]    Compiling quote v1.0.32
[INFO] [stderr]     Checking getrandom v0.2.10
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking ahash v0.8.11
[INFO] [stderr]    Compiling syn v2.0.32
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]    Compiling darling_core v0.20.3
[INFO] [stderr]    Compiling strum_macros v0.26.1
[INFO] [stderr]    Compiling darling_macro v0.20.3
[INFO] [stderr]    Compiling darling v0.20.3
[INFO] [stderr]    Compiling enumset_derive v0.8.1
[INFO] [stderr]     Checking enumset v1.1.3
[INFO] [stderr]     Checking rusty-solver v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Player`
[INFO] [stdout]   --> src/main.rs:10:22
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::min_max::{Player, score_possible_moves};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]   --> src/stoplight.rs:74:59
[INFO] [stdout]    |
[INFO] [stdout] 74 |     fn possible_moves(state: &GameBoard) -> impl Iterator<Item=SymmetricMove3x3> {
[INFO] [stdout]    |                                                           ^^^^^^^^^^^^^^^^^^^^^ this bound is stronger than that defined on the trait
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/min_max/mod.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]    |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]    |
[INFO] [stdout]    = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]    = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout]    = note: `#[warn(refining_impl_trait_internal)]` (part of `#[warn(refining_impl_trait)]`) on by default
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]    |
[INFO] [stdout] 74 -     fn possible_moves(state: &GameBoard) -> impl Iterator<Item=SymmetricMove3x3> {
[INFO] [stdout] 74 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]    --> src/ultimate_ttt.rs:177:45
[INFO] [stdout]     |
[INFO] [stdout] 177 |     fn possible_moves(state: &GameBoard) -> Box<dyn Iterator<Item=Move> + '_> {
[INFO] [stdout]     |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/min_max/mod.rs:60:47
[INFO] [stdout]     |
[INFO] [stdout]  60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]     |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]     |
[INFO] [stdout]     = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]     = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]     |
[INFO] [stdout] 177 -     fn possible_moves(state: &GameBoard) -> Box<dyn Iterator<Item=Move> + '_> {
[INFO] [stdout] 177 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]   --> src/ttt.rs:96:88
[INFO] [stdout]    |
[INFO] [stdout] 96 |     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item=SymmetricMove3x3> + 'static {
[INFO] [stdout]    |                                                                                        ^^^^^^^ this bound is stronger than that defined on the trait
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/min_max/mod.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]    |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]    |
[INFO] [stdout]    = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]    = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]    |
[INFO] [stdout] 96 -     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item=SymmetricMove3x3> + 'static {
[INFO] [stdout] 96 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Player`
[INFO] [stdout]   --> src/main.rs:10:22
[INFO] [stdout]    |
[INFO] [stdout] 10 | use crate::min_max::{Player, score_possible_moves};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `expand` is never used
[INFO] [stdout]   --> src/min_max/mod.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl<I, S: Symmetry<I>> ScoredMove<SymmetricMove<I, S>> {
[INFO] [stdout]    | ------------------------------------------------------- method in this implementation
[INFO] [stdout] 35 |     pub fn expand(&self) -> Vec<ScoredMove<I>> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]   --> src/min_max/mod.rs:66:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub trait Strategy {
[INFO] [stdout]    |           -------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 66 |     fn stats(&mut self) -> &mut Self::Stats;
[INFO] [stdout]    |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `alpha_beta` is never used
[INFO] [stdout]   --> src/min_max/mod.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub fn alpha_beta<STRATEGY: Strategy>(strategy: &mut STRATEGY, state: &mut STRATEGY::State, max_level: u8) -> Vec<ScoredMove<STRATEG...
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `to_score_board` is never used
[INFO] [stdout]    --> src/min_max/mod.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn to_score_board(scored_moves: &Vec<ScoredMove<SymmetricMove3x3>>) -> [i32; 9] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_3_by_3` is never used
[INFO] [stdout]    --> src/min_max/mod.rs:144:8
[INFO] [stdout]     |
[INFO] [stdout] 144 | pub fn print_3_by_3<E: Display>(scored_board: &[E; 9]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `expand` is never used
[INFO] [stdout]   --> src/min_max/symmetry.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub trait Symmetry<T> {
[INFO] [stdout]    |           -------- method in this trait
[INFO] [stdout] 12 |     fn canonicalize(&self, target: &T) -> T;
[INFO] [stdout] 13 |     fn expand(&self, normalised: &T) -> Vec<T>;
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `expanded_indices` is never used
[INFO] [stdout]   --> src/min_max/symmetry.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl<T, S: Symmetry<T>> SymmetricMove<T, S> {
[INFO] [stdout]    | ------------------------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn expanded_indices(&self) -> Vec<T> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `none` is never used
[INFO] [stdout]    --> src/min_max/symmetry.rs:143:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl<Ctx: GridSymmetryAxisContext> GridSymmetry<Ctx> {
[INFO] [stdout]     | ---------------------------------------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HashMapCache` is never constructed
[INFO] [stdout]   --> src/min_max/cache.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct HashMapCache<S>(HashMap<S, CacheEntry>);
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/min_max/cache.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl <S> HashMapCache<S> {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 26 |     pub fn new(map: HashMap<S, CacheEntry>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_prune`, `record_cache_hit`, `record_cache_miss`, and `record_state_scored` are never used
[INFO] [stdout]  --> src/min_max/stats.rs:2:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub trait Stats {
[INFO] [stdout]   |           ----- methods in this trait
[INFO] [stdout] 2 |     fn record_prune(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout] 3 |     fn record_cache_hit(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 4 |     fn record_cache_miss(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 5 |     fn record_state_scored(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `prune_count`, `cache_hit_count`, `cache_miss_count`, and `state_scored_count` are never read
[INFO] [stdout]   --> src/min_max/stats.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct SimpleStats {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 20 |     pub prune_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 21 |     pub cache_hit_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub cache_miss_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub state_scored_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SimpleStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Cells` is never used
[INFO] [stdout]   --> src/stoplight.rs:65:10
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub type Cells = [CellState; 9];
[INFO] [stdout]    |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `choose_random_move` is never used
[INFO] [stdout]    --> src/stoplight.rs:116:8
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub fn choose_random_move(moves: Vec<ScoredMove<SymmetricMove3x3>>) -> ScoredMove<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `all_move_indices` is never used
[INFO] [stdout]    --> src/stoplight.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub fn all_move_indices(moves: Vec<ScoredMove<SymmetricMove3x3>>) -> Vec<ScoredMove<usize>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/ultimate_ttt.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl SubBoard {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] 25 |     pub fn new(cells: [CellState; 9]) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `last_player` is never used
[INFO] [stdout]   --> src/common.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub trait Board: Clone + Eq + Hash {
[INFO] [stdout]    |           ----- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 20 |     fn last_player(&self) -> Player;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `empty` is never used
[INFO] [stdout]   --> src/common.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl<C: Cell> Board3x3<C> {
[INFO] [stdout]    | ------------------------- associated function in this implementation
[INFO] [stdout] 32 |     pub fn empty() -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stats` is never read
[INFO] [stdout]   --> src/common.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct BaseStrategy<B: Board, CACHE: Cache<B>> {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 77 |     cache: CACHE,
[INFO] [stdout] 78 |     stats: NullStats,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]   --> src/common.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | impl<B: Board, CACHE: Cache<B>> BaseStrategy<B, CACHE> {
[INFO] [stdout]    | ------------------------------------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn stats(&mut self) -> &mut NullStats {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `flatten_interleaving` is never used
[INFO] [stdout]   --> src/iter_util.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn flatten_interleaving<I>(iters: Vec<I>) -> FlattenInterleaving<I> where I: Iterator {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FlattenInterleaving` is never constructed
[INFO] [stdout]   --> src/iter_util.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FlattenInterleaving<I: Iterator> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/iter_util.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl <I: Iterator> FlattenInterleaving<I> {
[INFO] [stdout]    | ----------------------------------------- associated function in this implementation
[INFO] [stdout] 22 |     fn new(iters: Vec<I>) -> FlattenInterleaving<I> {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]   --> src/stoplight.rs:74:59
[INFO] [stdout]    |
[INFO] [stdout] 74 |     fn possible_moves(state: &GameBoard) -> impl Iterator<Item=SymmetricMove3x3> {
[INFO] [stdout]    |                                                           ^^^^^^^^^^^^^^^^^^^^^ this bound is stronger than that defined on the trait
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/min_max/mod.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]    |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]    |
[INFO] [stdout]    = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]    = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout]    = note: `#[warn(refining_impl_trait_internal)]` (part of `#[warn(refining_impl_trait)]`) on by default
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]    |
[INFO] [stdout] 74 -     fn possible_moves(state: &GameBoard) -> impl Iterator<Item=SymmetricMove3x3> {
[INFO] [stdout] 74 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]    --> src/ultimate_ttt.rs:177:45
[INFO] [stdout]     |
[INFO] [stdout] 177 |     fn possible_moves(state: &GameBoard) -> Box<dyn Iterator<Item=Move> + '_> {
[INFO] [stdout]     |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/min_max/mod.rs:60:47
[INFO] [stdout]     |
[INFO] [stdout]  60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]     |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]     |
[INFO] [stdout]     = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]     = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]     |
[INFO] [stdout] 177 -     fn possible_moves(state: &GameBoard) -> Box<dyn Iterator<Item=Move> + '_> {
[INFO] [stdout] 177 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: impl trait in impl method signature does not match trait method signature
[INFO] [stdout]   --> src/ttt.rs:96:88
[INFO] [stdout]    |
[INFO] [stdout] 96 |     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item=SymmetricMove3x3> + 'static {
[INFO] [stdout]    |                                                                                        ^^^^^^^ this bound is stronger than that defined on the trait
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/min_max/mod.rs:60:47
[INFO] [stdout]    |
[INFO] [stdout] 60 |     fn possible_moves(state: &Self::State) -> impl IntoIterator<Item=Self::Move>;
[INFO] [stdout]    |                                               ---------------------------------- return type from trait method defined here
[INFO] [stdout]    |
[INFO] [stdout]    = note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate
[INFO] [stdout]    = note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information
[INFO] [stdout] help: replace the return type so that it matches the trait
[INFO] [stdout]    |
[INFO] [stdout] 96 -     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item=SymmetricMove3x3> + 'static {
[INFO] [stdout] 96 +     fn possible_moves(state: &GameBoard) -> impl IntoIterator<Item = <Self as min_max::Strategy>::Move> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]   --> src/min_max/mod.rs:66:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub trait Strategy {
[INFO] [stdout]    |           -------- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 66 |     fn stats(&mut self) -> &mut Self::Stats;
[INFO] [stdout]    |        ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `alpha_beta` is never used
[INFO] [stdout]   --> src/min_max/mod.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub fn alpha_beta<STRATEGY: Strategy>(strategy: &mut STRATEGY, state: &mut STRATEGY::State, max_level: u8) -> Vec<ScoredMove<STRATEG...
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `none` is never used
[INFO] [stdout]    --> src/min_max/symmetry.rs:143:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl<Ctx: GridSymmetryAxisContext> GridSymmetry<Ctx> {
[INFO] [stdout]     | ---------------------------------------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 143 |     pub fn none() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/min_max/cache.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl <S> HashMapCache<S> {
[INFO] [stdout]    | ------------------------ associated function in this implementation
[INFO] [stdout] 26 |     pub fn new(map: HashMap<S, CacheEntry>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_prune`, `record_cache_hit`, `record_cache_miss`, and `record_state_scored` are never used
[INFO] [stdout]  --> src/min_max/stats.rs:2:8
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub trait Stats {
[INFO] [stdout]   |           ----- methods in this trait
[INFO] [stdout] 2 |     fn record_prune(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^
[INFO] [stdout] 3 |     fn record_cache_hit(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 4 |     fn record_cache_miss(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 5 |     fn record_state_scored(&mut self);
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `prune_count`, `cache_hit_count`, `cache_miss_count`, and `state_scored_count` are never read
[INFO] [stdout]   --> src/min_max/stats.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct SimpleStats {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 20 |     pub prune_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 21 |     pub cache_hit_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub cache_miss_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub state_scored_count: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SimpleStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `choose_random_move` is never used
[INFO] [stdout]    --> src/stoplight.rs:116:8
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub fn choose_random_move(moves: Vec<ScoredMove<SymmetricMove3x3>>) -> ScoredMove<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `all_move_indices` is never used
[INFO] [stdout]    --> src/stoplight.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub fn all_move_indices(moves: Vec<ScoredMove<SymmetricMove3x3>>) -> Vec<ScoredMove<usize>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `best_move_index_of` is never used
[INFO] [stdout]    --> src/stoplight.rs:139:8
[INFO] [stdout]     |
[INFO] [stdout] 139 |     fn best_move_index_of(cells: Cells) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `last_player` is never used
[INFO] [stdout]   --> src/common.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub trait Board: Clone + Eq + Hash {
[INFO] [stdout]    |           ----- method in this trait
[INFO] [stdout] ...
[INFO] [stdout] 20 |     fn last_player(&self) -> Player;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `stats` is never read
[INFO] [stdout]   --> src/common.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub struct BaseStrategy<B: Board, CACHE: Cache<B>> {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 77 |     cache: CACHE,
[INFO] [stdout] 78 |     stats: NullStats,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stats` is never used
[INFO] [stdout]   --> src/common.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | impl<B: Board, CACHE: Cache<B>> BaseStrategy<B, CACHE> {
[INFO] [stdout]    | ------------------------------------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn stats(&mut self) -> &mut NullStats {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.40s
[INFO] running `Command { std: "docker" "inspect" "341cff6ecb76aed4acabe2f3b36882d164204e9b134aa38b175834ad137ac26b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "341cff6ecb76aed4acabe2f3b36882d164204e9b134aa38b175834ad137ac26b", kill_on_drop: false }`
[INFO] [stdout] 341cff6ecb76aed4acabe2f3b36882d164204e9b134aa38b175834ad137ac26b
