不知道是不是gcc的bug?
如下的例子:
main()
{
long long int a;
double b;
a=4607182418800017408;
b=*(double *)&a;
printf("%f\n",b);
}
在x86 64/linux上使用gcc4.1.2编译,O0优化时的结果是1.000000,O3优化时的结果是0.000000。
看了一下汇编,发现在O3的时候好像优化有点问题,必须加上选项-fno-strict-aliasing结果才能正确。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
还有一个Bug???
如下的例子:
1.f:
subroutine aaa(a,nla,nlo)
include "1.h"
nlo=nlo-1
end
1.h:
interface
subroutine aaa(a1,nla1,nlo1)
end
end interface
在x86 64/linux下使用gfortran(gcc4.1.2版本)编译,报错:
internal compiler error: Segmentation fault
4.3.2 x64,O0和O1都是1.000000,O2和O3都是0.000000。
b=*(double *)&a;
这一句的别名分析出问题了。
gfortran不知道,不知道最新svn上的代码解决这个问题没有,lz可以去报告,或者直接patch。
没有遇到,是不是你的svn代码问题
你的gcc是x86的还是x86_64的?
我是在x86_64的