diff --git a/src/Compilation/Config.zig b/src/Compilation/Config.zig index 5d64173cb9d72ccdf5d9b78b8d11d2844c475ec0..e01daa6db1f15238de4979cd37230e475112fcad 100644 --- a/src/Compilation/Config.zig +++ b/src/Compilation/Config.zig @@ -146,6 +146,7 @@ pub const ResolveError = error{ DynamicLibraryPrecludesPie, TargetRequiresPie, SanitizeThreadRequiresPie, + SanitizeThreadRequiresLlvmBackend, BackendLacksErrorTracing, LlvmLibraryUnavailable, LldUnavailable, @@ -342,6 +343,12 @@ pub fn resolve(options: Options) ResolveError!Config { break :b true; } + if (options.any_sanitize_thread) { + // Thread sanitization instrumentation requires the LLVM backend. + if (options.use_llvm == false) return error.SanitizeThreadRequiresLlvmBackend; + break :b true; + } + if (options.use_llvm) |x| break :b x; // If we cannot use LLVM libraries, then our own backends will be a diff --git a/src/main.zig b/src/main.zig index a0b43b8652f8af2b9620e6264f4b7bd774e92660..0c3c458dd40985f37e8d30f9d7727656b35726f9 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4131,6 +4131,7 @@ fn createModule( error.DynamicLibraryPrecludesPie => fatal("dynamic libraries cannot be position independent executables", .{}), error.TargetRequiresPie => fatal("the specified target requires position independent executables", .{}), error.SanitizeThreadRequiresPie => fatal("thread sanitization requires position independent executables", .{}), + error.SanitizeThreadRequiresLlvmBackend => fatal("thread sanitization requires the LLVM backend", .{}), error.BackendLacksErrorTracing => fatal("the selected backend has not yet implemented error return tracing", .{}), error.LlvmLibraryUnavailable => fatal("zig was compiled without LLVM libraries", .{}), error.LldUnavailable => fatal("zig was compiled without LLD libraries", .{}),