aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-09-30 20:32:24 +0100
committergingerBill <bill@gingerbill.org>2023-09-30 20:32:24 +0100
commitf9c6f6856bf23cc10b9344d2741943077bbb8036 (patch)
treeb2cc65ece0734335634f959a0e92c2a47f1bdc88
parentb9cc2606f201f45f88bffd1b2e62834b98cc5137 (diff)
Fix #2261
-rw-r--r--src/llvm_backend_expr.cpp11
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);
}