diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-09-03 14:51:34 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-09-03 14:51:34 -0400 |
| commit | be17a4b6c1be11eb4b75db1972a38fc50875ebed (patch) | |
| tree | ddb2dd8fce64440288d58af58873ba50f818f5d8 /src | |
| parent | e673d865fb2dfa6588505d572765ea8c5b4470ee (diff) | |
| download | zig-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.cpp | 7 |
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, ""); } |
