Fix integer overflow caused by bad use of binary operator.
authorYann Dirson <ydirson@altern.org>
Thu, 17 Jan 2008 23:19:24 +0000 (00:19 +0100)
committerYann Dirson <ydirson@free.fr>
Sun, 29 Sep 2013 13:39:24 +0000 (15:39 +0200)
Guess this may make the AI more accurate :)

Problem caught by gcc:

../../gnushogi/search.c: In function 'search':
../../gnushogi/search.c:887: warning: overflow in implicit constant conversion

A quick audit only revealed a place where another logical AND was
tested using a curious idiom, so let's make it consistent at the same
time.

gnushogi/eval.c
gnushogi/search.c

index 3f44d9b..d2dcfab 100644 (file)
@@ -1002,7 +1002,7 @@ BRLscan(short sq, short *mob)
 { \
     if (color[u] != c2) \
     { \
-        if ((atk1[u] == 0) || ((atk2[u] & CNT_MASK) > 1)) \
+        if ((atk1[u] == 0) || ((atk2[u] & CNT_MASK) != 0)) \
         { \
             ++cnt; \
         } \
index 5be8209..e21ce0e 100644 (file)
@@ -881,7 +881,7 @@ search(short side,
 
             MakeMove(side, node, &tempb, &tempc, &tempsf,
                      &tempst, &INCscore);
-            CptrFlag[ply] = (node->flags & capture);
+            CptrFlag[ply] = ((node->flags & capture) != 0);
             TesujiFlag[ply] = (node->flags & tesuji)
                 && (node->flags & dropmask);
             Tscore[ply] = node->score;