diff --git a/scripts/cmake/ClangSanitizer.cmake b/scripts/cmake/ClangSanitizer.cmake
index 4eb9c08d31b46b38871c9c9c8f9e10a092da0e7a..a259f5c8e21fe87d786c5ef0958cee53ba3bf16b 100644
--- a/scripts/cmake/ClangSanitizer.cmake
+++ b/scripts/cmake/ClangSanitizer.cmake
@@ -11,7 +11,7 @@ if(OGS_ADDRESS_SANITIZER)
 endif()
 
 if(OGS_UNDEFINED_BEHAVIOR_SANITIZER)
-	set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,integer")
+	set(SANITIZE_FLAG_VALUE "${SANITIZE_FLAG_VALUE},undefined,integer -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/scripts/test/clang_sanitizer_blacklist.txt")
 endif()
 
 if(DEFINED SANITIZE_FLAG_VALUE)
diff --git a/scripts/test/clang_sanitizer_blacklist.txt b/scripts/test/clang_sanitizer_blacklist.txt
new file mode 100644
index 0000000000000000000000000000000000000000..44fb0114a35930a0cc0d7669386ea9ed343ccc0f
--- /dev/null
+++ b/scripts/test/clang_sanitizer_blacklist.txt
@@ -0,0 +1,35 @@
+# Eigen is calling memcpy with source equal nullptr for a SparseMatrix without
+# any space allocated. memcpy with source equal to 0 is undefined behaviour.
+# Eigen-3.2.5: Eigen::internal::smart_copy_helper<double, true>::run
+fun:*smart_copy_helper*
+
+# Computation of ios_fmt_flags relies on some bit-wise operations.
+# STL gcc-4.8: std::operator&=(std::_Ios_Fmtflags&, std::_Ios_Fmtflags)
+fun:*Ios_Fmtflags*
+fun:_ZStaNRSt13_Ios_FmtflagsS_
+src:*/include/c\+\+/4.8/bits/ios_base.h
+src:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c\+\+/4.8/bits/ios_base.h
+
+# Comparing a string with a shorter one causes an integer subtraction overflow.
+# STL gcc-5.3: std::string::_S_compare(unsigned long, unsigned long)
+fun:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm
+# STL gcc-4.8: std::string::_S_compare(unsigned long, unsigned long)
+fun:_ZNSs10_S_compareEmm
+fun:*_S_compare*
+
+# When looking for a last occurence of a string in another string the algorithm
+# an integer subtraction overflow happens.
+# STL gcc-5.3: std::string::find_last_of(...) const
+fun:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12find_last_ofEPKcmm
+# STL gcc-4.8: std::string::find_last_of(char const*, unsigned long, unsigned long)
+fun:_ZNKSs12find_last_ofEPKcmm
+
+# Integer subtraction overflow in mersenne_twister_engine
+# STL gcc-5.3:
+fun:_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE11_M_gen_randEv
+fun:_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_
+fun:_ZNSt24uniform_int_distributionIiEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEiRT_RKNS0_10param_typeE
+
+# valarray fill loop is counting down and reaching integer subtraction overflow
+# STL gcc-5.3: called from operator=(double)
+fun:_ZSt15__valarray_fillIdEvPT_mRKS0_