Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-07-02

-fno-delete-null-pointer-checks

На днях видел прекрасное:

Доступны корректирующие выпуски DNS-сервера BIND 9.10.0-P2, 9.9.5-P1 и 9.8.7-P1, в которых устранена серия уязвимостей и решена проблема, способная привести к краху процесса в непредсказуемые моменты обработки запросов. Примечательно, что проблема проявляется только при сборке с использованием GCC 4.9.0 и более новых выпусков и вызвана изменением работы оптимизатора GCC. В частности, начиная с GCC 4.9 по умолчанию включается режим удаления лишних операций сравнения с указателями NULL


Какая прелесть! Лишние операции проверки на NULL. Я понимаю, некая сермяга в этом есть, конечно. Типа, код надо писать правильно. Но скажите мне, кто в состоянии написать хоть сотню строк абсолютно правильно? А разработчики компилятора в нас верят, очевидно. Спасибо им за это.

Иллюстрация того, что именно оптимизатор GCC 4.9 считает лишними проверками на NULL:

The gcc optimization level 2 or higher will delete null-pointer checks
beyond the first use/test of a pointer. For targets such as the ARM7
that do not have a hardware memory manager, this can cause silent
failures...for example, consider the following code:

void bad_code(void *a) {
    int *b = a;
    int c = *b;
    static int d;

    if (b) {
        d = c;
    }
}

If using -O2 or higher, the conditional test for b will not be
performed (i.e. d=c will always be executed regardless of whether a
value of 0 was passed into the function).


This can be fixed by using the compiler flag:
-fno-delete-null-pointer-checks

Используйте этот флаг при компиляции с оптимизацией -O2 или выше. А не то пожалеете :)

А вообще прэлестно, да.



original post http://vasnake.blogspot.com/2014/07/fno-delete-null-pointer-checks.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (185) web-develop (170) gov.ru (157) video (123) бытовуха (112) sysadm (100) GIS (97) Zope(Plone) (88) Book (81) programming (81) бурчалки (81) грабли (77) development (73) Fun (72) windsurfing (72) Microsoft (64) hiload (62) opensource (58) internet provider (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) language (45) hardware (44) JS (41) curse (40) driving (40) money (40) DBMS (38) bigdata (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) tourism (19) Apache (16) Manager (15) web-browser (15) Никонов (15) happiness (14) music (14) todo (14) PHP (13) course (13) functional programming (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) crypto (11) game (11) map (11) scala (11) HTTPD (9) ODF (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) Photo (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) display (4) holywar (4) nginx (4) pistol (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) USA (3) holiday (3) mount (3) spark (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) font (2) ftp (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Palanga (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) krusader (1) license (1) mindmap (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)

Google+ Followers