Skip to content

Commit 0efd96b

Browse files
committed
Integrate Google AddressSanitizer (aka ASan) in tests
1 parent 617405f commit 0efd96b

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

.github/workflows/ci.yml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
strategy:
1919
matrix:
2020
os: [ubuntu-22.04]
21-
backend: [mkl, dnnl]
21+
backend: [mkl, dnnl, asan]
2222

2323
steps:
2424
- uses: actions/checkout@v4
@@ -50,6 +50,15 @@ jobs:
5050
sudo apt-get install -y intel-oneapi-dnnl-devel=$DNNL_VERSION intel-oneapi-dnnl=$DNNL_VERSION
5151
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DBUILD_TESTS=ON -DWITH_MKL=OFF -DOPENMP_RUNTIME=COMP -DWITH_DNNL=ON .
5252
53+
- name: Configure with ASAN
54+
if: startsWith(matrix.os, 'ubuntu') && matrix.backend == 'asan'
55+
env:
56+
DNNL_VERSION: 2023.0.0-25399
57+
run: |
58+
sudo apt-get install -y intel-oneapi-dnnl-devel=$DNNL_VERSION intel-oneapi-dnnl=$DNNL_VERSION
59+
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DBUILD_TESTS=ON -DWITH_MKL=OFF -DOPENMP_RUNTIME=COMP -DWITH_DNNL=ON \
60+
-DGOOGLE_ADDRESS_SANITIZER=ON -DCMAKE_BUILD_TYPE=Debug .
61+
5362
- name: Build
5463
run: |
5564
make install
@@ -71,7 +80,10 @@ jobs:
7180
if: matrix.backend == 'dnnl'
7281
run: |
7382
tests/ctranslate2_test tests/data
74-
83+
- name: Test ASAN
84+
if: matrix.backend == 'asan'
85+
run: |
86+
ASAN_OPTIONS=detect_leaks=1:print_stats=1 tests/ctranslate2_test tests/data
7587
7688
build-and-test-cpp-aarch64:
7789
runs-on: ubuntu-22.04

CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ option(BUILD_TESTS "Compile the tests" OFF)
2222
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
2323
option(WITH_TENSOR_PARALLEL "Compile with NCCL and MPI backend" OFF)
2424
option(WITH_FLASH_ATTN "Compile with Flash Attention 2" OFF)
25+
option(GOOGLE_ADDRESS_SANITIZER "ASAN" OFF)
26+
2527

2628
if(ENABLE_PROFILING)
2729
message(STATUS "Enable profiling support")
@@ -444,6 +446,16 @@ if (WITH_RUY)
444446
list(APPEND LIBRARIES ruy)
445447
endif()
446448

449+
IF (GOOGLE_ADDRESS_SANITIZER AND (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "DEBUG"))
450+
MESSAGE (STATUS "GOOGLE_ADDRESS_SANITIZER: ENABLED")
451+
set(ASAN_FLAGS " -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-common")
452+
string(APPEND CMAKE_C_FLAGS ${ASAN_FLAGS})
453+
string(APPEND CMAKE_CXX_FLAGS ${ASAN_FLAGS})
454+
add_link_options(-fsanitize=address)
455+
ELSEIF (GOOGLE_ADDRESS_SANITIZER)
456+
MESSAGE(FATAL_ERROR "SANITIZER requires Debug build type") # simplify CMake configuration for now
457+
ENDIF ()
458+
447459
if (WITH_CUDA)
448460
find_package(CUDA 11.0 REQUIRED)
449461
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

0 commit comments

Comments
 (0)