diff options
Diffstat (limited to 'Tests/RunCMake')
8 files changed, 31 insertions, 17 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 0906f7b..e7df911 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -516,10 +516,15 @@ set_property(TEST RunCMake.add_subdirectory APPEND PROPERTY LABELS "Fortran") add_RunCMake_test(add_test -DPSEUDO_EMULATOR=$<TARGET_FILE:pseudo_emulator>) add_RunCMake_test(build_command) add_executable(exit_code exit_code.c) +if(NOT CMAKE_C_COMPILER_ID MATCHES "OrangeC|Watcom" + AND NOT CMAKE_C_FLAGS MATCHES "-fsanitize=") + add_executable(exit_crash exit_crash.c) + set(EXIT_CRASH_EXE $<TARGET_FILE:exit_crash>) +endif() set(execute_process_ARGS -DEXIT_CODE_EXE=$<TARGET_FILE:exit_code> + -DEXIT_CRASH_EXE=${EXIT_CRASH_EXE} -DPRINT_STDIN_EXE=$<TARGET_FILE:print_stdin> - -DPython_EXECUTABLE=${Python_EXECUTABLE} -DCYGWIN=${CYGWIN} ) if(NOT CMake_TEST_EXTERNAL_CMAKE) diff --git a/Tests/RunCMake/execute_process/AnyCommandAbnormalExit-stderr.txt b/Tests/RunCMake/execute_process/AnyCommandAbnormalExit-stderr.txt index 9627872..b1b0642 100644 --- a/Tests/RunCMake/execute_process/AnyCommandAbnormalExit-stderr.txt +++ b/Tests/RunCMake/execute_process/AnyCommandAbnormalExit-stderr.txt @@ -1,4 +1,4 @@ CMake Error at .*AnyCommandAbnormalExit.cmake:[0-9]+ \(execute_process\): execute_process failed command indexes: - 1: "Abnormal exit with child return code: Segmentation fault + 1: "Abnormal exit with child return code: diff --git a/Tests/RunCMake/execute_process/AnyCommandAbnormalExit.cmake b/Tests/RunCMake/execute_process/AnyCommandAbnormalExit.cmake index 1017e0f..ef63778 100644 --- a/Tests/RunCMake/execute_process/AnyCommandAbnormalExit.cmake +++ b/Tests/RunCMake/execute_process/AnyCommandAbnormalExit.cmake @@ -1,5 +1,4 @@ -execute_process(COMMAND "${Python_EXECUTABLE}" -c - "import os; os.kill(os.getpid(),11)" +execute_process(COMMAND "${EXIT_CRASH_EXE}" COMMAND ${CMAKE_COMMAND} -E true COMMAND_ERROR_IS_FATAL ANY ) diff --git a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-1.cmake b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-1.cmake index e4a125d..1786d53 100644 --- a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-1.cmake +++ b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-1.cmake @@ -1,12 +1,10 @@ -execute_process(COMMAND "${Python_EXECUTABLE}" -c - "import os; os.kill(os.getpid(),11)" +execute_process(COMMAND "${EXIT_CRASH_EXE}" COMMAND ${CMAKE_COMMAND} -E true RESULT_VARIABLE result ) if(result EQUAL "0") - execute_process(COMMAND "${Python_EXECUTABLE}" -c - "import os; os.kill(os.getpid(),11)" + execute_process(COMMAND "${EXIT_CRASH_EXE}" COMMAND ${CMAKE_COMMAND} -E true COMMAND_ERROR_IS_FATAL LAST ) diff --git a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2-stderr.txt b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2-stderr.txt index c915e58..6db023b 100644 --- a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2-stderr.txt +++ b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2-stderr.txt @@ -1,2 +1,2 @@ CMake Error at .*LastCommandAbnormalExit-2.cmake:[0-9]+ \(execute_process\): - execute_process Abnormal exit: Segmentation fault + execute_process Abnormal exit: diff --git a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2.cmake b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2.cmake index 6c3fbf8..a0c3aaf 100644 --- a/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2.cmake +++ b/Tests/RunCMake/execute_process/LastCommandAbnormalExit-2.cmake @@ -1,13 +1,11 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E true - COMMAND "${Python_EXECUTABLE}" -c - "import os; os.kill(os.getpid(),11)" + COMMAND "${EXIT_CRASH_EXE}" RESULT_VARIABLE result ) if(NOT result EQUAL "0") execute_process(COMMAND ${CMAKE_COMMAND} -E true - COMMAND "${Python_EXECUTABLE}" -c - "import os; os.kill(os.getpid(),11)" + COMMAND "${EXIT_CRASH_EXE}" COMMAND_ERROR_IS_FATAL LAST ) endif() diff --git a/Tests/RunCMake/execute_process/RunCMakeTest.cmake b/Tests/RunCMake/execute_process/RunCMakeTest.cmake index a3a3a9a..f77391a 100644 --- a/Tests/RunCMake/execute_process/RunCMakeTest.cmake +++ b/Tests/RunCMake/execute_process/RunCMakeTest.cmake @@ -41,10 +41,10 @@ run_cmake_command(StderrNoexist ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/Stder run_cmake_command(StdoutStderrNoexist ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/StderrNoexist.cmake) run_cmake_command(InOutErrDirectory ${CMAKE_COMMAND} -DPRINT_STDIN_EXE=${PRINT_STDIN_EXE} -P ${RunCMake_SOURCE_DIR}/InOutErrDirectory.cmake) -if(UNIX AND Python_EXECUTABLE) - run_cmake_command(AnyCommandAbnormalExit ${CMAKE_COMMAND} -DPython_EXECUTABLE=${Python_EXECUTABLE} -P ${RunCMake_SOURCE_DIR}/AnyCommandAbnormalExit.cmake) - run_cmake_command(LastCommandAbnormalExit-1 ${CMAKE_COMMAND} -DPython_EXECUTABLE=${Python_EXECUTABLE} -P ${RunCMake_SOURCE_DIR}/LastCommandAbnormalExit-1.cmake) - run_cmake_command(LastCommandAbnormalExit-2 ${CMAKE_COMMAND} -DPython_EXECUTABLE=${Python_EXECUTABLE} -P ${RunCMake_SOURCE_DIR}/LastCommandAbnormalExit-2.cmake) +if(EXIT_CRASH_EXE) + run_cmake_command(AnyCommandAbnormalExit ${CMAKE_COMMAND} -DEXIT_CRASH_EXE=${EXIT_CRASH_EXE} -P ${RunCMake_SOURCE_DIR}/AnyCommandAbnormalExit.cmake) + run_cmake_command(LastCommandAbnormalExit-1 ${CMAKE_COMMAND} -DEXIT_CRASH_EXE=${EXIT_CRASH_EXE} -P ${RunCMake_SOURCE_DIR}/LastCommandAbnormalExit-1.cmake) + run_cmake_command(LastCommandAbnormalExit-2 ${CMAKE_COMMAND} -DEXIT_CRASH_EXE=${EXIT_CRASH_EXE} -P ${RunCMake_SOURCE_DIR}/LastCommandAbnormalExit-2.cmake) endif() if(WIN32 OR CYGWIN) diff --git a/Tests/RunCMake/exit_crash.c b/Tests/RunCMake/exit_crash.c new file mode 100644 index 0000000..324ffad --- /dev/null +++ b/Tests/RunCMake/exit_crash.c @@ -0,0 +1,14 @@ +int main(int argc, const char* argv[]) +{ +#ifndef __clang_analyzer__ /* Suppress clang-analyzer warnings */ + /* Construct an invalid address that cannot be predicted by the + compiler/optimizer, and that is not NULL (which is undefined + behavior to dereference). */ + volatile int* invalidAddress = 0; + invalidAddress += argc ? 1 : 2; + (void)argv; + /* Write to the invalid address to cause SIGSEGV or similar. */ + *invalidAddress = 0; +#endif + return 0; +} |