diff --git a/cmake/enable_code_coverage_report.cmake b/cmake/enable_code_coverage_report.cmake
index 733be7340b117857b70d15a144450b476df47442..f668dd9b08f9e030a45922289d267402e9a02d39 100644
--- a/cmake/enable_code_coverage_report.cmake
+++ b/cmake/enable_code_coverage_report.cmake
@@ -25,22 +25,16 @@
 #
 #######################################################################################################################
 
-string(TOUPPER "${ENABLE_TSAN}" enable_tsanitizer_uppercase)
-IF(enable_tsanitizer_uppercase STREQUAL "TRUE")
-    message(WARNING "The ENABLE_TSAN set to true. Code coverage cannot be enabled, becasue it requires -O0 flag and ENABLE_TSAN requires -O1.")
-ELSE()
-    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 --coverage")
-    # The make coverage command is only available in debug mode.  Also
-    # factor in that cmake treats CMAKE_BUILD_TYPE string as case
-    # insensitive.
-    string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_uppercase)
-    IF(build_type_uppercase STREQUAL "DEBUG")
-        configure_file(cmake/make_coverage.sh.in
-        ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY)
-        add_custom_target(coverage
-        ./make_coverage.sh
-        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-        COMMENT "Generating test coverage documentation" VERBATIM)
-    ENDIF()
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 --coverage")
+# The make coverage command is only available in debug mode.  Also
+# factor in that cmake treats CMAKE_BUILD_TYPE string as case
+# insensitive.
+string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type_uppercase)
+IF(build_type_uppercase STREQUAL "DEBUG")
+    configure_file(cmake/make_coverage.sh.in
+    ${PROJECT_BINARY_DIR}/make_coverage.sh @ONLY)
+    add_custom_target(coverage
+    ./make_coverage.sh
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    COMMENT "Generating test coverage documentation" VERBATIM)
 ENDIF()
-
diff --git a/cmake/set_default_flags.cmake b/cmake/set_default_flags.cmake
index 4cae9ed1aa294872178b1c46250b4752e086e7eb..a6a48fe64f265976c52108d36fd798e4f4be6d84 100644
--- a/cmake/set_default_flags.cmake
+++ b/cmake/set_default_flags.cmake
@@ -22,18 +22,18 @@
 #######################################################################################################################
 
 include(cmake/enable_latest_cxx_support.cmake)
+
+set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;asan;tsan")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${PROJECT_NAME}_CXX_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -g")
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 --coverage")
+set(CMAKE_CXX_FLAGS_TSAN "${CMAKE_CXX_FLAGS} -g -O1 -fsanitize=thread")
+set(CMAKE_CXX_FLAGS_ASAN "${CMAKE_CXX_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak")
+
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${${PROJECT_NAME}_C_FLAGS} -Wall -Wextra -Wshadow -pedantic -Wuninitialized")
 set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
 set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -g")
-
-string(TOUPPER "${ENABLE_TSAN}" enable_tsanitizer_uppercase)
-IF(enable_tsanitizer_uppercase STREQUAL "TRUE")
-    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O1 -fsanitize=thread")
-    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O1 -fsanitize=thread")
-ELSE()
-    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 --coverage")
-    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0 --coverage")
-ENDIF()
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0 --coverage")
+set(CMAKE_C_FLAGS_TSAN "${CMAKE_C_FLAGS} -g -O1 -fsanitize=thread")
+set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS} -g -O0 -fsanitize=address -fsanitize=undefined -fsanitize=leak")