Merge pull request #17722 from pemmanuelviel:pev--replace-asserts

* Clean: replace C style asserts by CV_Assert and CV_DbgAssert

* Try fixing warning on Windows compilation

* Another way trying to fix warnings on Win

* Fixing warnings with some compilers:
Some compilers warn on systematic exit preventing to execute the code that follows.
This is why assert(0) that exits only in debug was working, but not CV_Assert or CV_Error
that exit both in release and debug, even if with different behavior.
In addition, other compilers complain when return 0 is removed from getKey(),
even if before we have a statement leading to systematic exit.

* Disable "unreachable code" warnings for Win compilers so we can use proper CV_Error
This commit is contained in:
pemmanuelviel 2020-07-04 19:15:44 +02:00 committed by GitHub
parent 8f5b453a96
commit 65f87b114b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 48 additions and 38 deletions

View File

@ -497,7 +497,7 @@ private:
const int nn = 1; const int nn = 1;
const size_t SAMPLE_COUNT = 1000; const size_t SAMPLE_COUNT = 1000;
assert(bestIndex_ != NULL); // must have a valid index CV_Assert(bestIndex_ != NULL && "Requires a valid index"); // must have a valid index
float speedup = 0; float speedup = 0;

View File

@ -34,7 +34,6 @@
//! @cond IGNORED //! @cond IGNORED
#include <vector> #include <vector>
#include <cassert>
#include <cstdio> #include <cstdio>
#include "general.h" #include "general.h"

View File

@ -35,7 +35,6 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <cassert>
#include <limits> #include <limits>
#include <cmath> #include <cmath>
@ -153,7 +152,7 @@ private:
int n = indices_length; int n = indices_length;
int rnd = rand_int(n); int rnd = rand_int(n);
assert(rnd >=0 && rnd < n); CV_DbgAssert(rnd >=0 && rnd < n);
centers[0] = dsindices[rnd]; centers[0] = dsindices[rnd];
@ -208,7 +207,7 @@ private:
// Choose one random center and set the closestDistSq values // Choose one random center and set the closestDistSq values
int index = rand_int(n); int index = rand_int(n);
assert(index >=0 && index < n); CV_DbgAssert(index >=0 && index < n);
centers[0] = dsindices[index]; centers[0] = dsindices[index];
// Computing distance^2 will have the advantage of even higher probability further to pick new centers // Computing distance^2 will have the advantage of even higher probability further to pick new centers
@ -295,7 +294,7 @@ private:
// Choose one random center and set the closestDistSq values // Choose one random center and set the closestDistSq values
int index = rand_int(n); int index = rand_int(n);
assert(index >=0 && index < n); CV_DbgAssert(index >=0 && index < n);
centers[0] = dsindices[index]; centers[0] = dsindices[index];
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
@ -564,10 +563,10 @@ public:
NodePtr node = branch.node; NodePtr node = branch.node;
findNN(node, result, vec, checks, maxChecks, heap, checked); findNN(node, result, vec, checks, maxChecks, heap, checked);
} }
assert(result.full());
delete heap; delete heap;
CV_Assert(result.full());
} }
IndexParams getParameters() const CV_OVERRIDE IndexParams getParameters() const CV_OVERRIDE

View File

@ -34,7 +34,6 @@
//! @cond IGNORED //! @cond IGNORED
#include <cstring> #include <cstring>
#include <cassert>
#include <cmath> #include <cmath>
#include "matrix.h" #include "matrix.h"

View File

@ -35,7 +35,6 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <cassert>
#include <cstring> #include <cstring>
#include "general.h" #include "general.h"
@ -433,7 +432,7 @@ private:
if (trees_>0) { if (trees_>0) {
searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError); searchLevelExact(result, vec, tree_roots_[0], 0.0, epsError);
} }
assert(result.full()); CV_Assert(result.full());
} }
/** /**
@ -462,7 +461,7 @@ private:
delete heap; delete heap;
assert(result.full()); CV_Assert(result.full());
} }

View File

@ -35,7 +35,6 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <cassert>
#include <cstring> #include <cstring>
#include "general.h" #include "general.h"
@ -214,11 +213,11 @@ public:
*/ */
void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params) CV_OVERRIDE void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params) CV_OVERRIDE
{ {
assert(queries.cols == veclen()); CV_Assert(queries.cols == veclen());
assert(indices.rows >= queries.rows); CV_Assert(indices.rows >= queries.rows);
assert(dists.rows >= queries.rows); CV_Assert(dists.rows >= queries.rows);
assert(int(indices.cols) >= knn); CV_Assert(int(indices.cols) >= knn);
assert(int(dists.cols) >= knn); CV_Assert(int(dists.cols) >= knn);
KNNSimpleResultSet<DistanceType> resultSet(knn); KNNSimpleResultSet<DistanceType> resultSet(knn);
for (size_t i = 0; i < queries.rows; i++) { for (size_t i = 0; i < queries.rows; i++) {

View File

@ -35,7 +35,6 @@
#include <algorithm> #include <algorithm>
#include <map> #include <map>
#include <cassert>
#include <limits> #include <limits>
#include <cmath> #include <cmath>
@ -152,7 +151,7 @@ public:
int n = indices_length; int n = indices_length;
int rnd = rand_int(n); int rnd = rand_int(n);
assert(rnd >=0 && rnd < n); CV_DbgAssert(rnd >=0 && rnd < n);
centers[0] = indices[rnd]; centers[0] = indices[rnd];
@ -207,7 +206,7 @@ public:
// Choose one random center and set the closestDistSq values // Choose one random center and set the closestDistSq values
int index = rand_int(n); int index = rand_int(n);
assert(index >=0 && index < n); CV_DbgAssert(index >=0 && index < n);
centers[0] = indices[index]; centers[0] = indices[index];
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
@ -502,9 +501,9 @@ public:
KMeansNodePtr node = branch.node; KMeansNodePtr node = branch.node;
findNN(node, result, vec, checks, maxChecks, heap); findNN(node, result, vec, checks, maxChecks, heap);
} }
assert(result.full());
delete heap; delete heap;
CV_Assert(result.full());
} }
} }

View File

@ -38,7 +38,6 @@
//! @cond IGNORED //! @cond IGNORED
#include <algorithm> #include <algorithm>
#include <cassert>
#include <cstring> #include <cstring>
#include <map> #include <map>
#include <vector> #include <vector>
@ -53,6 +52,11 @@
#include "random.h" #include "random.h"
#include "saving.h" #include "saving.h"
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4702) //disable unreachable code
#endif
namespace cvflann namespace cvflann
{ {
@ -191,11 +195,11 @@ public:
*/ */
virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params) CV_OVERRIDE virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params) CV_OVERRIDE
{ {
assert(queries.cols == veclen()); CV_Assert(queries.cols == veclen());
assert(indices.rows >= queries.rows); CV_Assert(indices.rows >= queries.rows);
assert(dists.rows >= queries.rows); CV_Assert(dists.rows >= queries.rows);
assert(int(indices.cols) >= knn); CV_Assert(int(indices.cols) >= knn);
assert(int(dists.cols) >= knn); CV_Assert(int(dists.cols) >= knn);
KNNUniqueResultSet<DistanceType> resultSet(knn); KNNUniqueResultSet<DistanceType> resultSet(knn);
@ -391,6 +395,10 @@ private:
}; };
} }
#ifdef _MSC_VER
#pragma warning(pop)
#endif
//! @endcond //! @endcond
#endif //OPENCV_FLANN_LSH_INDEX_H_ #endif //OPENCV_FLANN_LSH_INDEX_H_

View File

@ -58,6 +58,12 @@
#include "dynamic_bitset.h" #include "dynamic_bitset.h"
#include "matrix.h" #include "matrix.h"
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4702) //disable unreachable code
#endif
namespace cvflann namespace cvflann
{ {
@ -162,8 +168,7 @@ public:
{ {
feature_size_ = feature_size; feature_size_ = feature_size;
CV_UNUSED(key_size); CV_UNUSED(key_size);
std::cerr << "LSH is not implemented for that type" << std::endl; CV_Error(cv::Error::StsUnsupportedFormat, "LSH is not implemented for that type" );
assert(0);
} }
/** Add a feature to the table /** Add a feature to the table
@ -243,8 +248,7 @@ public:
*/ */
size_t getKey(const ElementType* /*feature*/) const size_t getKey(const ElementType* /*feature*/) const
{ {
std::cerr << "LSH is not implemented for that type" << std::endl; CV_Error(cv::Error::StsUnsupportedFormat, "LSH is not implemented for that type" );
assert(0);
return 0; return 0;
} }
@ -510,6 +514,10 @@ inline LshStats LshTable<unsigned char>::getStats() const
} }
} }
#ifdef _MSC_VER
#pragma warning(pop)
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//! @endcond //! @endcond

View File

@ -69,11 +69,11 @@ public:
*/ */
virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params) virtual void knnSearch(const Matrix<ElementType>& queries, Matrix<int>& indices, Matrix<DistanceType>& dists, int knn, const SearchParams& params)
{ {
assert(queries.cols == veclen()); CV_Assert(queries.cols == veclen());
assert(indices.rows >= queries.rows); CV_Assert(indices.rows >= queries.rows);
assert(dists.rows >= queries.rows); CV_Assert(dists.rows >= queries.rows);
assert(int(indices.cols) >= knn); CV_Assert(int(indices.cols) >= knn);
assert(int(dists.cols) >= knn); CV_Assert(int(dists.cols) >= knn);
#if 0 #if 0
KNNResultSet<DistanceType> resultSet(knn); KNNResultSet<DistanceType> resultSet(knn);

View File

@ -72,7 +72,7 @@ float optimizeSimplexDownhill(T* points, int n, F func, float* vals = NULL )
{ {
const int MAX_ITERATIONS = 10; const int MAX_ITERATIONS = 10;
assert(n>0); CV_DbgAssert(n>0);
T* p_o = new T[n]; T* p_o = new T[n];
T* p_r = new T[n]; T* p_r = new T[n];