From e8baf2b772ba8b5eacccd2a64f33faa3b0efa7a8 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 21 Jun 2014 13:07:29 +0200 Subject: [PATCH] Ensure ttValue != VALUE_NONE in singular extension search The assert: assert(ttValue != VALUE_NONE); Could fire for multiple reasons (although is very rare), for instance after an IID we can have ttMove != MOVE_NONE while ttValue is still set at VALUE_NONE. But not only this, actually SMP is a source of corrupted ttValue and anyhow we can detect the condition: ttMove != MOVE_NONE && ttValue == VALUE_NONE even north of IID. Reported by Ronald de Man. It is so rare that bench didn't change. bench: 7710548 --- src/search.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index acd042c0..24fde88f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -700,6 +700,7 @@ moves_loop: // When in check and at SpNode search starts from here && depth >= 8 * ONE_PLY && abs(beta) < VALUE_KNOWN_WIN && ttMove != MOVE_NONE + && ttValue != VALUE_NONE && !excludedMove // Recursive singular search is not allowed && (tte->bound() & BOUND_LOWER) && tte->depth() >= depth - 3 * ONE_PLY; @@ -766,8 +767,6 @@ moves_loop: // When in check and at SpNode search starts from here && !ext && pos.legal(move, ci.pinned)) { - assert(ttValue != VALUE_NONE); - Value rBeta = ttValue - int(depth); ss->excludedMove = move; ss->skipNullMove = true; -- 2.39.2