The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"В DNS-сервере BIND устранен серьёзный сбой, возникший из-за ..."
Отправлено pv47, 14-Июн-14 00:17 
> Допустим есть функция:

Я об этом как-то не подумал... хотя, ваш пример носит другой характер.

В вашем случае компилятор явно _видит_, что str!=NULL и выкидывает проверку в first. Это обычное вычисление констант на этапе компиляции.

В обсуждаемом же случае компилятор видит, что используется str[0], и _догадывается_, что str!=NULL и поэтому выкидывает проверку.

То есть в случае

static inline int first (char *str)
{
    int ret = str[0];
    if (!str) ret = -1;
    return ret;
}

компилятор выкидывает проверку !str, т.к. str[0] использовалось раньше. И в результате на системах, где чтение нулевого адреса не приведёт к ошибке, first() будет работать некорректно. Хоят с точки зрения программиста, от "высокоуровневого ассемблера" логично предполагать, что в этом случае функция либо выполнится правильно либо выдаст SIGSEGV. Компилятор же внёс вариант "выполнится успешно, но неправильно".

Не могу сказать, что я поощряю программистов, которые делают такие ошибки, но имхо такая оптимизация - не то же самое, что замена умножения сдвигом или jmp для хвостовой рекурсии.

ИМХО, идеальным вариантом стала бы поддержка какого-нибудь -fno-optimize-undefined-behavior, который бы просто не оптимизировал подобные сомнительные случаи, т.е. перекладывал бы "неопределённое поведение" на процессор и библиотечные функции.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру