diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2023-10-16 16:15:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-16 16:15:59 +0100 |
| commit | 6ee7b05b2717fe73a924b5b94b8e24fffb6e65ae (patch) | |
| tree | 11737dde4ff491ac69f0638f548c65e43f8cd196 /src/llvm_backend.cpp | |
| parent | e4c7e9903e3f544e50c9f8505227b34304b01b70 (diff) | |
| parent | 51248270e1741bf0faffab4e93af6f85615903a4 (diff) | |
Merge pull request #2850 from jcmdln/linux-llvm-17
Support LLVM >=17.0.1 on Darwin and Linux
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index ceb4dc1de..00c62f0f1 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2602,17 +2602,37 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { if (build_context.sanitizer_flags & SanitizerFlag_Address) { - auto paths = array_make<String>(heap_allocator(), 0, 1); if (build_context.metrics.os == TargetOs_windows) { + auto paths = array_make<String>(heap_allocator(), 0, 1); String path = concatenate_strings(permanent_allocator(), build_context.ODIN_ROOT, str_lit("\\bin\\llvm\\windows\\clang_rt.asan-x86_64.lib")); array_add(&paths, path); + Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib")); + array_add(&gen->foreign_libraries, lib); + } else if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=address"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=address")); + } } - Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib")); - array_add(&gen->foreign_libraries, lib); } if (build_context.sanitizer_flags & SanitizerFlag_Memory) { + if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=memory"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=memory")); + } + } } if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) { + if (!build_context.extra_linker_flags.text) { + build_context.extra_linker_flags = str_lit("-fsanitize=thread"); + } else { + build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=thread")); + } + } } gb_sort_array(gen->foreign_libraries.data, gen->foreign_libraries.count, foreign_library_cmp); |