【发布时间】:2012-12-08 16:08:30
【问题描述】:
我遇到了一个奇怪的仅优化错误,所以我试图确定是哪个标志导致它。 -O1 会出现错误(计算不正确),但-O0 不会。因此,我认为我可以使用所有-f flags 和-O1 includes to narrow down the culprit。但是,当我尝试这样做时(使用此列表http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html),它又可以正常工作了!
任何人都可以解释这一点,或者就寻找什么提供其他建议吗?我通过valgrind运行了代码,没有报错。
编辑
我发现-O0 的计算正确,-O1 的计算不正确,但-O1 -ffloat-store 的计算再次正确。如果没有-ffloat-store,有什么想法会导致它无法工作吗?
EDIT2
如果我使用正常的发布标志进行编译,则会出现计算错误。但是,如果我添加任何一个:
-ffloat-store
或
-mpc64
到标志列表,错误消失。
任何人都可以提出一种方法来追踪该标志产生影响的那一行,以便我可以更改它,而不是要求使用代码的每个人都使用额外的标志进行编译?
【问题讨论】:
-
scratchin beard 好吧,除了您列表中提到的“计算过的 goto”之外,我不会放弃这种行为。但是......我曾经遇到过一个问题,因为宏调用结束时缺少分号(神奇地没有发生在 o0 和调试上)
-
应该还有
-o2和-o3。 -
你能给我们一个最小的完整例子吗?
-
-ON 标志还可以启用没有任何关联标志的优化。
-
@NikosC。有没有办法单独启用它们?找出导致问题的优化似乎是一个很好的策略,所以我可以明确地寻找它? Beta - 抱歉,这是在一个巨大的库中,我无法在任何小情况下复制它。