X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fposition.cpp;h=42fdd62da8bfc3c121c61916164449682a2ed630;hp=bb9ec00c9f66f84caf03cc89e88420028d14ad88;hb=93059830181b7167525ef4adad7d4ca3115b0701;hpb=ae2f5f25cd8a6bc2762eefc032436052c0db679e diff --git a/src/position.cpp b/src/position.cpp index bb9ec00c..42fdd62d 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -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;