From d8e7ce1863d234f585193125b328e18668bd1e71 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 12 Oct 2009 15:19:29 +0100 Subject: [PATCH] Fix a crash when reaching PLY_MAX in a check position In this case we call evaluate() being in check and this is not allowed. Bug found testing with reduced PLY_MAX value as suggested by Miguel A. Ballicora on talkchess. Signed-off-by: Marco Costalba --- src/evaluate.cpp | 1 + src/search.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/evaluate.cpp b/src/evaluate.cpp index ba3ea9fb..a03f7ddb 100644 --- a/src/evaluate.cpp +++ b/src/evaluate.cpp @@ -309,6 +309,7 @@ Value do_evaluate(const Position& pos, EvalInfo& ei, int threadID) { assert(pos.is_ok()); assert(threadID >= 0 && threadID < THREAD_MAX); + assert(!pos.is_check()); memset(&ei, 0, sizeof(EvalInfo)); diff --git a/src/search.cpp b/src/search.cpp index 719fc0ea..c0b6507c 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1048,7 +1048,7 @@ namespace { EvalInfo ei; if (ply >= PLY_MAX - 1) - return evaluate(pos, ei, threadID); + return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); // Mate distance pruning Value oldAlpha = alpha; @@ -1238,7 +1238,7 @@ namespace { EvalInfo ei; if (ply >= PLY_MAX - 1) - return evaluate(pos, ei, threadID); + return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); // Mate distance pruning if (value_mated_in(ply) >= beta) @@ -1529,8 +1529,8 @@ namespace { else staticValue = evaluate(pos, ei, threadID); - if (ply == PLY_MAX - 1) - return evaluate(pos, ei, threadID); + if (ply >= PLY_MAX - 1) + return pos.is_check() ? quick_evaluate(pos) : evaluate(pos, ei, threadID); // Initialize "stand pat score", and return it immediately if it is // at least beta. -- 2.39.2