diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 316b29734ac2ead682908f0e2b59a4f059ea50a5..8a40c61cdc3e1aca3ffdb79fb583e482a29d553f 100644 --- 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 index 0704557cbbdb0901a57889415df9a22a61281e6d..36908eb236aca131ba7bec2aec05014eb5193027 100644 --- 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 index e76c8e069d14e4fff9c591fc876797664b20c2a6..8d947ce56a6b1486977cd08c01f89965a580efda 100644 --- 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 index e23ffbf66aaaafb2fa017b6a4e33a09b927dbc26..1381a7907508bdcccfb3c7bc7f87827918a837d8 100644 --- 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 index 019f18daeb447003ef6deac1f8d10921b12e8987..1dc8264ebc2c74ad670a016da0087a8ccc77e2a5 100644 --- 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