diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-05-07 13:21:53 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-05-07 13:21:53 -0400 |
| commit | 11d8a8cc7b6984f2c79923a5e3f763003f2b558f (patch) | |
| tree | 20151d02f9d0157abefa0e006dff282af5f64a1d /src/ir.cpp | |
| parent | 818a0a26291cf456cfaa955401b1aa8219737d6c (diff) | |
| download | zig-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.cpp | 14 |
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); |
