diff --git a/lib/std/zig/system.zig b/lib/std/zig/system.zig index 6ab26aab14edb82113a7b9cd8f165e5a23df3cfb..5f9a5c68fe52aa4a9bed491c81adf4edfa12c149 100644 --- a/lib/std/zig/system.zig +++ b/lib/std/zig/system.zig @@ -375,15 +375,13 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target { var cpu = switch (query.cpu_model) { .native => detectNativeCpuAndFeatures(io, query_cpu_arch), - .baseline => Target.Cpu.baseline(query_cpu_arch, os), + .baseline => null, .determined_by_arch_os => if (query.cpu_arch == null) detectNativeCpuAndFeatures(io, query_cpu_arch) else - Target.Cpu.baseline(query_cpu_arch, os), + null, .explicit => |model| model.toCpu(query_cpu_arch), - } orelse backup_cpu_detection: { - break :backup_cpu_detection Target.Cpu.baseline(query_cpu_arch, os); - }; + } orelse Target.Cpu.baseline(query_cpu_arch, os); // For x86, we need to populate some CPU feature flags depending on architecture // and mode: @@ -536,12 +534,11 @@ fn updateCpuFeatures( } fn detectNativeCpuAndFeatures(io: Io, cpu_arch: Target.Cpu.Arch) ?Target.Cpu { - // Here we switch on a comptime value rather than `cpu_arch`. This is valid because `cpu_arch`, - // although it is a runtime value, is guaranteed to be one of the architectures in the set - // of the respective switch prong. - switch (builtin.cpu.arch) { - .loongarch32, .loongarch64 => return @import("system/loongarch.zig").detectNativeCpuAndFeatures(cpu_arch), - .x86_64, .x86 => return @import("system/x86.zig").detectNativeCpuAndFeatures(cpu_arch), + const family = builtin.target.cpu.arch.family(); + assert(cpu_arch.family() == family); + switch (family) { + .loongarch => return @import("system/loongarch.zig").detectNativeCpuAndFeatures(cpu_arch), + .x86 => return @import("system/x86.zig").detectNativeCpuAndFeatures(cpu_arch), else => {}, }