X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmovegen.cpp;h=da619d1c605e17de1199aa99de245403d60adb79;hb=82a1e2d5fcd1c4d1c6ce3079cab24e286b2a1917;hp=4784e95d93aa25b142d9244aa419bfdb196519e3;hpb=94dcac1feeb142a56ed2ebddb96ef672460f1d49;p=stockfish diff --git a/src/movegen.cpp b/src/movegen.cpp index 4784e95d..da619d1c 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -296,12 +296,10 @@ bool move_is_legal(const Position& pos, const Move m) { /// Fast version of move_is_legal() that takes a position a move and a /// bitboard of pinned pieces as input, and tests whether the move is legal. -/// This version must only be used when the side to move is not in check. bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) { assert(pos.is_ok()); - assert(!pos.is_check()); assert(move_is_ok(m)); assert(pinned == pos.pinned_pieces(pos.side_to_move())); @@ -383,13 +381,13 @@ bool move_is_legal(const Position& pos, const Move m, Bitboard pinned) { return false; } // The move is pseudo-legal, check if it is also legal - return pos.pl_move_is_legal(m, pinned); + return pos.is_check() ? pos.pl_move_is_evasion(m, pinned) : pos.pl_move_is_legal(m, pinned); } // Luckly we can handle all the other pieces in one go - return ( bit_is_set(pos.attacks_from(pc, from), to) - && pos.pl_move_is_legal(m, pinned) - && !move_is_promotion(m)); + return bit_is_set(pos.attacks_from(pc, from), to) + && (pos.is_check() ? pos.pl_move_is_evasion(m, pinned) : pos.pl_move_is_legal(m, pinned)) + && !move_is_promotion(m); }