Fix a coverity scan warning
authorMarco Costalba <mcostalba@gmail.com>
Sun, 18 Jan 2015 09:41:56 +0000 (10:41 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sun, 18 Jan 2015 09:41:56 +0000 (10:41 +0100)
Coverity scan warns about uninitialized 'sf' argument when
calling probe(). Actually it is a false positive because
argument is passed by reference and assigned inside
probe(). Nevertheless it is a hint that fucntion signature
is a bit tricky, so rewrite it in a more conventional way,
assigning 'sf' from probe() return value.

No functional change.

src/endgame.h
src/material.cpp

index 7ff70373752fe85264caa2b82c14270b97ed403b..453d8b29d47d98780fb8a04bb00da8efed95ff8c 100644 (file)
@@ -113,8 +113,8 @@ class Endgames {
 public:
   Endgames();
 
-  template<typename T> T* probe(Key key, T** eg)
-  { return *eg = map<T>().count(key) ? map<T>()[key].get() : nullptr; }
+  template<typename T, typename E = EndgameBase<T>> E* probe(Key key)
+  { return map<E>().count(key) ? map<E>()[key].get() : nullptr; }
 };
 
 #endif // #ifndef ENDGAME_H_INCLUDED
index be2cc5942890b2d972adbac8eba349d2a1c033d6..e22942128f4a98974f856ecefb836c15b091ff8a 100644 (file)
@@ -139,7 +139,7 @@ Entry* probe(const Position& pos) {
   // Let's look if we have a specialized evaluation function for this particular
   // material configuration. Firstly we look for a fixed configuration one, then
   // for a generic one if the previous search failed.
-  if (pos.this_thread()->endgames.probe(key, &e->evaluationFunction))
+  if ((e->evaluationFunction = pos.this_thread()->endgames.probe<Value>(key)) != nullptr)
       return e;
 
   if (is_KXK<WHITE>(pos))
@@ -158,7 +158,7 @@ Entry* probe(const Position& pos) {
   // configuration. Is there a suitable specialized scaling function?
   EndgameBase<ScaleFactor>* sf;
 
-  if (pos.this_thread()->endgames.probe(key, &sf))
+  if ((sf = pos.this_thread()->endgames.probe<ScaleFactor>(key)) != nullptr)
   {
       e->scalingFunction[sf->strong_side()] = sf; // Only strong color assigned
       return e;