aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-29 16:36:05 +0100
committergingerBill <bill@gingerbill.org>2021-09-29 16:36:05 +0100
commitf99bea12c7fc0138547785a70d5c2f2878b18922 (patch)
treedbeca3b9326982be94f14d537340cf87e6d42ff9 /src/llvm_backend_expr.cpp
parent19ac822e4a8ced676528d9867e211f96e0d1b454 (diff)
Allow `uintptr` <-> `[^]T`
Diffstat (limited to 'src/llvm_backend_expr.cpp')
-rw-r--r--src/llvm_backend_expr.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index de9acf0ed..3056952f6 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -1272,6 +1272,18 @@ lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
res.value = LLVMBuildIntToPtr(p->builder, value.value, lb_type(m, t), "");
return res;
}
+ if (is_type_multi_pointer(src) && is_type_uintptr(dst)) {
+ lbValue res = {};
+ res.type = t;
+ res.value = LLVMBuildPtrToInt(p->builder, value.value, lb_type(m, t), "");
+ return res;
+ }
+ if (is_type_uintptr(src) && is_type_multi_pointer(dst)) {
+ lbValue res = {};
+ res.type = t;
+ res.value = LLVMBuildIntToPtr(p->builder, value.value, lb_type(m, t), "");
+ return res;
+ }
#if 1
if (is_type_union(dst)) {