build: +OPENCV_ENABLE_MEMORY_SANITIZER flag
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Thu, 18 Apr 2019 18:50:52 +0000 (18:50 +0000)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Mon, 22 Apr 2019 21:35:25 +0000 (21:35 +0000)
CMakeLists.txt
cmake/OpenCVCompilerOptions.cmake
modules/core/include/opencv2/core/utility.hpp

index 759de6e..d177730 100644 (file)
@@ -470,6 +470,7 @@ OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers"
 OCV_OPTION(ENABLE_SOLUTION_FOLDERS    "Solution folder in Visual Studio or in other IDEs"        (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) )
 OCV_OPTION(ENABLE_PROFILING           "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF  IF CV_GCC )
 OCV_OPTION(ENABLE_COVERAGE            "Enable coverage collection with  GCov"                    OFF  IF CV_GCC )
+OCV_OPTION(OPENCV_ENABLE_MEMORY_SANITIZER "Better support for memory/address sanitizers"         OFF)
 OCV_OPTION(ENABLE_OMIT_FRAME_POINTER  "Enable -fomit-frame-pointer for GCC"                      ON   IF CV_GCC )
 OCV_OPTION(ENABLE_POWERPC             "Enable PowerPC for GCC"                                   ON   IF (CV_GCC AND CMAKE_SYSTEM_PROCESSOR MATCHES powerpc.*) )
 OCV_OPTION(ENABLE_FAST_MATH           "Enable -ffast-math (not recommended for GCC 4.6.x)"       OFF  IF (CV_GCC AND (X86 OR X86_64)) )
index ee67599..fc29d27 100644 (file)
@@ -381,4 +381,7 @@ macro(ocv_add_modules_compiler_options)
       string(REPLACE "/W3" "/W4" ${flags} "${${flags}}")
     endforeach()
   endif()
+  if(OPENCV_ENABLE_MEMORY_SANITIZER)
+    add_definitions(-DOPENCV_ENABLE_MEMORY_SANITIZER=1)
+  endif()
 endmacro()
index 7a7158f..cbec10b 100644 (file)
@@ -116,7 +116,11 @@ CV_EXPORTS void setUseCollection(bool flag); // set implementation collection st
  }
  \endcode
 */
+#ifdef OPENCV_ENABLE_MEMORY_SANITIZER
+template<typename _Tp, size_t fixed_size = 0> class AutoBuffer
+#else
 template<typename _Tp, size_t fixed_size = 1024/sizeof(_Tp)+8> class AutoBuffer
+#endif
 {
 public:
     typedef _Tp value_type;