LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Термин UB применим только к оптимизациям и не существует в отрыве от них.

Нет. UB — это произвольное поведение при встрече соответствующего примера в коде. Безотносительно оптимизаций. Для процессора UB — это, например, превышение рабочей температуры или облучение высокоэнергетическими частицами.

но если ты вдруг решишь делать преобразования машинного кода, то некоторые из них возможны только при определённых допущениях об обрабатываемых данных

Верно. Но если для Си есть код, для которого утверждается, что он может делать что угодно, то для ассемблера такого кода не существует.

оптимизация руководствуется таким допущением, а оно нарушается

Может руководствоваться только если есть «невозможный код». Если любой операнд с любыми параметрами допустим, то UB не может быть допущением.

Исходная версия monk, :

Термин UB применим только к оптимизациям и не существует в отрыве от них.

Нет UB — это произвольное поведение при встрече соответствующего примера в коде. Безотносительно оптимизаций. Для процессора UB — это, например, превышение рабочей температуры или облучение высокоэнергетическими частицами.

но если ты вдруг решишь делать преобразования машинного кода, то некоторые из них возможны только при определённых допущениях об обрабатываемых данных

Верно. Но если для Си есть код, для которого утверждается, что он может делать что угодно, то для ассемблера такого кода не существует.

оптимизация руководствуется таким допущением, а оно нарушается

Может руководствоваться только если есть «невозможный код». Если любой операнд с любыми параметрами допустим, то UB не может быть допущением.