Рассмотрим следующее:
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);
}
Я попробовал gcc, Clang и Intel Compiler в режиме -O3 и не сгенерировал код, который отражает вышеописанную оптимизацию. Это заставило меня подозревать, что эта оптимизация нарушает спецификацию. Если это не разрешено, то где это говорится в спецификации?
Примечание: мой вопрос вдохновлен этим вопросом SO