mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-26 12:06:22 +08:00
Fix a bug in Position::is_ok()
If we cannot castle castleRightsMask[] could be not valid, for instance when king initial file is FILE_A as queen rook. In this case castleRightsMask[] at initialQRFile is different from the expected (ALL_CASTLES ^ WHITE_OOO). No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -2039,14 +2039,19 @@ bool Position::is_ok(int* failedStep) const {
|
||||
if (can_castle_queenside(c) && piece_on(initial_qr_square(c)) != make_piece(c, ROOK))
|
||||
return false;
|
||||
}
|
||||
if (castleRightsMask[initial_kr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_qr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OOO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_kr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_qr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OOO))
|
||||
return false;
|
||||
// If we cannot castle castleRightsMask[] could be not valid, for instance when
|
||||
// king initial file is FILE_A as queen rook.
|
||||
if (can_castle(WHITE) || can_castle(BLACK))
|
||||
{
|
||||
if (castleRightsMask[initial_kr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_qr_square(WHITE)] != (ALL_CASTLES ^ WHITE_OOO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_kr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OO))
|
||||
return false;
|
||||
if (castleRightsMask[initial_qr_square(BLACK)] != (ALL_CASTLES ^ BLACK_OOO))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (failedStep) *failedStep = 0;
|
||||
|
||||
Reference in New Issue
Block a user