Catch2 ASAN support with Windows MSVC

ASAN on Windows messes with exception handlers, and Catch2 doesn't
account for this. A workaround is to disable SEH on Windows with ASAN as
suggested in this reply to an existing issue
https://github.com/catchorg/Catch2/issues/898#issuecomment-841733322

CI requires some sourcing of the development tools for required paths
This commit is contained in:
Eric Kilmer 2021-05-16 00:33:16 -04:00 committed by William Woodruff
parent 7d285ea7b9
commit 41a08eb3ee
2 changed files with 15 additions and 1 deletions

View File

@ -110,6 +110,13 @@ jobs:
- uses: actions/checkout@v2
with:
submodules: 'true'
- name: Enable ASan Sanitizers
if: matrix.build-type == 'Debug' && matrix.build-arch == 'x64'
run: |
echo "SANITIZER_FLAG=-DPEPARSE_USE_SANITIZER=Address" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append
- uses: ilammy/msvc-dev-cmd@v1.8.0
with:
arch: ${{ matrix.build-arch }}
- name: build
run: |
mkdir build
@ -119,6 +126,7 @@ jobs:
-A ${{ matrix.build-arch }} `
-DBUILD_SHARED_LIBS=${{ matrix.build-shared }} `
-DPEPARSE_ENABLE_TESTING=ON `
$Env:SANITIZER_FLAG `
..
cmake --build . --config ${{ matrix.build-type }}
- name: install

View File

@ -28,8 +28,14 @@ add_executable(tests
filesystem_compat.h
)
target_compile_definitions(tests PRIVATE ASSETS_DIR="${CMAKE_CURRENT_SOURCE_DIR}/assets")
target_link_libraries(tests PRIVATE std::filesystem ${PROJECT_NAME} Catch2::Catch2)
target_include_directories(tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(tests PRIVATE std::filesystem ${PROJECT_NAME} Catch2::Catch2)
# ASAN on Windows messes with exception handlers, and Catch2 doesn't account
# for this. A workaround is to disable SEH on Windows with ASAN
# https://github.com/catchorg/Catch2/issues/898#issuecomment-841733322
if (WIN32 AND PEPARSE_USE_SANITIZER STREQUAL "Address")
target_compile_definitions(tests PUBLIC CATCH_CONFIG_NO_WINDOWS_SEH)
endif()
if (EXISTS "${CORKAMI_PE_PATH}")
target_compile_definitions(tests PRIVATE CORKAMI_PE_PATH="${CORKAMI_PE_PATH}")