@@ -520,6 +520,12 @@ set(CPACK_PACKAGE_VENDOR "University of Edinburgh")
520520
521521configure_file (${PROJECT_SOURCE_DIR} /highs/HConfig.h.in ${HIGHS_BINARY_DIR} /HConfig.h)
522522
523+ if (NOT DEBUG_MEMORY STREQUAL "Off" )
524+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
525+ add_compile_options ($<$<AND :$<OR :$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,$<OR :$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>>:-fno-sanitize=function,vptr>)
526+ endif ()
527+ endif ()
528+
523529if (DEBUG_MEMORY STREQUAL "Address" )
524530 set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
525531 -fsanitize=address,undefined \
@@ -530,6 +536,11 @@ if (DEBUG_MEMORY STREQUAL "Address")
530536 -fno-omit-frame-pointer \
531537 -fsanitize-address-use-after-scope" )
532538
539+ # add_compile_options("-fsanitize=address,undefined")
540+ # add_compile_options("-fno-omit-frame-pointer")
541+ # add_link_options("-fsanitize=address,undefined")
542+ # add_link_options("-lubsan")
543+
533544 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
534545 -fsanitize=address,undefined \
535546 -fno-omit-frame-pointer \
@@ -540,34 +551,56 @@ if (DEBUG_MEMORY STREQUAL "Address")
540551 -fno-optimize-sibling-calls " )
541552
542553elseif (DEBUG_MEMORY STREQUAL "Thread" )
543- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
544- -fsanitize=thread,undefined \
554+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fsanitize=thread,undefined \
545555 -fno-omit-frame-pointer" )
546- set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} \
547- -fsanitize=thread,undefined \
556+ set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -fsanitize=thread,undefined \
548557 -fno-omit-frame-pointer" )
549558
550- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
551- -fsanitize=thread,undefined \
559+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=thread \
552560 -fno-omit-frame-pointer " )
553- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} \
554- -fsanitize=thread,undefined \
561+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=thread \
555562 -fno-omit-frame-pointer " )
556563
557564elseif (DEBUG_MEMORY STREQUAL "Leak" )
558- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
559- -fsanitize=leak,undefined \
560- -fno-omit-frame-pointer" )
561- set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} \
562- -fsanitize=leak,undefined \
563- -fno-omit-frame-pointer" )
565+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
566+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
567+ -fsanitize=leak \
568+ -fno-omit-frame-pointer" )
569+ set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} \
570+ -fsanitize=leak \
571+ -fno-omit-frame-pointer" )
572+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=leak \
573+ -fno-omit-frame-pointer " )
574+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=leak \
575+ -fno-omit-frame-pointer " )
576+ else ()
577+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
578+ -fsanitize=leak,undefined \
579+ -fno-omit-frame-pointer" )
580+ set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} \
581+ -fsanitize=leak,undefined \
582+ -fno-omit-frame-pointer" )
583+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=leak,undefined \
584+ -fno-omit-frame-pointer " )
585+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=leak,undefined \
586+ -fno-omit-frame-pointer " )
587+ endif ()
588+ elseif (DEBUG_MEMORY STREQUAL "Memory" )
589+ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
590+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \
591+ -fsanitize=memory \
592+ -fno-omit-frame-pointer" )
593+ set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} \
594+ -fsanitize=memory \
595+ -fno-omit-frame-pointer" )
596+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=memory \
597+ -fno-omit-frame-pointer " )
598+ set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=memory \
599+ -fno-omit-frame-pointer " )
564600
565- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
566- -fsanitize=leak,undefined \
567- -fno-omit-frame-pointer " )
568- set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} \
569- -fsanitize=leak,undefined \
570- -fno-omit-frame-pointer " )
601+ else ()
602+ message (FATAL_ERROR "Memory sanitizer only available with clang." )
603+ endif ()
571604endif ()
572605
573606# HiGHS coverage update in progress
0 commit comments