考虑以下:
extern void bar(int *restrict);
void foo(int *restrict p) {
int tmp;
bar(&tmp);
*p = tmp;
}
C99 规范是否允许将 foo 优化为以下内容?
extern void bar(int *restrict);
void foo(int *restrict p) {
bar(p);
}
我在 -O3 模式下尝试了 gcc、Clang 和 Intel 编译器,但都没有生成反映上述优化的代码。这让我怀疑这种优化违反了规范。如果不允许,规范中的哪里是这样说的?
注意:我的问题受到这个 SO question的启发