From 4fd453301a2d18fc6c0cc6f2bdf0285da859895d Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Tue, 7 Jul 2015 00:31:35 +0200 Subject: [PATCH] Moved CMake files and added a simple testcase --- CMakeLists.txt | 51 ++++++++++++++++++++++ FindASan.cmake => cmake/FindASan.cmake | 0 FindMSan.cmake => cmake/FindMSan.cmake | 0 FindTSan.cmake => cmake/FindTSan.cmake | 0 FindUBSan.cmake => cmake/FindUBSan.cmake | 0 test_project/CMakeLists.txt | 12 ------ test_project/test.cpp | 48 --------------------- tests/CMakeLists.txt | 54 ++++++++++++++++++++++++ tests/asan_test.cpp | 39 +++++++++++++++++ 9 files changed, 144 insertions(+), 60 deletions(-) create mode 100644 CMakeLists.txt rename FindASan.cmake => cmake/FindASan.cmake (100%) rename FindMSan.cmake => cmake/FindMSan.cmake (100%) rename FindTSan.cmake => cmake/FindTSan.cmake (100%) rename FindUBSan.cmake => cmake/FindUBSan.cmake (100%) delete mode 100644 test_project/CMakeLists.txt delete mode 100644 test_project/test.cpp create mode 100644 tests/CMakeLists.txt create mode 100644 tests/asan_test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d249a4d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,51 @@ +# This file is part of CMake-sanitizers. +# +# 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. +# +# +# Copyright (c) +# 2013-2015 Matt Arsenault +# 2015 RWTH Aachen University, Federal Republic of Germany +# + + +# +# project information +# + +# minimum required cmake version +cmake_minimum_required(VERSION 2.8) + +# project name +project("CMake-sanitizers") + + + +# +# cmake configuration +# +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + + + +# +# add tests +# +enable_testing() +add_subdirectory(tests) diff --git a/FindASan.cmake b/cmake/FindASan.cmake similarity index 100% rename from FindASan.cmake rename to cmake/FindASan.cmake diff --git a/FindMSan.cmake b/cmake/FindMSan.cmake similarity index 100% rename from FindMSan.cmake rename to cmake/FindMSan.cmake diff --git a/FindTSan.cmake b/cmake/FindTSan.cmake similarity index 100% rename from FindTSan.cmake rename to cmake/FindTSan.cmake diff --git a/FindUBSan.cmake b/cmake/FindUBSan.cmake similarity index 100% rename from FindUBSan.cmake rename to cmake/FindUBSan.cmake diff --git a/test_project/CMakeLists.txt b/test_project/CMakeLists.txt deleted file mode 100644 index 835a055..0000000 --- a/test_project/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ - -cmake_minimum_required(VERSION 2.8) - -list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/..") - - -include(FindUBSan) -include(FindTSan) -include(FindASan) -include(FindMSan) - -add_executable(test test.cpp) diff --git a/test_project/test.cpp b/test_project/test.cpp deleted file mode 100644 index b79e7d1..0000000 --- a/test_project/test.cpp +++ /dev/null @@ -1,48 +0,0 @@ - -#include -#include -#include - -class BarB -{ -public: - float y; - /* Include something that uses a virtual function. The symbols - that are broken on current OS X libc++ involve this */ - virtual int arst(int o) - { - return 4 + o; - } -}; - -static void print_array(const int* a) -{ - for (int i = 0; i < 4; ++i) - { - std::cout << a[i] << ", "; - } - - std::cout << '\n'; -} - -/* Just include something that ubsan will need to check */ -int main(int argc, const char* argv[]) -{ - BarB* b = new BarB(); - if (argc > 1) - { - int uninitialized[4]; - //int* uninitialized = new int[4]; - print_array(uninitialized); - //delete[] uninitialized; - - int x = atoi(argv[1]); - std::cout << (4 / x) << '\n'; - - fputs(argv[x], stdout); - std::cout << b->arst(x) << '\n'; - } - - delete b; - return 0; -} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..bf0649a --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,54 @@ +# This file is part of CMake-sanitizers. +# +# 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. +# +# +# Copyright (c) +# 2013-2015 Matt Arsenault +# 2015 RWTH Aachen University, Federal Republic of Germany +# + +# Function to add testcases. +function(add_testcase TESTNAME SOURCEFILES) + # remove ${TESTNAME} from ${ARGV} to use ${ARGV} as ${SOURCEFILES} + list(REMOVE_AT ARGV 0) + + # add a new executable + add_executable(${TESTNAME} ${ARGV}) + + # add a testcase for executable + add_test(${TESTNAME} ${TESTNAME}) +endfunction(add_testcase) + + + +# +# search for sanitizers +# +find_package(ASan) +find_package(MSan) +find_package(TSan) +find_package(UBSan) + + + +# +# add testcases +# +add_testcase("asan_test_cpp" asan_test.cpp) diff --git a/tests/asan_test.cpp b/tests/asan_test.cpp new file mode 100644 index 0000000..4b276de --- /dev/null +++ b/tests/asan_test.cpp @@ -0,0 +1,39 @@ +/* This file is part of CMake-sanitizers. + * + * 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. + * + * + * Copyright (c) + * 2013-2015 Matt Arsenault + * 2015 RWTH Aachen University, Federal Republic of Germany + */ + + +int +main(int argc, char **argv) +{ + // Allocate a new array and delete it. + int *array = new int[argc]; + delete[] array; + + /* Access element of the deleted array. This will cause an memory error with + * address sanitizer. + */ + return array[argc]; +}