zig

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

commit a07d7ee53d7695b7ca56ced0a4ba25de2532ccbc (tree)
parent c64f9991d561ff9a8e3c4575e8149404784497d3
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Sat, 17 Dec 2016 17:57:26 -0500

IR: fix compile time switch eval for enums

Diffstat:
Msrc/ir.cpp | 8+++++++-
Mstd/linux.zig | 4++--
2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -7635,7 +7635,7 @@ static TypeTableEntry *ir_analyze_instruction_switch_br(IrAnalyze *ira, size_t case_count = switch_br_instruction->case_count; bool is_inline = ir_should_inline(&ira->new_irb) || switch_br_instruction->is_inline; - if (is_inline || target_value->static_value.special != ConstValSpecialRuntime) { + if (is_inline || instr_is_comptime(target_value)) { ConstExprValue *target_val = ir_resolve_const(ira, target_value); if (!target_val) return ir_unreach_error(ira); @@ -7646,6 +7646,12 @@ static TypeTableEntry *ir_analyze_instruction_switch_br(IrAnalyze *ira, if (case_value->type_entry->id == TypeTableEntryIdInvalid) return ir_unreach_error(ira); + if (case_value->type_entry->id == TypeTableEntryIdEnum) { + case_value = ir_analyze_enum_tag(ira, &switch_br_instruction->base, case_value); + if (case_value->type_entry->id == TypeTableEntryIdInvalid) + return ir_unreach_error(ira); + } + IrInstruction *casted_case_value = ir_implicit_cast(ira, case_value, target_value->type_entry); if (casted_case_value->type_entry->id == TypeTableEntryIdInvalid) return ir_unreach_error(ira); diff --git a/std/linux.zig b/std/linux.zig @@ -1,6 +1,6 @@ const arch = switch (@compileVar("arch")) { - x86_64 => @import("linux_x86_64.zig"), - i386 => @import("linux_i386.zig"), + Arch.x86_64 => @import("linux_x86_64.zig"), + Arch.i386 => @import("linux_i386.zig"), else => @compileError("unsupported arch"), }; const errno = @import("errno.zig");