gpt4 book ai didi

c++ - g++ 在 osx 上使用 -O3 优化错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:53 24 4
gpt4 key购买 nike

以下代码在使用 -O3 编译时会产生错误的退出代码。我认为内部循环被错误地优化掉了。使用 -O2 或 -fno-inline 它可以工作。生成一个更简单的示例很困难,因为任何小的更改和错误都会消失。

编译:

/usr/bin/g++ -O3 -o bugexample bugexample.cpp

代码:

#include <vector>

int test(std::vector<char>& a, int& b)
{
std::vector<int> z;
z.push_back(10);
z.push_back(10);

int d = (int)a.size();

int x = 1;
for (int j = 0; j < 2; j++)
{
int c = j - 1;

for (int i = 0; i < d; i++)
{
if (j == 0)
{
}
else if (i == 0)
{
}
else
{
if (a[j] == a[i - 1])
{
b = c + 1;
x = 2;
}
z[i] = 1;
}
}
}

return x;
}


int main(int argc, char* argv[])
{
std::vector<char> a;
a.push_back('a');
a.push_back('a');
int b = 1;
return test(a,b);
}

编译器版本:

/usr/bin/g++ -v
Using built-in specs.
Target: i686-apple-darwin10
Configured with: /var/tmp/gcc/gcc-5666.3~123/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)

对任何网站感兴趣,或证明这是我的错。

编辑:生成的退出代码是 1,而它应该是 2。

最佳答案

嗯,这是某种混淆代码竞赛吗?

据我所知,您正在尝试对输入 vector 进行某种回文测试。只是,

  • 循环变量 j 有一个硬编码的上限 2(应该也应该是 a.size()?)
  • 你只返回最后一个位置的支票
  • 你有各种多余的条件
  • 你有无端的非常量参数
  • 你有未使用的 z vector
  • 您不必要地使用了 bool 的 int(1=>false - 未找到,2=>true - 找到)
  • 您不必要地使用了输出参数 b;我将 bool 返回类型替换为 b 的值(b==-1 表示未找到匹配项)

当简化这些东西的代码时,我得到了这段代码,并且(就像你自己的代码一样)它在 g++ 4.6.1 上的所有优化级别的行为都相同:

#include <vector>

int test(const std::vector<char>& a)
{
/* int j = 1; // was: for (int j = 1; j < 2; j++) */

for (int i = a.size()-1; i > 1; i--)
if (a[1] == a[i - 1])
return 1;

return -1;
}


int main(int argc, char* argv[])
{
std::vector<char> a(2, 'a');
int b = test(a);

return b==-1? 1 : 2;
}

关于c++ - g++ 在 osx 上使用 -O3 优化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com