星期四, 十一月 22, 2007

gcc优化bug

#include <stdio.h>

int main () {
    int i=2;
    printf("%d\n", (-10) * abs((i-1)) );
}

这个代码在我的Linux下的gcc 4.1版本下居然居然。。。居然 输出 10,我晕了还是gcc晕了。。。。

搬出google,告诉我 这是一个优化的bug(为abs所做的优化),在编译时加上 -fno-builtin 可以禁止这个优化(gcc -fno-builtin a.c),就避免了这个bug,试了一下,果然灵验。

不过想想还是有些心惊,这是编译器啊,如果把一个系统比作大厦的话,这可是地基啊,怎么能有这个大的漏洞。。。。寒!

0 Comments:

发表评论

<< Home