gpt4 book ai didi

gcc - 这是 GCC 中的错误还是我的代码错误?

转载 作者:行者123 更新时间:2023-12-04 12:43:29 25 4
gpt4 key购买 nike

我有这个 C 代码:

int test(signed char anim_col)
{
if (anim_col >= 31) {
return 1;
} else if (anim_col <= -15) {
return -2;
}
return 0;
}

使用 Android NDK r4b 使用 -Os -mthumb 编译为以下拇指代码:
test:
mov r3, #1
cmp r0, #30
bgt .L3
mov r3, #0
add r0, r0, #14
bge .L3
mov r3, #2
neg r3, r3
.L3:
mov r0, r3
bx lr

但是用最新的 Android NDK r5它编译为这个损坏的代码:
test:
mov r3, #1
cmp r0, #30
bgt .L3
lsl r0, r0, #24
lsr r0, r0, #24
mov r3, #0
cmp r0, #127 @@ WTF?! should be <= -15 @@
bls .L3
mov r3, #2
neg r3, r3
.L3:
mov r0, r3
bx lr

这似乎……很奇怪。如果 anim_col 小于 0,它将返回 -2 而不是仅在小于或等于 -15 时返回 -2。重现这一点的完整命令行如下:

android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -c -o test.o -Os test.c --save-temps -mthumb



android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -c -o test.o -Os test.c --save-temps -拇指

这是一个已知的 GCC 错误吗?我觉得很难相信,这在现实生活中不会发生!我的代码肯定是错误的?!

最佳答案

It's a GCC bug!

截至 NDK r5b ,此错误已修复。

This release of the NDK does not include any new features compared to r5. The r5b release addresses the following problems in the r5 release:

  • Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain. The previous binary generated invalid thumb instruction sequences when dealing with signed chars.

关于gcc - 这是 GCC 中的错误还是我的代码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com