Почему компиляторы больше не оптимизируют этот 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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