Почему компиляторы больше не оптимизируют этот UB со строгим псевдонимомC++

Программы на C++. Форум разработчиков
Anonymous
Почему компиляторы больше не оптимизируют этот UB со строгим псевдонимом

Сообщение Anonymous »

Одним из первых результатов строгого псевдонима в Google является эта статья
http://dbp-consulting.com/tutorials/strictaliasing.html

Одна интересная вещь, которую я заметил, это
uint32_t swaphalves(uint32_t a) {
uint32_t acopy = a;
uint16_t* ptr = (uint16_t*)&acopy;
uint16_t tmp = ptr[0];
ptr[0] = ptr[1];
ptr[1] = tmp;
return acopy;
}
< /code>
Скомпилируется в < /p>
swaphalves(unsigned int):
mov eax, edi
ret
< /code>
by gcc 4.4.7. Любой компилятор новее (4.4 упоминается в статье, поэтому статья не ошибается), не реализует функцию, поскольку она могла бы использовать строгие псевдонимы.
Какова причина этого?
на самом деле была ошибкой в ​​GCC или GCC, так как многие строки кода были написаны таким образом, что Thay создает UB или это просто регрессия комбилий, это не является CL -адресом.>

Подробнее здесь: https://stackoverflow.com/questions/345 ... t-aliasing

Вернуться в «C++»