Introducing int_to_ptr expr.

This commit is contained in:
Christoffer Lerno
2025-01-05 15:26:20 +01:00
parent 4d641d193c
commit 218f293cd4
11 changed files with 32 additions and 17 deletions

View File

@@ -1481,12 +1481,6 @@ void llvm_emit_cast(GenContext *c, CastKind cast_kind, Expr *expr, BEValue *valu
? LLVMBuildFPTrunc(c->builder, value->value, llvm_get_type(c, to_type), "fpfptrunc")
: LLVMBuildFPExt(c->builder, value->value, llvm_get_type(c, to_type), "fpfpext");
break;
case CAST_IDPTR:
case CAST_ERPTR:
case CAST_INTPTR:
llvm_value_rvalue(c, value);
value->value = LLVMBuildIntToPtr(c->builder, value->value, llvm_get_type(c, to_type), "intptr");
break;
case CAST_INTENUM:
if (safe_mode_enabled() && c->builder != c->global_builder)
{
@@ -7294,6 +7288,11 @@ void llvm_emit_expr(GenContext *c, BEValue *value, Expr *expr)
llvm_value_set(value, NULL, type_void);
llvm_emit_ignored_expr(c, expr->inner_expr);
return;
case EXPR_INT_TO_PTR:
llvm_emit_expr(c, value, expr->inner_expr);
llvm_value_rvalue(c, value);
llvm_value_set(value, LLVMBuildIntToPtr(c->builder, value->value, llvm_get_type(c, expr->type), "intptr"), expr->type);
return;
case EXPR_ADDR_CONVERSION:
llvm_emit_expr(c, value, expr->inner_expr);
llvm_value_addr(c, value);