From 2160484b62ebde52ba6f486ad652f1a72cfe9143 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 21 Sep 2023 09:40:33 +0100 Subject: Support `-sanitize:` for `address`, `memory`, `thread` for LLVM 17 --- src/main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 3d8637757..3d2dd3c44 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -300,6 +300,8 @@ enum BuildFlagKind { BuildFlag_Tilde, + BuildFlag_Sanitize, + #if defined(GB_SYSTEM_WINDOWS) BuildFlag_IgnoreVsSearch, BuildFlag_ResourceFile, @@ -486,6 +488,8 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_Tilde, str_lit("tilde"), BuildFlagParam_None, Command__does_build); #endif + add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true); + #if defined(GB_SYSTEM_WINDOWS) add_flag(&build_flags, BuildFlag_IgnoreVsSearch, str_lit("ignore-vs-search"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_ResourceFile, str_lit("resource"), BuildFlagParam_String, Command__does_build); @@ -1194,6 +1198,21 @@ gb_internal bool parse_build_flags(Array args) { build_context.tilde_backend = true; break; + case BuildFlag_Sanitize: + GB_ASSERT(value.kind == ExactValue_String); + + if (str_eq_ignore_case(value.value_string, str_lit("address"))) { + build_context.sanitizer_flags |= SanitizerFlag_Address; + } else if (str_eq_ignore_case(value.value_string, str_lit("memory"))) { + build_context.sanitizer_flags |= SanitizerFlag_Memory; + } else if (str_eq_ignore_case(value.value_string, str_lit("thread"))) { + build_context.sanitizer_flags |= SanitizerFlag_Thread; + } else { + gb_printf_err("-sanitize: options are 'address', 'memory', and 'thread'\n"); + bad_flags = true; + } + break; + #if defined(GB_SYSTEM_WINDOWS) case BuildFlag_IgnoreVsSearch: { GB_ASSERT(value.kind == ExactValue_Invalid); -- cgit v1.2.3