Перетаскиваю код с x86/x64 на ARM64, собирая toolset'ом от VS 2019 (14.29.30140). Там, где на писюковых процессорах все идеально, на ARM64 (под QEMU 7.2.0) падает на внутренней отладочной проверке фактической разрядности значения (служебная функция CRT RTC_Check_4_to_1). В этом месте постфиксный ++ применяется к байтовой (unsigned char) переменной, имеющей значение 0xFF:
; 2297 : Buf [i] = WData++;
ldr w8,[sp,#0x58]
uxtw x9,w8
mov x8,#1
mul x9,x9,x8
ldr x8,[sp,#0x18]
add x9,x8,x9
ldrb w8,[sp,#0x49]
strb w8,[x9]
ldrb w8,[sp,#0x49]
add w0,w8,#1
mov w0,w0
bl _RTC_Check_4_to_1
uxtb w8,w0
mov w8,w8
mov w8,w8
strb w8,[sp,#0x49]
Перед вызовом RTC_Check_4_to_1 w0/x0 имеют значение 0x100.
Компилятор делает неправильный код (по идее, должно быть явное обрезание после инкремента)? Или такое поведение возможно на некоторых архитектурах при применении ++ к байтовой переменной?