18
18
19
19
- name : " Linux x64 (Ubuntu 24.04) - Clang 19 with ASan and UBSan"
20
20
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' }
22
26
23
27
- name : " macOS arm64 (14) - Xcode 15"
24
28
os : macos-14
@@ -69,15 +73,15 @@ jobs:
69
73
70
74
- name : Install Clang 19
71
75
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
73
77
74
78
- name : Prepare macOS environment
75
79
if : runner.os == 'macOS'
76
80
run : |
77
81
echo "PKG_CONFIG_PATH=$(brew --prefix mozjpeg)/lib/pkgconfig:$(brew --prefix libarchive)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
78
82
79
- - name : Prepare sanitizers
80
- if : matrix.build.sanitize
83
+ - name : Prepare ASan and UBSan
84
+ if : matrix.build.sanitize == 'asan'
81
85
env :
82
86
LLVM_PREFIX : /usr/lib/llvm-19
83
87
run : |
@@ -96,6 +100,24 @@ jobs:
96
100
echo "LD_LIBRARY_PATH=$LLVM_PREFIX/lib:`dirname $ASAN_DSO`" >> $GITHUB_ENV
97
101
echo "$LLVM_PREFIX/bin" >> $GITHUB_PATH
98
102
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
+
99
121
- name : Configure libvips
100
122
run :
101
123
meson setup build
@@ -126,5 +148,5 @@ jobs:
126
148
- name : Run test suite
127
149
env :
128
150
VIPS_LEAK : 1
129
- LD_PRELOAD : ${{ env.ASAN_DSO }}
151
+ LD_PRELOAD : ${{ env.ASAN_DSO }}${{ env.TSAN_DSO }}
130
152
run : python3 -m pytest -sv --log-cli-level=WARNING test/test-suite
0 commit comments