According to the C standard the arithmetic conversion takes place for other arithmetic operators as well. It means that the compiler should insert explicit type conversions for all the types except for INTEGER/NATURAL/REAL_32/64. For other types it cannot use increment/decrement operators and compound assignments that combine an arithmetic operation with an assignment into one operation. I believe this can be fixed by checking the type of the expression in {ASSIGN_BL}.analyze_simple_assignment.