Incorrectly removed %=. Now restored with tests.

This commit is contained in:
Christoffer Lerno
2021-03-17 19:39:55 +01:00
parent 07595df412
commit 1bc4400246
2 changed files with 69 additions and 0 deletions

View File

@@ -192,6 +192,7 @@ BinaryOp binary_op[TOKEN_LAST + 1] = {
[TOKEN_PLUS_ASSIGN] = BINARYOP_ADD_ASSIGN, [TOKEN_PLUS_ASSIGN] = BINARYOP_ADD_ASSIGN,
[TOKEN_MINUS_ASSIGN] = BINARYOP_SUB_ASSIGN, [TOKEN_MINUS_ASSIGN] = BINARYOP_SUB_ASSIGN,
[TOKEN_DIV_ASSIGN] = BINARYOP_DIV_ASSIGN, [TOKEN_DIV_ASSIGN] = BINARYOP_DIV_ASSIGN,
[TOKEN_MOD_ASSIGN] = BINARYOP_MOD_ASSIGN,
[TOKEN_BIT_AND_ASSIGN] = BINARYOP_BIT_AND_ASSIGN, [TOKEN_BIT_AND_ASSIGN] = BINARYOP_BIT_AND_ASSIGN,
[TOKEN_BIT_OR_ASSIGN] = BINARYOP_BIT_OR_ASSIGN, [TOKEN_BIT_OR_ASSIGN] = BINARYOP_BIT_OR_ASSIGN,
[TOKEN_BIT_XOR_ASSIGN] = BINARYOP_BIT_XOR_ASSIGN, [TOKEN_BIT_XOR_ASSIGN] = BINARYOP_BIT_XOR_ASSIGN,
@@ -205,6 +206,7 @@ static BinaryOp assign_binop[BINARYOP_LAST + 1] = {
[BINARYOP_ADD_ASSIGN] = BINARYOP_ADD, [BINARYOP_ADD_ASSIGN] = BINARYOP_ADD,
[BINARYOP_SUB_ASSIGN] = BINARYOP_SUB, [BINARYOP_SUB_ASSIGN] = BINARYOP_SUB,
[BINARYOP_DIV_ASSIGN] = BINARYOP_DIV, [BINARYOP_DIV_ASSIGN] = BINARYOP_DIV,
[BINARYOP_MOD_ASSIGN] = BINARYOP_MOD,
[BINARYOP_BIT_AND_ASSIGN] = BINARYOP_BIT_AND, [BINARYOP_BIT_AND_ASSIGN] = BINARYOP_BIT_AND,
[BINARYOP_BIT_OR_ASSIGN] = BINARYOP_BIT_OR, [BINARYOP_BIT_OR_ASSIGN] = BINARYOP_BIT_OR,
[BINARYOP_BIT_XOR_ASSIGN] = BINARYOP_BIT_XOR, [BINARYOP_BIT_XOR_ASSIGN] = BINARYOP_BIT_XOR,

View File

@@ -0,0 +1,67 @@
module test;
func int foo()
{
int x = 0;
int y;
x += y;
x -= y;
x %= y;
x /= y;
x *= y;
x <<= y;
x >>= y;
x ^= y;
x |= y;
x &= y;
return x;
}
// #expect: int_assign.ll
%x = alloca i32, align 4
%y = alloca i32, align 4
store i32 0, i32* %x, align 4
store i32 0, i32* %y, align 4
%0 = load i32, i32* %x, align 4
%1 = load i32, i32* %y, align 4
%add = add i32 %0, %1
store i32 %add, i32* %x, align 4
%2 = load i32, i32* %x, align 4
%3 = load i32, i32* %y, align 4
%sub = sub i32 %2, %3
store i32 %sub, i32* %x, align 4
%4 = load i32, i32* %x, align 4
%5 = load i32, i32* %y, align 4
%smod = srem i32 %4, %5
store i32 %smod, i32* %x, align 4
%6 = load i32, i32* %x, align 4
%7 = load i32, i32* %y, align 4
%sdiv = sdiv i32 %6, %7
store i32 %sdiv, i32* %x, align 4
%8 = load i32, i32* %x, align 4
%9 = load i32, i32* %y, align 4
%mul = mul i32 %8, %9
store i32 %mul, i32* %x, align 4
%10 = load i32, i32* %x, align 4
%11 = load i32, i32* %y, align 4
%shl = shl i32 %10, %11
store i32 %shl, i32* %x, align 4
%12 = load i32, i32* %x, align 4
%13 = load i32, i32* %y, align 4
%ashr = ashr i32 %12, %13
store i32 %ashr, i32* %x, align 4
%14 = load i32, i32* %x, align 4
%15 = load i32, i32* %y, align 4
%xor = xor i32 %14, %15
store i32 %xor, i32* %x, align 4
%16 = load i32, i32* %x, align 4
%17 = load i32, i32* %y, align 4
%or = or i32 %16, %17
store i32 %or, i32* %x, align 4
%18 = load i32, i32* %x, align 4
%19 = load i32, i32* %y, align 4
%and = and i32 %18, %19
store i32 %and, i32* %x, align 4
%20 = load i32, i32* %x, align 4