X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovegen.cpp;h=7558c89d63d6847261f6d3a62b3c63263d2d7ff4;hp=995f54f06c97b1f352b4cbb2ecfa8f2831070b9d;hb=8bec65029d6ac3b22b956cfd820ec754420052df;hpb=b5685fc564b81be469c14d7778f16498c5a3ad91;ds=sidebyside diff --git a/src/movegen.cpp b/src/movegen.cpp index 995f54f0..7558c89d 100644 --- a/src/movegen.cpp +++ b/src/movegen.cpp @@ -132,7 +132,7 @@ namespace { /// generate_captures generates() all pseudo-legal captures and queen -/// promotions. The return value is the number of moves generated. +/// promotions. The return value is the number of moves generated. int generate_captures(const Position& pos, MoveStack* mlist) { @@ -791,9 +791,11 @@ namespace { // Direct checks. These are possible only for pawns on neighboring files // and in the two ranks that, after the push, are in front of the enemy king. b1 = pawns & neighboring_files_bb(ksq) & ~dc; - b2 = rank_bb(ksq + 2 * TDELTA_S) | rank_bb(ksq + 3 * TDELTA_S); - b1 &= b2; - if (!b1) + + // We can get false positives if (ksq + x) is not in [0,63] range but + // is not a problem, they will be filtered out later. + b2 = b1 & (rank_bb(ksq + 2 * TDELTA_S) | rank_bb(ksq + 3 * TDELTA_S)); + if (!b2) return mlist; // Direct checks, single pawn pushes