问题标签 [internal-compiler-error]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
132 浏览

c++ - 为什么 g++-11 '-O2' 包含错误,而 '-O0' 没问题?

g++-11 -std=c++20 -O20应该输出1!

clang++ 符合预期。如果我-O2改为-O0,g++-11 也可以。

参见:在线演示

为什么 g++在正常的情况下 -O2 包含错误 -O0

0 投票
1 回答
53 浏览

java - 编译器优化是否改变了以下代码中语句的执行?

最近的一个相关问题中,我发现以下代码

有编译器错误 x 不是 init.(initialized)。我很惊讶编译器无法推理 init。特别是因为此代码似乎不需要任何运行时推理,如下所示:

  1. 在指示的第 2 行,found设置false
  2. 第 2 行和第 3 行之间没有代码。
  3. 所以到达第 3 行!found是必然的,true所以 init 是不可避免的。

我想知道这是否正确。我依稀记得编译器优化可以改变语句的执行顺序。这在这里起作用吗?是否有可能在第 3 行和第 4 行之前到达第 5 行?


环境。
openjdk 15.0.2 2021-01-19
OpenJDK Runtime Environment (build 15.0.2+7-27)
OpenJDK 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
javac 15.0.2 Windows 10

0 投票
2 回答
104 浏览

c++ - C++:如果缺少函数返回语句,for-loop 被优化为无限循环 - 编译器错误?

举一个最小的例子:

test缺少函数中的 return 语句的地方。如果我像这样运行示例:

然后循环在 1024 次迭代后中止。但是,如果我在启用优化的情况下运行示例:

然后这是优化的,我得到一个无限循环。

此行为在g++version10.3.1clang++version之间是一致的10.0.1。如果我添加 return 语句或将函数的返回类型更改为void.

我很好奇:这是一个会被认为是编译器错误的东西吗?或者这是可以接受的,因为缺少 return 语句是未定义的行为,因此我们失去了关于这个函数中发生了什么的所有保证?