不知道是不是gcc的bug?

发布于 2022-09-23 13:21:46 字数 370 浏览 15 评论 0

如下的例子:
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

三寸金莲 2022-09-30 13:21:46

还有一个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

夏末的微笑 2022-09-30 13:21:46

4.3.2 x64,O0和O1都是1.000000,O2和O3都是0.000000。
   b=*(double *)&a;
这一句的别名分析出问题了。

gfortran不知道,不知道最新svn上的代码解决这个问题没有,lz可以去报告,或者直接patch。

囚我心虐我身 2022-09-30 13:21:46

没有遇到,是不是你的svn代码问题

时光病人 2022-09-30 13:21:46

原帖由 kns1024wh 于 2008-12-19 10:36 发表
没有遇到,是不是你的svn代码问题

你的gcc是x86的还是x86_64的?

晌融 2022-09-30 13:21:46

我是在x86_64的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文