diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 08e591a3a..8f495e3c4 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -1747,11 +1747,40 @@ gb_internal bool init_build_paths(String init_filename) { return false; } + if (build_context.sanitizer_flags & SanitizerFlag_Address) { + switch (build_context.metrics.os) { + case TargetOs_windows: + case TargetOs_linux: + case TargetOs_darwin: + break; + default: + gb_printf_err("-sanitize:memory is only supported on windows, linux, and darwin\n"); + return false; + } + } + if (build_context.sanitizer_flags & SanitizerFlag_Memory) { - if (build_context.metrics.os != TargetOs_linux) { + switch (build_context.metrics.os) { + case TargetOs_linux: + break; + default: gb_printf_err("-sanitize:memory is only supported on linux\n"); return false; } + if (build_context.metrics.os != TargetOs_linux) { + return false; + } + } + + if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + switch (build_context.metrics.os) { + case TargetOs_linux: + case TargetOs_darwin: + break; + default: + gb_printf_err("-sanitize:thread is only supported on linux and darwin\n"); + return false; + } } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index f86e008a9..4be0ebf9b 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -321,6 +321,12 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i if (build_context.sanitizer_flags & SanitizerFlag_Address) { lb_add_attribute_to_proc(m, p->value, "sanitize_address"); } + if (build_context.sanitizer_flags & SanitizerFlag_Memory) { + lb_add_attribute_to_proc(m, p->value, "sanitize_memory"); + } + if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + lb_add_attribute_to_proc(m, p->value, "sanitize_thread"); + } } lbValue proc_value = {p->value, p->type};