1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-05-02 09:39:36 +00:00

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
This commit is contained in:
Marco Costalba 2014-06-21 13:07:29 +02:00
parent 43efd7fad7
commit e8baf2b772

View file

@ -700,6 +700,7 @@ moves_loop: // When in check and at SpNode search starts from here
&& depth >= 8 * ONE_PLY && depth >= 8 * ONE_PLY
&& abs(beta) < VALUE_KNOWN_WIN && abs(beta) < VALUE_KNOWN_WIN
&& ttMove != MOVE_NONE && ttMove != MOVE_NONE
&& ttValue != VALUE_NONE
&& !excludedMove // Recursive singular search is not allowed && !excludedMove // Recursive singular search is not allowed
&& (tte->bound() & BOUND_LOWER) && (tte->bound() & BOUND_LOWER)
&& tte->depth() >= depth - 3 * ONE_PLY; && tte->depth() >= depth - 3 * ONE_PLY;
@ -766,8 +767,6 @@ moves_loop: // When in check and at SpNode search starts from here
&& !ext && !ext
&& pos.legal(move, ci.pinned)) && pos.legal(move, ci.pinned))
{ {
assert(ttValue != VALUE_NONE);
Value rBeta = ttValue - int(depth); Value rBeta = ttValue - int(depth);
ss->excludedMove = move; ss->excludedMove = move;
ss->skipNullMove = true; ss->skipNullMove = true;