X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposition.cpp;h=80dcdd5724afab805dea2e90fe374baa08f90c71;hb=15153a1de71d2d36c1f95eecfcf036fb76565309;hp=f304d94a03c0f3f8af989429a221573f8292bfc7;hpb=c89762288b0a9b016a20b596b3e2543c03cd233a;p=stockfish diff --git a/src/position.cpp b/src/position.cpp index f304d94a..80dcdd57 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -776,7 +776,9 @@ bool Position::move_is_check(Move m, const CheckInfo& ci) const { /// It should be used when setting up a position on board. /// You can't undo the move. -void Position::do_setup_move(Move m, StateInfo& newSt) { +void Position::do_setup_move(Move m) { + + StateInfo newSt; do_move(m, newSt); @@ -787,6 +789,10 @@ void Position::do_setup_move(Move m, StateInfo& newSt) { // Update the number of plies played from the starting position startPosPlyCounter++; + + // Our StateInfo newSt is about going out of scope so copy + // its content inside pos before it disappears. + detach(); } /// Position::do_move() makes a move, and saves all information necessary @@ -803,6 +809,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI assert(is_ok()); assert(move_is_ok(m)); + assert(&newSt != st); nodes++; Key key = st->key; @@ -818,8 +825,7 @@ void Position::do_move(Move m, StateInfo& newSt, const CheckInfo& ci, bool moveI Value npMaterial[2]; }; - if (&newSt != st) - memcpy(&newSt, st, sizeof(ReducedStateInfo)); + memcpy(&newSt, st, sizeof(ReducedStateInfo)); newSt.previous = st; st = &newSt;