build: GCC9 compilation
authorAlexander Alekhin <alexander.alekhin@intel.com>
Mon, 11 Nov 2019 14:20:07 +0000 (17:20 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Tue, 12 Nov 2019 15:49:34 +0000 (18:49 +0300)
3rdparty/protobuf/CMakeLists.txt
cmake/OpenCVUtils.cmake
modules/calib3d/src/solvepnp.cpp
modules/calib3d/src/upnp.cpp
modules/calib3d/src/upnp.h
modules/core/include/opencv2/core/persistence.hpp
modules/core/src/persistence_cpp.cpp
modules/highgui/src/window_gtk.cpp
modules/imgproc/src/fixedpoint.inl.hpp

index ada9891..26d6523 100644 (file)
@@ -22,6 +22,7 @@ else()
                                        -Wenum-compare-switch
                                        -Wsuggest-override -Winconsistent-missing-override
                                        -Wimplicit-fallthrough
+                                       -Warray-bounds  # GCC 9+
   )
 endif()
 if(CV_ICC)
index b61a301..370ac45 100644 (file)
@@ -377,6 +377,7 @@ macro(ocv_clear_vars)
 endmacro()
 
 set(OCV_COMPILER_FAIL_REGEX
+    "argument '.*' is not valid"                # GCC 9+
     "command line option .* is valid for .* but not for C\\+\\+" # GNU
     "command line option .* is valid for .* but not for C" # GNU
     "unrecognized .*option"                     # GNU
index c7735a7..62ce0bd 100644 (file)
@@ -41,7 +41,7 @@
  //M*/
 
 #include "precomp.hpp"
-#include "upnp.h"
+//#include "upnp.h"
 #include "dls.h"
 #include "epnp.h"
 #include "p3p.h"
index a674df5..24db8f1 100644 (file)
@@ -49,6 +49,8 @@
 #include "upnp.h"
 #include <limits>
 
+#if 0  // fix buffer overflow first (FIXIT mark in .cpp file)
+
 using namespace std;
 using namespace cv;
 
@@ -313,7 +315,9 @@ void upnp::compute_ccs(const double * betas, const double * ut)
       const double * v = ut + 12 * (9 + i);
       for(int j = 0; j < 4; ++j)
         for(int k = 0; k < 3; ++k)
-          ccs[j][k] += betas[i] * v[3 * j + k];
+          ccs[j][k] += betas[i] * v[3 * j + k];  // FIXIT: array subscript 144 is outside array bounds of 'double [144]' [-Warray-bounds]
+                                                 //        line 109: double ut[12 * 12]
+                                                 //        line 359: double u[12*12]
     }
 
     for (int i = 0; i < 4; ++i) ccs[i][2] *= fu;
@@ -821,3 +825,5 @@ void upnp::qr_solve(Mat * A, Mat * b, Mat * X)
     pX[i] = (pb[i] - sum) / A2[i];
   }
 }
+
+#endif
index c7a8b32..513c6be 100644 (file)
@@ -52,6 +52,8 @@
 #include "opencv2/core/core_c.h"
 #include <iostream>
 
+#if 0  // fix buffer overflow first (FIXIT mark in .cpp file)
+
 class upnp
 {
 public:
@@ -133,4 +135,6 @@ private:
       double * A1, * A2;
 };
 
+#endif
+
 #endif // OPENCV_CALIB3D_UPNP_H_
index d5bffb8..1194885 100644 (file)
@@ -526,6 +526,8 @@ public:
     */
     FileNode(const FileNode& node);
 
+    FileNode& operator=(const FileNode& node);
+
     /** @brief Returns element of a mapping node or a sequence node.
     @param nodename Name of an element in the mapping node.
     @returns Returns the element with the given identifier.
@@ -645,6 +647,8 @@ public:
     */
     FileNodeIterator(const FileNodeIterator& it);
 
+    FileNodeIterator& operator=(const FileNodeIterator& it);
+
     //! returns the currently observed element
     FileNode operator *() const;
     //! accesses the currently observed element methods
@@ -1326,6 +1330,7 @@ inline FileNode FileStorage::getFirstTopLevelNode() const { FileNode r = root();
 inline FileNode::FileNode() : fs(0), node(0) {}
 inline FileNode::FileNode(const CvFileStorage* _fs, const CvFileNode* _node) : fs(_fs), node(_node) {}
 inline FileNode::FileNode(const FileNode& _node) : fs(_node.fs), node(_node.node) {}
+inline FileNode& FileNode::operator=(const FileNode& _node)  { fs = _node.fs; node = _node.node; return *this; }
 inline bool FileNode::empty() const    { return node   == 0;    }
 inline bool FileNode::isNone() const   { return type() == NONE; }
 inline bool FileNode::isSeq() const    { return type() == SEQ;  }
index 12626f2..32c72f7 100644 (file)
@@ -328,6 +328,15 @@ FileNodeIterator::FileNodeIterator(const FileNodeIterator& it)
     remaining = it.remaining;
 }
 
+FileNodeIterator& FileNodeIterator::operator=(const FileNodeIterator& it)
+{
+    fs = it.fs;
+    container = it.container;
+    reader = it.reader;
+    remaining = it.remaining;
+    return *this;
+}
+
 FileNodeIterator& FileNodeIterator::operator ++()
 {
     if( remaining > 0 )
index 2385305..76a3760 100644 (file)
@@ -634,10 +634,13 @@ CV_IMPL int cvStartWindowThread(){
     cvInitSystem(0,NULL);
     if (!thread_started)
     {
-       if (!g_thread_supported ()) {
+#if !GLIB_CHECK_VERSION(2, 32, 0)  // https://github.com/GNOME/glib/blame/b4d58a7105bb9d75907233968bb534b38f9a6e43/glib/deprecated/gthread.h#L274
+       if (!g_thread_supported ())
+       {
            /* the GThread system wasn't inited, so init it */
            g_thread_init(NULL);
        }
+#endif
 
        (void)getWindowMutex();  // force mutex initialization
 
index 40b1c3f..b392c25 100644 (file)
@@ -22,6 +22,7 @@ private:
 public:
     typedef fixedpoint64 WT;
     CV_ALWAYS_INLINE fixedpoint64() { val = 0; }
+    CV_ALWAYS_INLINE fixedpoint64(const fixedpoint64& v) { val = v.val; }
     CV_ALWAYS_INLINE fixedpoint64(const int8_t& _val) { val = ((int64_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE fixedpoint64(const uint8_t& _val) { val = ((int64_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE fixedpoint64(const int16_t& _val) { val = ((int64_t)_val) << fixedShift; }
@@ -104,6 +105,7 @@ private:
 public:
     typedef ufixedpoint64 WT;
     CV_ALWAYS_INLINE ufixedpoint64() { val = 0; }
+    CV_ALWAYS_INLINE ufixedpoint64(const ufixedpoint64& v) { val = v.val; }
     CV_ALWAYS_INLINE ufixedpoint64(const uint8_t& _val) { val = ((uint64_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE ufixedpoint64(const uint16_t& _val) { val = ((uint64_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE ufixedpoint64(const uint32_t& _val) { val = ((uint64_t)_val) << fixedShift; }
@@ -169,6 +171,7 @@ private:
 public:
     typedef fixedpoint64 WT;
     CV_ALWAYS_INLINE fixedpoint32() { val = 0; }
+    CV_ALWAYS_INLINE fixedpoint32(const fixedpoint32& v) { val = v.val; }
     CV_ALWAYS_INLINE fixedpoint32(const int8_t& _val) { val = ((int32_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE fixedpoint32(const uint8_t& _val) { val = ((int32_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE fixedpoint32(const int16_t& _val) { val = ((int32_t)_val) << fixedShift; }
@@ -222,6 +225,7 @@ private:
 public:
     typedef ufixedpoint64 WT;
     CV_ALWAYS_INLINE ufixedpoint32() { val = 0; }
+    CV_ALWAYS_INLINE ufixedpoint32(const ufixedpoint32& v) { val = v.val; }
     CV_ALWAYS_INLINE ufixedpoint32(const uint8_t& _val) { val = ((uint32_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE ufixedpoint32(const uint16_t& _val) { val = ((uint32_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE ufixedpoint32(const cv::softdouble& _val) { val = _val.getSign() ? 0 : (uint32_t)cvRound(_val * cv::softdouble((1 << fixedShift))); }
@@ -271,6 +275,7 @@ private:
 public:
     typedef fixedpoint32 WT;
     CV_ALWAYS_INLINE fixedpoint16() { val = 0; }
+    CV_ALWAYS_INLINE fixedpoint16(const fixedpoint16& v) { val = v.val; }
     CV_ALWAYS_INLINE fixedpoint16(const int8_t& _val) { val = ((int16_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE fixedpoint16(const cv::softdouble& _val) { val = (int16_t)cvRound(_val * cv::softdouble((1 << fixedShift))); }
     CV_ALWAYS_INLINE fixedpoint16& operator = (const int8_t& _val) { val = ((int16_t)_val) << fixedShift; return *this; }
@@ -317,6 +322,7 @@ private:
 public:
     typedef ufixedpoint32 WT;
     CV_ALWAYS_INLINE ufixedpoint16() { val = 0; }
+    CV_ALWAYS_INLINE ufixedpoint16(const ufixedpoint16& v) { val = v.val; }
     CV_ALWAYS_INLINE ufixedpoint16(const uint8_t& _val) { val = ((uint16_t)_val) << fixedShift; }
     CV_ALWAYS_INLINE ufixedpoint16(const cv::softdouble& _val) { val = _val.getSign() ? 0 : (uint16_t)cvRound(_val * cv::softdouble((int32_t)(1 << fixedShift))); }
     CV_ALWAYS_INLINE ufixedpoint16& operator = (const uint8_t& _val) { val = ((uint16_t)_val) << fixedShift; return *this; }