x += 1 and x -= 1 works propertly on pointer vectors #2222.

This commit is contained in:
Christoffer Lerno
2025-06-18 17:02:56 +02:00
parent 2b97d7d59c
commit 842788e59d
7 changed files with 192 additions and 38 deletions

View File

@@ -4057,7 +4057,7 @@ void llvm_emit_binary(GenContext *c, BEValue *be_value, Expr *expr, BEValue *lhs
val = llvm_emit_pointer_gep_raw(c, llvm_get_type(c, element_type), lhs_value, rhs_value);
break;
}
else if (lhs_type->type_kind == TYPE_POINTER)
if (lhs_type->type_kind == TYPE_POINTER)
{
if (lhs_type == rhs_type)
{
@@ -4079,6 +4079,12 @@ void llvm_emit_binary(GenContext *c, BEValue *be_value, Expr *expr, BEValue *lhs
val = llvm_emit_sub_int(c, lhs_type, lhs_value, rhs_value, expr->span);
break;
case BINARYOP_ADD:
if (type_is_pointer_vector(lhs_type))
{
Type *element_type = lhs_type->array.base->pointer;
val = llvm_emit_pointer_gep_raw(c, llvm_get_type(c, element_type), lhs_value, rhs_value);
break;
}
if (lhs_type->type_kind == TYPE_POINTER)
{
ASSERT(type_is_integer(rhs_type));