From 07be757faf25db75710d2cdd596106daeae852d9 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Tue, 2 Jul 2019 09:47:11 +0300 Subject: [PATCH] Add module for leak sanitizer --- cmake/FindLeakSan.cmake | 47 ++++++++++++++++++++++++++++++++++++++ cmake/FindSanitizers.cmake | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 cmake/FindLeakSan.cmake diff --git a/cmake/FindLeakSan.cmake b/cmake/FindLeakSan.cmake new file mode 100644 index 0000000..603cd13 --- /dev/null +++ b/cmake/FindLeakSan.cmake @@ -0,0 +1,47 @@ +# The MIT License (MIT) +# +# Copyright (c) +# 2013 Matthew Arsenault +# 2015-2016 RWTH Aachen University, Federal Republic of Germany +# 2019 Barcelona Supercomputing Center +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +option(SANITIZE_LEAK + "Enable LeakSanitizer for sanitized targets." Off) + +set(FLAG_CANDIDATES + "-g -fsanitize=leak" +) + + +include(sanitize-helpers) + +if (SANITIZE_LEAK) + sanitizer_check_compiler_flags("${FLAG_CANDIDATES}" + "LeakSanitizer" "LeakSan") +endif () + +function (add_sanitize_leak TARGET) + if (NOT SANITIZE_LEAK) + return() + endif () + + sanitizer_add_flags(${TARGET} "LeakSanitizer" "LeakSan") +endfunction () diff --git a/cmake/FindSanitizers.cmake b/cmake/FindSanitizers.cmake index a84a8af..37809ba 100644 --- a/cmake/FindSanitizers.cmake +++ b/cmake/FindSanitizers.cmake @@ -38,6 +38,7 @@ find_package(ASan ${FIND_QUIETLY_FLAG}) find_package(TSan ${FIND_QUIETLY_FLAG}) find_package(MSan ${FIND_QUIETLY_FLAG}) find_package(UBSan ${FIND_QUIETLY_FLAG}) +find_package(LeakSan ${FIND_QUIETLY_FLAG}) set(Sanitizers_COMPONENTS "") @@ -121,5 +122,6 @@ function(add_sanitizers ...) add_sanitize_thread(${TARGET}) add_sanitize_memory(${TARGET}) add_sanitize_undefined(${TARGET}) + add_sanitize_leak(${TARGET}) endforeach () endfunction(add_sanitizers)