diff options
| author | gingerBill <bill@gingerbill.org> | 2023-09-30 20:32:24 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-09-30 20:32:24 +0100 |
| commit | f9c6f6856bf23cc10b9344d2741943077bbb8036 (patch) | |
| tree | b2cc65ece0734335634f959a0e92c2a47f1bdc88 /src/llvm_backend_expr.cpp | |
| parent | b9cc2606f201f45f88bffd1b2e62834b98cc5137 (diff) | |
Fix #2261
Diffstat (limited to 'src/llvm_backend_expr.cpp')
| -rw-r--r-- | src/llvm_backend_expr.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 1bf7ff3c0..bde975d96 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -3513,8 +3513,15 @@ gb_internal lbAddr lb_build_addr_from_entity(lbProcedure *p, Entity *e, Ast *exp if (e->kind == Entity_Constant) { Type *t = default_type(type_of_expr(expr)); lbValue v = lb_const_value(p->module, t, e->Constant.value); - lbAddr g = lb_add_global_generated(p->module, t, v); - return g; + if (LLVMIsConstant(v.value)) { + lbAddr g = lb_add_global_generated(p->module, t, v); + return g; + } + GB_ASSERT(LLVMIsALoadInst(v.value)); + lbValue ptr = {}; + ptr.value = LLVMGetOperand(v.value, 0); + ptr.type = alloc_type_pointer(t); + return lb_addr(ptr); } |