From 570d5078391501db3c2b972d86638f2e21e44e22 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Mon, 24 Mar 2025 13:06:21 +0100 Subject: [PATCH] Trap on `unreachable` in debug mode --- src/LLVM.zig | 1 + src/compiler.bbb | 5 ++--- src/converter.zig | 9 ++++++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/LLVM.zig b/src/LLVM.zig index 4068b12..34671d6 100644 --- a/src/LLVM.zig +++ b/src/LLVM.zig @@ -627,6 +627,7 @@ pub const OptimizationPipelineOptions = packed struct(u64) { optimization_level: OptimizationLevel, debug_info: bool, }; + pub fn default(create: Create) OptimizationPipelineOptions { const pref_speed = create.optimization_level.prefers_speed(); return .{ diff --git a/src/compiler.bbb b/src/compiler.bbb index 61bd7f5..34a865a 100644 --- a/src/compiler.bbb +++ b/src/compiler.bbb @@ -85,9 +85,8 @@ os_reserve = fn (base: u64, size: u64, protection: OS_ProtectionFlags, map: OS_M { unreachable; } - else - { - } + + return address; } Arena = struct diff --git a/src/converter.zig b/src/converter.zig index 06ddbf4..6a3088c 100644 --- a/src/converter.zig +++ b/src/converter.zig @@ -5771,7 +5771,14 @@ pub noinline fn convert(arena: *Arena, options: ConvertOptions) void { var error_message: llvm.String = undefined; const target_machine = llvm.Target.Machine.create(.{ - .target_options = llvm.Target.Options.default(), + .target_options = blk: { + var target_options = llvm.Target.Options.default(); + target_options.flags0.trap_unreachable = switch (options.build_mode) { + .debug_none, .debug_fast, .debug_size => true, + else => false, + }; + break :blk target_options; + }, .cpu_triple = llvm.String.from_slice(llvm.global.host_triple), .cpu_model = llvm.String.from_slice(llvm.global.host_cpu_model), .cpu_features = llvm.String.from_slice(llvm.global.host_cpu_features),