From 7d9a9a2283c6c0cbd1e1034b2496d4898335beb0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 12 Jan 2020 13:53:51 +0000 Subject: [PATCH] Add extra check for opaque types --- src/ir.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ir.cpp b/src/ir.cpp index 2de2b2669..8af0b85bd 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -4713,6 +4713,10 @@ irValue *ir_emit_struct_ep(irProcedure *proc, irValue *s, i32 index) { Type *t = base_type(type_deref(ir_type(s))); Type *result_type = nullptr; + if (t->kind == Type_Opaque) { + t = t->Opaque.elem; + } + if (is_type_struct(t)) { result_type = alloc_type_pointer(t->Struct.fields[index]->type); } else if (is_type_union(t)) { @@ -4896,6 +4900,9 @@ irValue *ir_emit_deep_field_gep(irProcedure *proc, irValue *e, Selection sel) { // e = ir_emit_ptr_offset(proc, e, v_zero); // TODO(bill): Do I need these copies? } type = core_type(type); + if (type->kind == Type_Opaque) { + type = type->Opaque.elem; + } if (is_type_quaternion(type)) { e = ir_emit_struct_ep(proc, e, index);