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,试了一下,果然灵验。
不过想想还是有些心惊,这是编译器啊,如果把一个系统比作大厦的话,这可是地基啊,怎么能有这个大的漏洞。。。。寒!
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