Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 360 сообщений
Cообщения с меткой

предупреждения - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Оптимизация сравнения this с нулевым указателем в gcc 6.1

Среда, 25 Августа 2016 г. 00:00 (ссылка)





Хорошие новостиTM ждут пользователей gcc при переходе на версию 6.1 Код такого вида (взят отсюда):



class CWindow {
HWND handle;
public:
HWND GetSafeHandle() const
{
return this == 0 ? 0 : handle;
}
};


«сломается» — при вызове метода через нулевой указатель на объект теперь может происходить разыменование нулевого указателя, потому что компилятор теперь может просто взять и удалить проверку. Код, конечно, с самого начала сломан, а gcc 6.1 его только немного доломает.



Проверять удобно на gcc.godbolt.org В настройках укажем -O2



Код для начала будет такой:



struct CWindow {
CWindow() : handle() {}
int handle;
int GetSafeHandle() const
{
return (this == 0) ? 1 : handle;
}
};
int main()
{
CWindow* wnd = 0;
return wnd->GetSafeHandle();
}


Выбираем в списке gcc 6.1 и получаем…



main:
movl 0, %eax
ud2


ОХ ЩИ~ Сработала подстановка тела функции по месту вызова, gcc заметил разыменование нулевого указателя и добавил вызов __builtin_trap(), который затем привел к появлению в машинном коде «недопустимой инструкции», которая в свою очередь при работе программы должна приводить к ее аварийному завершению.



Для сравнения gcc 5.3 для того же кода выдает:



main:
movl $1, %eax
ret


gcc 5.З здесь не замечает разыменование нулевого указателя и компилирует «как написали».



Чтобы, наконец, получить код со сравнением указателя, добавим на CWindow::GetSafeHandle() атрибут __attribute__ ((noinline)), чтобы запретить подстановку кода в место вызова. Объявление метода будет выглядеть так:



int GetSafeHandle() const __attribute__ ((noinline))


Теперь gcc 5.3 выдает такой машинный код:



CWindow::GetSafeHandle() const:
testq %rdi, %rdi
je .L1
movl (%rdi), %eax
ret
.L1:
movl $1, %eax
ret
main:
xorl %edi, %edi
jmp CWindow::GetSafeHandle() const


Здесь в самом начале GetSafeHandle() выполняется сравнение указателя this с нулем (инструкция testq) и условный переход (инструкция je). Для сравнения gcc 6.1:



CWindow::GetSafeHandle() const:
movl (%rdi), %eax
ret
main:
xorl %edi, %edi
jmp CWindow::GetSafeHandle() const


Здесь никакого сравнения нет – сразу выполняется разыменование. Это и есть то самое отличие, которое доломает код, «успешно работавший» многие годы и десятки лет.



Отдельного внимания заслуживает использование регистра rdi. Вызывающий код обнуляет edi – половину rdi, а вызываемый код ДОВОЛЬНО НЕОЖИДАННО – использует наполовину обнуленный rdi. Конечно, в этом нет никакого смысла, но поскольку код изначально содержит неопределенное поведение (разыменование нулевого указателя), к компилятору никаких претензий быть не может – компилирует как сочтет нужным, Стандартом не запрещено.



Новое поведение задействуется по умолчанию, начиная с уровня оптимизации O1. Оно отключается параметром -fno-delete-null-pointer-checks – поведение становится таким же, как в gcc 5.3



Читатели, возможно, негодуют – опять компилятор «ломает» код и не выдает предупреждений! Выдает, но не очень. Предупреждение -Wnonnull-compare («заведомо ненулевой this сравнивается с нулевым указателем») выключено по умолчанию, его можно включить, указав -Wall. В коде ниже оно выдается в зависимости от наличия дополнительных пар скобок вокруг сравнения:



int GetSafeHandle() const __attribute__ ((noinline))
{
if (this == 0) // -Wnonnull-compare
return 1;
if((this == 0))
return 1; // нет предупреждения
return this == 0 ? 1 : handle; // -Wnonnull-compare
return (this == 0) ? 1 : handle; // нет предупреждения
}


Такое влияние скобок — это явно ошибка в gcc.



Кроме того, если убрать вызов GetSafeHandle() из main(), предупреждение также более не выдается – компилятор знает, что единица трансляции одна и этот код заведомо не вызывается, код функции удаляется раньше, чем отрабатывает поиск сравнений this с нулевым указателем. Решение, выдавать ли предупреждение, принимается «слишком поздно» — в момент, когда код удален.



Предупреждение -Wnonnull-compare не выдается, если используется параметр -fno-delete-null-pointer-checks



Теперь clang…



Начиная с версии 3.5 с настройками по умолчанию clang выдает -Wtautological-undefined-compare на фрагменты:



if (this == 0);
(this == 0) ? 1 : handle;
if(this != 0);
(this != 0) ? handle : 1;


и -Wundefined-bool-conversion на фрагменты:



if(this);
this ? handle : 1;
if(!this);
!this ? 1 : handle;


При этом до версии 3.8 включительно (3.8 — самая новая выпущенная версия на данный момент) сравнение не удаляется (кроме случая, когда код функции подставляется в место вызова и оптимизируется с окружающим кодом).



Компилировать старый или беззаботно написанный новый код с неопределенным поведением становится все интереснее и интереснее.



Дмитрий Мещеряков,

департамент продуктов для разработчиков

Original source: habrahabr.ru.

https://habrahabr.ru/post/308346/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Аурика-2

О чем предупреждает нас организм | Ключи от счастья: здоровье, красота, семья

Понедельник, 18 Июля 2016 г. 21:05 (ссылка)
hranitel-2.ru/o-chem-predup...s-organizm


 



организм



Если все в порядке, наше тело «молчит». Мы чувствуем внутреннюю свободу, маневренность, энергию и оптимизм. Здоровье отражается на хорошем состоянии кожи Читать далее


Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Maya_Monahova

Мультик "Я ДОМАШНИЙ КОЗЁЛ 2" (расшифровки).

Четверг, 14 Июля 2016 г. 18:41 (ссылка)


Создатель загадочного мультика "Я домашний козел 2" Луис Лефевр - владелец студии компьютерной анимации HELIOFANT- работал над ним 5 лет. Как признался автор на своем сайте, все образы фильма как-то сами появились в его сознании, ему только нужно было всё это облечь в форму мультипликации. О существовании многих символов он даже не догадывался, пока после выхода фильма в свет, зрители не указали ему на них.



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

Итак, какую же информацию попытались донести до нас "падшие ангелы" через этого талантливого наивца?





Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
doycho

язык высших сил

Пятница, 02 Апреля 2016 г. 03:36 (ссылка)

высшие силы (680x460, 114Kb)
___
Ведь все наши беды и несчастья — это уже крик Вселенной: «Стой! Ты не туда идешь! Ты свернул с безопасного пути, который ведет тебя к Счастью и Радости! Я тебе столько раз посылала Знаки, чтобы уберечь от извилистой дорожки и опасности…»

Вселенная всегда заботится, обращая наше внимание на нужную нам информацию. Каждый раз посылает предупреждения в виде Знаков. А мы упорно не хотим слышать ее голос… Или слышим… и не понимаем его?..
Давайте разбираться:

1. Язык тонких чувств

Это наше энергетическое, эмоциональное и интуитивное состояние. Вот почему так важно прислушаться к себе, своей душе и тому, что подсказывает ваше сердце. К сожалению современному человеку сложно услышать свое сердце.
Если душа твоя поет, ты на правильном пути, если ощущается дискомфорт, тяжесть, неясная тревога — выбран неправильный путь!

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Рай77

Неудачливый воришка не смог вытащить кассовый сейф через узкое окно оператора. (Видео)   Забавные и курьёзные новости. Квипрокв

Среда, 23 Марта 2016 г. 22:33 (ссылка)
rai77.ru/neudachliviy-voris...11584.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
новости_кмв

Без заголовка

Понедельник, 29 Февраля 2016 г. 22:17 (ссылка)
news-kmv.ru/kmv/obschestvo/...?_utl_t=li


Один путешественник отправился на велосипеде на Кавказ.. » Новости Кавказских Минеральных Вод / Самая актуальная информация! Новости Пятигорска, Новости Кисловодска, Новости Ессентуков, Новости Минеральных Вод, Новости Железноводска, Новости Лермонтова, Новости Георгиевска, Новости Ставрополя

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Как непродуманные предупреждения компиляторов помогают портить совершенно правильный код

Четверг, 18 Февраля 2016 г. 07:03 (ссылка)


Это пост о сложностях взаимодействия искусственного и естественного интеллекта. Современные компиляторы имеют довольно развитые средства статического анализа, которые умеют выдавать предупреждения на разные подозрительные конструкции в коде. В теории эти предупреждения должны помочь разработчикам делать меньше ошибок в коде.



На практике далеко не всегда предупреждения компилятора одинаково полезны. Зачастую они не помогают разработчикам, а мешают им и могут провоцировать на исправление совершенно правильного кода, т.е. на нарушение правила «работает — не трогай».

Читать дальше →

https://habrahabr.ru/post/277261/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
златослоВИКА

ФСБ ПРЕДУРЕЖДАЕТ УПОРОТЫХ УКРОПОВ

Четверг, 28 Января 2016 г. 20:46 (ссылка)

Это цитата сообщения нахапурик Оригинальное сообщение

0 - КГБ (100x97, 11Kb)
ФСБ ПРЕДУПРЕДИЛА КИЕВ О ГОТОВЯЩИХСЯ ТЕРАКТАХ.

Российские спецслужбы предупредили украинских коллег о намерении боевиков «Исламского государства» осуществить в стране серию терактов.
original (675x447, 228Kb)
Боевики «Исламского государства» (организация запрещена в РФ) планируют осуществить серию терактов на территории Украины. Об этом российские спецслужбы предупредили украинских коллег, сообщает LifeNews.

По данным ФСБ, на Украину будут переброшены десять боевиков. Им поставлена задача осуществить теракты в местах массового скопления людей с использованием взрывчатки и огнестрельного оружия. Предположительной целью атаки является Киев. Поименный список боевиков опубликован на сайте портала.

Сотрудникам ФСБ удалось установить, что одна из смертниц уже находится на территории Украины и, вероятно, ожидает сообщников в одной из конспиративных квартир. Не исключено, что для осуществления теракта будет использована трехлетняя дочь террористки.

В конце 2015 года председатель Совета безопасности Украины Василий Грицак предупредил, что ИГ активизировало деятельность на украинской территории. По его словам, для недопущения распространения деятельности организации уже принимаются меры.

В ноябре 2015 года террористы обнародовали список стран, которых считают врагами. В него вошли 60 государств по всему миру, в том числе Украина.

В октябре 2015 года советник главы МВД Украины Антон Геращенко предложил выкладывать в публичный доступ любую информацию о военнослужащих ВКС России, воюющих в Сирии против боевиков «Исламского государства». На своей странице в Facebook он писал, что фото и данные россиян помогут террористам и их «собратьям» в России «отомстить по канонам шариата» за нанесение ударов по объектам в Сирии.
http://puls-planeta.ru/url?e=simple_click&blog...2Fwww.ridus.ru%2Fnews%2F210764
27.01.2016 в 23:51

ПОСТСКРИПТУМ: ,,Всё по "братски" !!! Зря ФСБ предупредила укропов, опять этот акт назовут провокацией Кремля. Пусть сами варятся в своем говне, а ИГИЛ им не помешает - очень они родственные души. Очень желательно, чтобы Укропия объединилась с ИГИЛ, тогда были бы все основания ее уничтожить ковровыми бомбардировками и ракетно-артиллерийскими ударами, не подвергая опасности наших военнослужащих."

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Фитиль_Дом2 (Автор -Ddlet)

Муаммар предупреждал...

Суббота, 09 Января 2016 г. 13:49 (ссылка)


Ливийский лидер Муаммар Каддафи в свое время предупреждал бывшего премьер-министра Великобритании Тони Блэра о том, что исламские экстремисты начнут атаковать Европу, если его (Каддафи) режим будет свергнут. Стенограммы двух телефонных разговоров между двумя лидерами, имевшими место 25 февраля 2011 года, обнародовал британский парламент, пишет газета The Telegraph. Каддафи, отмечает издание, оказался более проницателен, чем западные политики, а его слова стали "пророческими".


5302747_Ashampoo_Snap_2016_01_09_13h44m41s_073_ (700x492, 542Kb)


Читать далее...
Метки:   Комментарии (3)КомментироватьВ цитатник или сообщество
Lenyr

Нетрадиционные средства борьбы с наркозависимостью

Четверг, 18 Декабря 2015 г. 03:53 (ссылка)


Лечение виртуальной реальностью

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



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



3726595_1416572422821_cached (700x466, 128Kb)


Избавить человека от тяжкой зависимости и пагубного влечения нелегко. Комплексное лечение наркозависимости предусматривает систему последовательных мер на протяжении необходимого времени, осуществляемую высококвалифицированными специалистами клиники "Полинар" при помощи новейших методик и материалов.





Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
masterwen

Без заголовка

Понедельник, 14 Декабря 2015 г. 14:25 (ссылка)
kinokonsta.ru/2008/2562-put...?_utl_t=li


Путешествие Пилигрима в небесную страну (2008) » Смотреть онлайн фильмы 2014 - 2015 , смотреть фильмы бесплатно в хорошем качестве

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
vablon

Для чего на самом деле США ведут армию в Ирак?

Пятница, 11 Декабря 2015 г. 07:14 (ссылка)
infopolk.ru/1/U/events/6521...3358dee3c8

Для чего на самом деле США ведут армию в Ирак?



В СМИ появилась одно из объяснений вероломного поведения Турции, перебросившей без предупреждения своих солдат, танки и артиллерию в один из районов Ирака. В СМИ появилась одно из объяснений
Комментарии (0)КомментироватьВ цитатник или сообщество
oryoberta

Для чего на самом деле США ведут армию в Ирак? Политикус InfoPolk.ru

Четверг, 11 Декабря 2015 г. 01:03 (ссылка)
infopolk.ru/1/U/events/6521...144a12aa01

Для чего на самом деле США ведут армию в Ирак?


В СМИ появилась одно из объяснений вероломного поведения Турции, перебросившей без предупреждения своих солдат, танки и артиллерию в один из районов Ирака. В СМИ появилась одно из объяснений

Комментарии (0)КомментироватьВ цитатник или сообщество
Onem

Для чего на самом деле США ведут армию в Ирак?

Четверг, 10 Декабря 2015 г. 23:57 (ссылка)
infopolk.ru/1/U/events/6521...00fc74687c


В СМИ появилась одно из объяснений вероломного поведения Турции, перебросившей без предупреждения своих солдат, танки и артиллерию в один из районов Ирака. В СМИ появилась одно из объяснений

Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<предупреждения - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda