zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit d9b6d1ed33d18eb13fa2cb39da3e7a381742975b (tree)
parent 4c4dacf81a5da85a1f7d1550ed45f5cb20fd1524
Author: Jacob Young <jacobly0@users.noreply.github.com>
Date:   Fri, 30 May 2025 14:38:46 -0400

cbe: legalize safety instructions in non-zig1 builds

This is valid if the bootstrap dev env doesn't need to support runtime
safety.  Another solution can always be implemented if needs change.

Diffstat:
Msrc/arch/riscv64/CodeGen.zig | 2+-
Msrc/arch/wasm/CodeGen.zig | 2+-
Msrc/codegen/c.zig | 8+++++++-
Msrc/codegen/spirv.zig | 2+-
Msrc/dev.zig | 3+++
5 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig @@ -51,7 +51,7 @@ const Instruction = encoding.Instruction; const InnerError = CodeGenError || error{OutOfRegisters}; -pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features { +pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features { return comptime &.initMany(&.{ .expand_intcast_safe, .expand_add_safe, diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig @@ -31,7 +31,7 @@ const libcFloatSuffix = target_util.libcFloatSuffix; const compilerRtFloatAbbrev = target_util.compilerRtFloatAbbrev; const compilerRtIntAbbrev = target_util.compilerRtIntAbbrev; -pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features { +pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features { return comptime &.initMany(&.{ .expand_intcast_safe, .expand_add_safe, diff --git a/src/codegen/c.zig b/src/codegen/c.zig @@ -4,6 +4,7 @@ const assert = std.debug.assert; const mem = std.mem; const log = std.log.scoped(.c); +const dev = @import("../dev.zig"); const link = @import("../link.zig"); const Zcu = @import("../Zcu.zig"); const Module = @import("../Package/Module.zig"); @@ -21,7 +22,12 @@ const BigIntLimb = std.math.big.Limb; const BigInt = std.math.big.int; pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features { - return null; + return if (dev.env.supports(.legalize)) comptime &.initMany(&.{ + .expand_intcast_safe, + .expand_add_safe, + .expand_sub_safe, + .expand_mul_safe, + }) else null; // we don't currently ask zig1 to use safe optimization modes } pub const CType = @import("c/Type.zig"); diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig @@ -28,7 +28,7 @@ const SpvAssembler = @import("spirv/Assembler.zig"); const InstMap = std.AutoHashMapUnmanaged(Air.Inst.Index, IdRef); -pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features { +pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features { return comptime &.initMany(&.{ .expand_intcast_safe, .expand_add_safe, diff --git a/src/dev.zig b/src/dev.zig @@ -1,5 +1,8 @@ pub const Env = enum { /// zig1 features + /// - `-ofmt=c` only + /// - `-OReleaseFast` or `-OReleaseSmall` only + /// - no `@setRuntimeSafety(true)` bootstrap, /// zig2 features