authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-09-17 07:47:23+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-09-17 15:27:52+02:00
log4d1c5d698fffe9684b72bcd72d60dfd758eb0ccd
treea07564106cf49745876b6e6ab06786ed50631882
parentedad096b772d58bc39d227b0ba4d13b641ca99e6
signature Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.zig.system: turn an assumption in detectNativeCpuAndFeatures() into an assert


1 files changed, 8 insertions(+), 11 deletions(-)

lib/std/zig/system.zig+8-11
...@@ -375,15 +375,13 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target {...@@ -375,15 +375,13 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target {
375375
376 var cpu = switch (query.cpu_model) {376 var cpu = switch (query.cpu_model) {
377 .native => detectNativeCpuAndFeatures(io, query_cpu_arch),377 .native => detectNativeCpuAndFeatures(io, query_cpu_arch),
378 .baseline => Target.Cpu.baseline(query_cpu_arch, os),378 .baseline => null,
379 .determined_by_arch_os => if (query.cpu_arch == null)379 .determined_by_arch_os => if (query.cpu_arch == null)
380 detectNativeCpuAndFeatures(io, query_cpu_arch)380 detectNativeCpuAndFeatures(io, query_cpu_arch)
381 else381 else
382 Target.Cpu.baseline(query_cpu_arch, os),382 null,
383 .explicit => |model| model.toCpu(query_cpu_arch),383 .explicit => |model| model.toCpu(query_cpu_arch),
384 } orelse backup_cpu_detection: {384 } orelse Target.Cpu.baseline(query_cpu_arch, os);
385 break :backup_cpu_detection Target.Cpu.baseline(query_cpu_arch, os);
386 };
387385
388 // For x86, we need to populate some CPU feature flags depending on architecture386 // For x86, we need to populate some CPU feature flags depending on architecture
389 // and mode:387 // and mode:
...@@ -536,12 +534,11 @@ fn updateCpuFeatures(...@@ -536,12 +534,11 @@ fn updateCpuFeatures(
536}534}
537535
538fn detectNativeCpuAndFeatures(io: Io, cpu_arch: Target.Cpu.Arch) ?Target.Cpu {536fn detectNativeCpuAndFeatures(io: Io, cpu_arch: Target.Cpu.Arch) ?Target.Cpu {
539 // Here we switch on a comptime value rather than `cpu_arch`. This is valid because `cpu_arch`,537 const family = builtin.target.cpu.arch.family();
540 // although it is a runtime value, is guaranteed to be one of the architectures in the set538 assert(cpu_arch.family() == family);
541 // of the respective switch prong.539 switch (family) {
542 switch (builtin.cpu.arch) {540 .loongarch => return @import("system/loongarch.zig").detectNativeCpuAndFeatures(cpu_arch),
543 .loongarch32, .loongarch64 => return @import("system/loongarch.zig").detectNativeCpuAndFeatures(cpu_arch),541 .x86 => return @import("system/x86.zig").detectNativeCpuAndFeatures(cpu_arch),
544 .x86_64, .x86 => return @import("system/x86.zig").detectNativeCpuAndFeatures(cpu_arch),
545 else => {},542 else => {},
546 }543 }
547544