aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_stmt.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-12-30 12:58:37 +0000
committergingerBill <gingerBill@users.noreply.github.com>2025-12-30 12:58:37 +0000
commitf1c6c52c215c8087a4fb82b68dcf03741cb8821b (patch)
tree60a669901415e1bed91acea7f64b5bb81ce283c9 /src/llvm_backend_stmt.cpp
parent39fa1b72015d25e738c6228b438e965cff7eef72 (diff)
Fix `@(static, rodata)` for slices
Diffstat (limited to 'src/llvm_backend_stmt.cpp')
-rw-r--r--src/llvm_backend_stmt.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp
index 90b9c0204..b3b5f4251 100644
--- a/src/llvm_backend_stmt.cpp
+++ b/src/llvm_backend_stmt.cpp
@@ -1745,7 +1745,6 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope *
} else {
ExactValue value = expr->tav.value;
if (is_type_rune(expr->tav.type) && value.kind == ExactValue_Integer) {
-
Rune r = cast(Rune)exact_value_to_i64(value);
u8 rune_temp[6] = {};
isize size = gb_utf8_encode_rune(rune_temp, r);
@@ -2170,14 +2169,7 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss
gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) {
for_array(i, vd->names) {
lbValue value = {};
- if (vd->values.count > 0) {
- GB_ASSERT(vd->names.count == vd->values.count);
- Ast *ast_value = vd->values[i];
- GB_ASSERT(ast_value->tav.mode == Addressing_Constant ||
- ast_value->tav.mode == Addressing_Invalid);
- value = lb_const_value(p->module, ast_value->tav.type, ast_value->tav.value, LB_CONST_CONTEXT_DEFAULT_NO_LOCAL);
- }
Ast *ident = vd->names[i];
GB_ASSERT(!is_blank_ident(ident));
@@ -2185,6 +2177,19 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) {
GB_ASSERT(e->flags & EntityFlag_Static);
String name = e->token.string;
+ if (vd->values.count > 0) {
+ GB_ASSERT(vd->names.count == vd->values.count);
+ Ast *ast_value = vd->values[i];
+ GB_ASSERT(ast_value->tav.mode == Addressing_Constant ||
+ ast_value->tav.mode == Addressing_Invalid);
+
+ auto cc = LB_CONST_CONTEXT_DEFAULT_NO_LOCAL;
+ if (e->Variable.is_rodata) {
+ cc.is_rodata = true;
+ }
+ value = lb_const_value(p->module, ast_value->tav.type, ast_value->tav.value, cc);
+ }
+
String mangled_name = {};
{
gbString str = gb_string_make_length(permanent_allocator(), p->name.text, p->name.len);