aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-05-07 13:21:53 -0400
committerAndrew Kelley <superjoe30@gmail.com>2017-05-07 13:21:53 -0400
commit11d8a8cc7b6984f2c79923a5e3f763003f2b558f (patch)
tree20151d02f9d0157abefa0e006dff282af5f64a1d /src/ir.cpp
parent818a0a26291cf456cfaa955401b1aa8219737d6c (diff)
downloadzig-11d8a8cc7b6984f2c79923a5e3f763003f2b558f.tar.gz
zig-11d8a8cc7b6984f2c79923a5e3f763003f2b558f.zip
fix comptime switch on enum with ref payload
See #43
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 6f8322c9d9..f5ced359ba 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -11202,15 +11202,11 @@ static TypeTableEntry *ir_analyze_instruction_switch_var(IrAnalyze *ira, IrInstr
return ira->codegen->builtin_types.entry_invalid;
ConstExprValue *pointee_val = const_ptr_pointee(ira->codegen, target_val_ptr);
- if (pointee_val->type->id == TypeTableEntryIdEnum) {
- ConstExprValue *out_val = ir_build_const_from(ira, &instruction->base);
- out_val->data.x_ptr.special = ConstPtrSpecialRef;
- out_val->data.x_ptr.data.ref.pointee = pointee_val->data.x_enum.payload;
- return get_pointer_to_type(ira->codegen, pointee_val->type,
- target_value_ptr->value.type->data.pointer.is_const);
- } else {
- zig_panic("TODO comptime switch var");
- }
+ ConstExprValue *out_val = ir_build_const_from(ira, &instruction->base);
+ out_val->data.x_ptr.special = ConstPtrSpecialRef;
+ out_val->data.x_ptr.mut = target_val_ptr->data.x_ptr.mut;
+ out_val->data.x_ptr.data.ref.pointee = pointee_val->data.x_enum.payload;
+ return get_pointer_to_type(ira->codegen, field->type_entry, target_val_ptr->type->data.pointer.is_const);
}
ir_build_enum_field_ptr_from(&ira->new_irb, &instruction->base, target_value_ptr, field);