aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-10 22:59:44 +0100
committerDavid Robillard <d@drobilla.net>2020-11-11 00:09:44 +0100
commit79d11422526c46e4bae0d2b920110bbbb44d9c70 (patch)
treec2e3e397f639475c509ef48f0388b8315ad8d390
parent9eee20ada8974e53227fa77e8dc0013ceaca88a3 (diff)
downloadserd-79d11422526c46e4bae0d2b920110bbbb44d9c70.tar.gz
serd-79d11422526c46e4bae0d2b920110bbbb44d9c70.tar.bz2
serd-79d11422526c46e4bae0d2b920110bbbb44d9c70.zip
Add CI row to run clang sanitizers
Some of these are also supported by GCC, but clang supports more and clang on Linux was uncovered before anyway, so this fixes that situation as well.
-rw-r--r--.gitlab-ci.yml18
-rw-r--r--wscript6
2 files changed, 24 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 47c96038..406dcf3d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -115,6 +115,24 @@ test:x64_static:
needs: ["x64_static"]
+x64_sanitize:
+ <<: *build_definition
+ image: lv2plugin/debian-x64-clang
+ script: python ./waf configure build -ST --werror
+ variables:
+ CC: "clang"
+ CFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+ CXX: "clang++"
+ CXXFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+ LINKFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+
+test:x64_sanitize:
+ <<: *test_definition
+ image: lv2plugin/debian-x64-clang
+ script: python ./waf test
+ needs: ["x64_sanitize"]
+
+
mingw32_dbg:
<<: *build_definition
image: lv2plugin/debian-mingw32
diff --git a/wscript b/wscript
index bc21d526..faeaadaa 100644
--- a/wscript
+++ b/wscript
@@ -55,6 +55,7 @@ def configure(conf):
'clang': [
'-Wno-cast-align',
'-Wno-cast-qual',
+ '-Wno-conversion',
'-Wno-covered-switch-default',
'-Wno-disabled-macro-expansion',
'-Wno-double-promotion',
@@ -101,6 +102,11 @@ def configure(conf):
if 'mingw' in conf.env.CC[0]:
conf.env.append_value('CFLAGS', '-Wno-unused-macros')
+ if ('clang' in conf.env.CC[0] and (
+ '-fsanitize=address' in conf.env.CFLAGS or
+ '-fsanitize=undefined' in conf.env.CFLAGS)):
+ conf.env.LINKFLAGS.remove('-Wl,--no-undefined')
+
conf.env.update({
'BUILD_UTILS': not Options.options.no_utils,
'BUILD_SHARED': not Options.options.no_shared,