Skip to content

Commit 96ce2f6

Browse files
committed
add CI TSan workflow
1 parent 5c1848e commit 96ce2f6

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

.github/workflows/ci.yml

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ jobs:
1818

1919
- name: "Linux x64 (Ubuntu 24.04) - Clang 19 with ASan and UBSan"
2020
os: ubuntu-24.04
21-
build: { cc: clang-19, cxx: clang++-19, linker: ld.lld-19, sanitize: true }
21+
build: { cc: clang-19, cxx: clang++-19, linker: ld.lld-19, sanitize: 'asan' }
22+
23+
- name: "Linux x64 (Ubuntu 24.04) - Clang 19 with TSan and UBSan"
24+
os: ubuntu-24.04
25+
build: { cc: clang-19, cxx: clang++-19, linker: ld.lld-19, sanitize: 'tsan' }
2226

2327
- name: "macOS arm64 (14) - Xcode 15"
2428
os: macos-14
@@ -69,15 +73,15 @@ jobs:
6973
7074
- name: Install Clang 19
7175
if: runner.os == 'Linux' && matrix.build.cc == 'clang-19'
72-
run: sudo apt-get install clang-19 libomp-19-dev lld-19 llvm-19
76+
run: sudo apt-get install clang-19 libomp-19-dev lld-19 llvm-19 libclang-rt-19-dev
7377

7478
- name: Prepare macOS environment
7579
if: runner.os == 'macOS'
7680
run: |
7781
echo "PKG_CONFIG_PATH=$(brew --prefix mozjpeg)/lib/pkgconfig:$(brew --prefix libarchive)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
7882
79-
- name: Prepare sanitizers
80-
if: matrix.build.sanitize
83+
- name: Prepare ASan and UBSan
84+
if: matrix.build.sanitize == 'asan'
8185
env:
8286
LLVM_PREFIX: /usr/lib/llvm-19
8387
run: |
@@ -96,6 +100,24 @@ jobs:
96100
echo "LD_LIBRARY_PATH=$LLVM_PREFIX/lib:`dirname $ASAN_DSO`" >> $GITHUB_ENV
97101
echo "$LLVM_PREFIX/bin" >> $GITHUB_PATH
98102
103+
- name: Prepare TSan
104+
if: matrix.build.sanitize == 'tsan'
105+
env:
106+
LLVM_PREFIX: /usr/lib/llvm-19
107+
run: |
108+
TSAN_DSO=`$CC -print-file-name=libclang_rt.tsan-x86_64.so`
109+
echo "LDSHARED=$CC -shared" >> $GITHUB_ENV
110+
echo "CPPFLAGS=-g -fsanitize=thread -fno-sanitize=function -fno-omit-frame-pointer -fopenmp -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" >> $GITHUB_ENV
111+
echo "LDFLAGS=-g -fsanitize=thread -shared-libasan -fopenmp=libomp" >> $GITHUB_ENV
112+
echo "TSAN_DSO=$TSAN_DSO" >> $GITHUB_ENV
113+
echo "ASAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/asan.supp:fast_unwind_on_malloc=0:allocator_may_return_null=1" >> $GITHUB_ENV
114+
echo "LSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/lsan.supp:fast_unwind_on_malloc=0" >> $GITHUB_ENV
115+
echo "TSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/tsan.supp" >> $GITHUB_ENV
116+
# Ensure UBSan issues causes the program to abort.
117+
echo "UBSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/ubsan.supp:halt_on_error=1:abort_on_error=1:print_stacktrace=1" >> $GITHUB_ENV
118+
echo "LD_LIBRARY_PATH=$LLVM_PREFIX/lib:`dirname $TSAN_DSO`" >> $GITHUB_ENV
119+
echo "$LLVM_PREFIX/bin" >> $GITHUB_PATH
120+
99121
- name: Configure libvips
100122
run:
101123
meson setup build
@@ -126,5 +148,5 @@ jobs:
126148
- name: Run test suite
127149
env:
128150
VIPS_LEAK: 1
129-
LD_PRELOAD: ${{ env.ASAN_DSO }}
151+
LD_PRELOAD: ${{ env.ASAN_DSO }}${{ env.TSAN_DSO }}
130152
run: python3 -m pytest -sv --log-cli-level=WARNING test/test-suite

0 commit comments

Comments
 (0)