aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorFranz Höltermann <Francis_the_cat@gmx.de>2024-06-11 09:37:20 +0200
committerFranz Höltermann <Francis_the_cat@gmx.de>2024-06-11 09:37:20 +0200
commitc6c00c706aab0a08a4b8d09df2b7e01835ee777f (patch)
treec569b61373e907d7eccb90f3650a3eadd2d6e607 /src/llvm_backend.cpp
parent6454c6f0879add3ed018065eff073a75d45229b0 (diff)
parentf1779c85dedb8bb309a9afa8cfa7e35ad727d237 (diff)
Merge branch 'master' of https://github.com/odin-lang/Odin
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 03c17a8bb..5dc6d94d5 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1160,6 +1160,10 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc
if (is_type_untyped_nil(init.type)) {
LLVMSetInitializer(var.var.value, LLVMConstNull(global_type));
var.is_initialized = true;
+
+ if (e->Variable.is_rodata) {
+ LLVMSetGlobalConstant(var.var.value, true);
+ }
continue;
}
GB_PANIC("Invalid init value, got %s", expr_to_string(init_expr));
@@ -1174,6 +1178,10 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc
}
LLVMSetInitializer(var.var.value, init.value);
var.is_initialized = true;
+
+ if (e->Variable.is_rodata) {
+ LLVMSetGlobalConstant(var.var.value, true);
+ }
continue;
}
} else {
@@ -1206,8 +1214,9 @@ gb_internal lbProcedure *lb_create_startup_runtime(lbModule *main_module, lbProc
var.is_initialized = true;
}
+
+
}
-
CheckerInfo *info = main_module->gen->info;
for (Entity *e : info->init_procedures) {
@@ -3210,14 +3219,21 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
lbValue init = lb_const_value(m, tav.type, v);
LLVMSetInitializer(g.value, init.value);
var.is_initialized = true;
+ if (e->kind == Entity_Variable && e->Variable.is_rodata) {
+ LLVMSetGlobalConstant(g.value, true);
+ }
}
}
}
if (!var.is_initialized && is_type_untyped_nil(tav.type)) {
var.is_initialized = true;
+ if (e->kind == Entity_Variable && e->Variable.is_rodata) {
+ LLVMSetGlobalConstant(g.value, true);
+ }
}
+ } else if (e->kind == Entity_Variable && e->Variable.is_rodata) {
+ LLVMSetGlobalConstant(g.value, true);
}
-
array_add(&global_variables, var);
lb_add_entity(m, e, g);