about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBaitinq <[email protected]>2025-04-02 22:37:48 +0200
committerBaitinq <[email protected]>2025-04-02 23:27:47 +0200
commit05eff82d55c817ed30f38fa2a4e00dc87b299a21 (patch)
tree072c0eb881a9f49ee796f53786345c88be33f342
parentFeature: Start adding support for assigning to pointers with arithmetic (diff)
downloadpry-lang-05eff82d55c817ed30f38fa2a4e00dc87b299a21.tar.gz
pry-lang-05eff82d55c817ed30f38fa2a4e00dc87b299a21.tar.bz2
pry-lang-05eff82d55c817ed30f38fa2a4e00dc87b299a21.zip
Codegen: Fix GEP type
-rw-r--r--examples/18.src2
-rw-r--r--src/codegen.zig3
2 files changed, 2 insertions, 3 deletions
diff --git a/examples/18.src b/examples/18.src
index 6d75e30..c050f8c 100644
--- a/examples/18.src
+++ b/examples/18.src
@@ -3,7 +3,7 @@ extern malloc = (i64) => *i64;
 extern free = (*i64) => void;
 
 let main = () => i64 {
-	let x = malloc(128);
+	let x = malloc(24);
 	(*(x+0)) = 10;
 	(*(x+1)) = 20;
 	(*(x+2)) = 40;
diff --git a/src/codegen.zig b/src/codegen.zig
index d6b3e98..77f5ea3 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -430,8 +430,7 @@ pub const CodeGen = struct {
                 var result: llvm.LLVMValueRef = undefined;
                 if (exp.addition) {
                     if (llvm.LLVMGetTypeKind(lhs_value.type.?) == llvm.LLVMPointerTypeKind) {
-                        const indices = [_]llvm.LLVMValueRef{rhs_value.value};
-                        result = llvm.LLVMBuildGEP2(self.builder, llvm.LLVMInt8Type(), lhs_value.value, @constCast(&indices), indices.len, "");
+                        result = llvm.LLVMBuildGEP2(self.builder, rhs_value.type, lhs_value.value, @constCast(&[_]llvm.LLVMValueRef{rhs_value.value}), 1, "");
                     } else {
                         result = llvm.LLVMBuildAdd(self.builder, lhs_value.value, rhs_value.value, "") orelse return CodeGenError.CompilationError;
                     }