aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-29 13:51:57 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-29 13:51:57 +0100
commit3230699c9714ab4658e09e88719abf6b0e3c48d7 (patch)
treef6a7eb06594906e7f1bcb48ee7f76efbfd661f3d /src/main/java
parent3703fd741f19ca15d6dafb5dcd11f773d3b5f450 (diff)
Fix type of exit code in LLVM backend
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
index d0f23f57..69f6a710 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
@@ -6,6 +6,7 @@ import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition;
import org.shedlang.compiler.backends.llvm.ir.ast.LlvmModule;
import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall;
import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTrunc;
import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableGlobal;
import org.shedlang.compiler.backends.llvm.ir.ast.operands.LlvmVariableLocal;
import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypes;
@@ -75,13 +76,18 @@ public class LlvmBackend implements Backend {
List.of(
new LlvmCall(
new LlvmVariableLocal("exitCode"),
- // TODO: the main function returns INT_64
- LlvmTypes.INT_32,
+ LlvmTypes.INT_64,
new LlvmVariableGlobal(mainFunctionName),
List.of()
+ ),
+ new LlvmTrunc(
+ new LlvmVariableLocal("exitCode32"),
+ LlvmTypes.INT_64,
+ new LlvmVariableLocal("exitCode"),
+ LlvmTypes.INT_32
)
),
- new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode"))
+ new LlvmReturn(LlvmTypes.INT_32, new LlvmVariableLocal("exitCode32"))
)
)
));