From af220cfd52d95e6b05539036ebf9319131dd469d Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 30 Aug 2009 19:12:08 +0100 Subject: [PATCH 1/1] Workaround a bug in Position::has_mate_threat() It seems that pos.has_mate_threat() changes the position ! So that calling MovePicker c'tor before or after the has_mate_threat() call changes the things ! Bug was unhidden by previous patch that makes MovePicker c'tor to generate, score and sort good captures under some circumstances. Because scoring the captures is position dependent it seems that the moves returned by MovePicker are different when c'tor is called before has_mate_threat() Of course this is only a workaround because the real bug is still hidden :-( Signed-off-by: Marco Costalba --- src/search.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 0c5ead46..12259baf 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1091,16 +1091,16 @@ namespace { // Initialize a MovePicker object for the current position, and prepare // to search all moves - MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); - Move move, movesSearched[256]; int moveCount = 0; Value value, bestValue = -VALUE_INFINITE; - Bitboard dcCandidates = mp.discovered_check_candidates(); Color us = pos.side_to_move(); bool isCheck = pos.is_check(); bool mateThreat = pos.has_mate_threat(opposite_color(us)); + MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]); + Bitboard dcCandidates = mp.discovered_check_candidates(); + // Loop through all legal moves until no moves remain or a beta cutoff // occurs. while ( alpha < beta -- 2.39.2