GCC Bug - 在constexpr中输入/减少数组访问

Via*_*rus 5 c++ gcc constexpr c++14 gcc6

我发现了一个bug在GCC 6和7(未在GCC 5)内constexpr功能,这导致不同的结果,如果任一函数获取在编译时(错误的结果),或运行时(正确结果)的计算结果.

#include <iostream>

constexpr int bar(int *b) {
  int i = 0;
  b[i++] = 1; // GCC produce here an failure.

  return 0;
}

constexpr int foo()
{
  int tmp[] = {0};
  bar(tmp);

  return tmp[0];
}

constexpr int cexprI = foo();

int main()
{
  std::cout << cexprI << " " << foo() << "\n";

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

实例

问题是数组访问中的增量(也发生在减量)操作.

常量表达式的编译时结果为0(错误),运行时结果为1(正确).

任何人都可以确认此错误并报告给:https://gcc.gnu.org/bugzilla/

我无法在那里创建一个帐户User account creation has been restricted..我联系了管理员,但对我来说这个问题很重要.所以它也想通知你.谢谢!

oct*_*oid 3

我已经打开https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77553。感谢您报告该问题。