aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-05-07 15:28:09 +0100
committergingerBill <bill@gingerbill.org>2024-05-07 15:28:09 +0100
commitde5ce90fa70c8ae4b859b50704dd0ffacbeedb1e (patch)
tree292faf47b5bac37cc1f7c3f692b0f5168be826a3 /src/llvm_backend_general.cpp
parent3f7a369aa1ff90ec1c71e6b4805778d4899790a5 (diff)
Add metadata to packed structs field accesses to state it is packed
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 15cbb7c71..22ffbd89c 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -1107,6 +1107,12 @@ gb_internal lbValue lb_emit_load(lbProcedure *p, lbValue value) {
GB_ASSERT(is_type_pointer(value.type));
Type *t = type_deref(value.type);
LLVMValueRef v = LLVMBuildLoad2(p->builder, lb_type(p->module, t), value.value, "");
+
+ u64 is_packed = lb_get_metadata_custom_u64(p->module, v, ODIN_METADATA_IS_PACKED);
+ if (is_packed != 0) {
+ LLVMSetAlignment(v, 1);
+ }
+
return lbValue{v, t};
}