Я нашел ошибку в компиляторе Android NDK (r16b).Фрагмент кода показан ниже:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int frameWidth = 208;
int main(int argc, char* argv[])
{
int32_t count = (argc > 1) ? atoi(argv[1]) : -1;
int width = frameWidth;
int rows = count / (width * sizeof(int16_t));
if (rows >= 3) {
printf("rows=%u\n", rows);
} else {
printf("count=%d rows=%d\n", count, rows);
}
}
Проблема в том, что компилятор gcc / llvm рассматривает деление как беззнаковое деление.Вы можете убедиться в этом, скомпилировав код в исполняемый файл cmdline и запустив его без аргументов или отрицательного числа, и / или сгенерировав код сборки и посмотрев на источник arm:
@DEBUG_VALUE: main:count <- %R4
.loc 1 11 22 is_stmt 0 @ ./main.c:11:22
mov r0, r4
.Ltmp8:
bl __aeabi_uidiv
mov r2, r0
.Ltmp9:
@DEBUG_VALUE: main:rows <- %R2
.loc 1 12 9 is_stmt 1 @ ./main.c:12:9
cmp r2, #3
blt .LBB0_5
Где я могу сообщить об этой ошибкетак это можно починить?Я могу представить, что в нашем коде есть другие места, где ожидается разделение со знаком.