Run PVS-STUDIO analyzer
authorMarco Costalba <mcostalba@gmail.com>
Sun, 27 Sep 2015 08:53:39 +0000 (10:53 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Mon, 5 Oct 2015 07:13:33 +0000 (09:13 +0200)
Fix issues after a run of PVS-STUDIO analyzer.
Mainly false positives but warnings are anyhow
useful to point out not very readable code.

Noteworthy is the memset() one, where PVS prefers ss-2
instead of stack. This is because memeset() could
be optimized away by the compiler when using 'stack',
due to stack being a local variable no more used after
memset. This should normally not happen, but when
it happens it leads to very sublte and difficult
to find bug, so better to be safe than sorry.

No functional change.

src/main.cpp
src/movegen.cpp
src/movepick.h
src/search.cpp
src/uci.cpp

index adc13db488a4182f022fa94c9be3b221970859d8..56af9932a049e30b2977a0f730bcc943c0d14299 100644 (file)
@@ -47,4 +47,5 @@ int main(int argc, char* argv[]) {
   UCI::loop(argc, argv);
 
   Threads.exit();
+  return 0;
 }
index 111895876459d0b9b67921ae305a57bc13b70748..274412f408199e84b6512728b68ce9eb712aec3d 100644 (file)
@@ -58,10 +58,11 @@ namespace {
 
     if (Checks && !pos.gives_check(m, *ci))
         return moveList;
+    else
+        (void)ci; // Silence a warning under MSVC
 
     *moveList++ = m;
-
-    return (void)ci, moveList; // Silence a warning under MSVC
+    return moveList;
   }
 
 
@@ -82,8 +83,10 @@ namespace {
     // that's not already included in the queen promotion.
     if (Type == QUIET_CHECKS && (StepAttacksBB[W_KNIGHT][to] & ci->ksq))
         *moveList++ = make<PROMOTION>(to - Delta, to, KNIGHT);
+    else
+        (void)ci; // Silence a warning under MSVC
 
-    return (void)ci, moveList; // Silence a warning under MSVC
+    return moveList;
   }
 
 
index 412c08e2861ab1bac41868a20b8b6c7639db986c..e64ebfade18308a55046c7b61e396e1800bb7f75 100644 (file)
@@ -39,7 +39,7 @@
 template<typename T>
 struct Stats {
 
-  static const Value Max = Value(1<<28);
+  static const Value Max = Value(1 << 28);
 
   const T* operator[](Piece pc) const { return table[pc]; }
   T* operator[](Piece pc) { return table[pc]; }
@@ -53,8 +53,8 @@ struct Stats {
 
   void update(Piece pc, Square to, Value v) {
 
-    table[pc][to] -= table[pc][to] * std::min(abs(int(v)), 512) / 512;
-    table[pc][to] += int(v) * 64;
+    table[pc][to] -= table[pc][to] * std::min(abs(v), 512) / 512;
+    table[pc][to] += v * 64;
   }
 
 private:
index 9ff447beb6e0a873cc0b5252927175d0a476bb29..efcbdef00a52a9d37a1dc982f937b5ea7460588c 100644 (file)
@@ -341,7 +341,7 @@ namespace {
     Move easyMove = EasyMove.get(pos.key());
     EasyMove.clear();
 
-    std::memset(stack, 0, 5 * sizeof(Stack));
+    std::memset(ss-2, 0, 5 * sizeof(Stack));
 
     depth = DEPTH_ZERO;
     BestMoveChanges = 0;
index b8b371acfc036a4a08570773d058b28ef12173fe..4e56542ab0fc7b14b60bfec328aeadadda54ce87 100644 (file)
@@ -90,11 +90,11 @@ namespace {
 
     // Read option name (can contain spaces)
     while (is >> token && token != "value")
-        name += string(" ", !name.empty()) + token;
+        name += string(" ", name.empty() ? 0 : 1) + token;
 
     // Read option value (can contain spaces)
     while (is >> token)
-        value += string(" ", !value.empty()) + token;
+        value += string(" ", value.empty() ? 0 : 1) + token;
 
     if (Options.count(name))
         Options[name] = value;
@@ -126,8 +126,8 @@ namespace {
         else if (token == "nodes")     is >> limits.nodes;
         else if (token == "movetime")  is >> limits.movetime;
         else if (token == "mate")      is >> limits.mate;
-        else if (token == "infinite")  limits.infinite = true;
-        else if (token == "ponder")    limits.ponder = true;
+        else if (token == "infinite")  limits.infinite = 1;
+        else if (token == "ponder")    limits.ponder = 1;
 
     Threads.start_thinking(pos, limits, SetupStates);
   }
@@ -171,7 +171,7 @@ void UCI::loop(int argc, char* argv[]) {
           Threads.main()->notify_one(); // Could be sleeping
       }
       else if (token == "ponderhit")
-          Search::Limits.ponder = false; // Switch to normal search
+          Search::Limits.ponder = 0; // Switch to normal search
 
       else if (token == "uci")
           sync_cout << "id name " << engine_info(true)