aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-05-31 20:58:28 +0100
committergingerBill <bill@gingerbill.org>2021-05-31 20:58:28 +0100
commit2573da12fc3e299be3f983474347628ddd3076dc (patch)
tree4134bd34c0f2acfc02a49880532c23021fecd690 /src/llvm_backend.cpp
parentbbc9c6a93c655a8bfef67c0f571134274c63580e (diff)
Fix #992
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 687423c63..eb38aa519 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -14283,7 +14283,9 @@ lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProcedure *start
LLVMValueKind value_kind = LLVMGetValueKind(init.value);
// gb_printf_err("%s %d\n", LLVMPrintValueToString(init.value));
- if (lb_is_const_or_global(init)) {
+ if (is_type_any(e->type) || is_type_union(e->type)) {
+ var->init = init;
+ } else if (lb_is_const_or_global(init)) {
if (!var->is_initialized) {
LLVMSetInitializer(var->var.value, init.value);
var->is_initialized = true;
@@ -14967,7 +14969,7 @@ void lb_generate_code(lbGenerator *gen) {
if (decl->init_expr != nullptr) {
TypeAndValue tav = type_and_value_of_expr(decl->init_expr);
- if (!is_type_any(e->type)) {
+ if (!is_type_any(e->type) && !is_type_union(e->type)) {
if (tav.mode != Addressing_Invalid) {
if (tav.value.kind != ExactValue_Invalid) {
ExactValue v = tav.value;