diff options
| author | gingerBill <bill@gingerbill.org> | 2023-09-21 09:40:33 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-09-21 09:40:33 +0100 |
| commit | 2160484b62ebde52ba6f486ad652f1a72cfe9143 (patch) | |
| tree | 07faa7a8ece3962d504853c70400717dd04130d7 /src/llvm_backend.cpp | |
| parent | f0ab58dfbb4be6103fb7340ec570d218e2137a4b (diff) | |
Support `-sanitize:<string>` for `address`, `memory`, `thread` for LLVM 17
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 8ced9ccee..68223d8c9 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1478,12 +1478,28 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) { passes = gb_string_appendc(passes, "default<O0>"); break; case 1: - passes = gb_string_appendc(passes, "default<O1>"); + passes = gb_string_appendc(passes, "default<Os>"); break; case 2: passes = gb_string_appendc(passes, "default<O2>"); break; } + + // asan - Linux, Darwin, Windows + // msan - linux + // tsan - Linux, Darwin + // ubsan - Linux, Darwin, Windows (NOT SUPPORTED WITH LLVM C-API) + + if (build_context.sanitizer_flags & SanitizerFlag_Address) { + passes = gb_string_appendc(passes, ",asan"); + } + if (build_context.sanitizer_flags & SanitizerFlag_Memory) { + passes = gb_string_appendc(passes, ",msan"); + } + if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + passes = gb_string_appendc(passes, ",tsan"); + } + LLVMErrorRef llvm_err = LLVMRunPasses(wd->m->mod, passes, wd->target_machine, pb_options); defer (LLVMConsumeError(llvm_err)); if (llvm_err != nullptr) { |