aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-09-03 14:51:34 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-09-03 14:51:34 -0400
commitbe17a4b6c1be11eb4b75db1972a38fc50875ebed (patch)
treeddb2dd8fce64440288d58af58873ba50f818f5d8 /src
parente673d865fb2dfa6588505d572765ea8c5b4470ee (diff)
downloadzig-be17a4b6c1be11eb4b75db1972a38fc50875ebed.tar.gz
zig-be17a4b6c1be11eb4b75db1972a38fc50875ebed.zip
fix compiler crash in struct field pointers
when the llvm type has not been fully analyzed. This is a regression from lazy values.
Diffstat (limited to 'src')
-rw-r--r--src/codegen.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 293066afd5..1710a3b3fd 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -4113,6 +4113,8 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr
static LLVMValueRef ir_render_struct_field_ptr(CodeGen *g, IrExecutable *executable,
IrInstructionStructFieldPtr *instruction)
{
+ Error err;
+
if (instruction->base.value.special != ConstValSpecialRuntime)
return nullptr;
@@ -4130,6 +4132,11 @@ static LLVMValueRef ir_render_struct_field_ptr(CodeGen *g, IrExecutable *executa
return struct_ptr;
}
+ ZigType *struct_type = (struct_ptr_type->id == ZigTypeIdPointer) ?
+ struct_ptr_type->data.pointer.child_type : struct_ptr_type;
+ if ((err = type_resolve(g, struct_type, ResolveStatusLLVMFull)))
+ report_errors_and_exit(g);
+
assert(field->gen_index != SIZE_MAX);
return LLVMBuildStructGEP(g->builder, struct_ptr, (unsigned)field->gen_index, "");
}