Pull to refresh

Comments 48

Не боитесь, что проверяемый «проглотит» свои же эти ошибки и далее не даст их совершать?

Т.е. разработчики учтут и внесут дополнительные проверки.
А чего им боятся то? Всех не перевешают! Проверку всех ошибок, находимые PVS-Studio в ближайшее время вряд ли кто то сможет перенести что в Clang что в GCC. Так что им хватит еще на хлеб с маслом.
Даже если так, это не страшно. Мы ведь тоже не стоим на месте. Собственно, наша задача всегда бежать впереди компиляторов.
UFO just landed and posted this here
А GCC разве не люди писали? Каждый из нас может допустить подобного рода ошибку.
Ах эта вера в то, что есть по-настоящему крутые программисты, которые не допускают ошибок…
И чем ближе человек к чайнику — тем больше в это верит. :-) Иллюзии уходят с написанием первого компилятора. :-)
Частенько читаю ваши статьи на хабре и порой выношу для себя полезные вещи (спасибо!), но не могу припомнить ответа на вопрос: «Сообщаете ли Вы мэнтейнерам продуктов о найденных ошибках?»
Толсто. Но на всякий случай, если не троллинг: да (см. ответы на часто задаваемые вопросы, ссылка в конце статьи).
Мне кажется, что стоит упоминать об этом не в FAQ на стороннем сайте, а прямо в статье. Статья ведь должна в идеале быть самодостаточной, а одна строчка «мы сообщаем о багах авторам софта» сильно её не увеличит. Это для вас ваши статьи относятся к некой серии, а читатель может начать с любой из них.

Так что думаю нет, это не троллинг комментатора, а (мелкая?) недоработка автора статьи. Данный комментатор мог часто читать ваши статьи, но не ходить в FAQ — и это, имхо, нормально.
Если в каждую статью вставлять про «отписали разработчикам», про «версию для линукс», про «проверяете ли PVS-Studio», то статьи будут похожи на юридический текст. Что главное нисколько не помешает первым вопросом написать: «А вы проверяете PVS-Studio своим анализатором?».
Вы не правы: всё писать не нужно. Проверка PVS-Studio самой собой не относится к теме стати, и версия для линукса тоже слабо… А вот то, что об этих конкретных ошибках, о которых написано в статье было сообщено разработчиком — является неотъемлемой частью повествования.

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

А вообще, уже традицией стало задавать вопрос про то, сообщили ли разработчикам. Эпиком стал этот комментарий.
Но в последнее время этот вопрос перестали задавать, народ расслабился и уже в комментариях к этой статье вылезло сразу несколько F.A.Q.-овых вопросов.
является неотъемлемой частью повествования


Для Вас — это. Для других — другое является такой же частью.
Именно этот текст вставлять не обязательно.
Все же было бы приятно видедь ссылку в конце поста на соответствующий репорт (хотя бы по тому, что уже нашлось среди «мусора»), согласитесь? По крайней мере для меня, статья выглядела бы полностью законченной в плане текущей истории.
Не могу понять, в чем увидели троллинг с моей стороны, когда действительно было интересно это узнать.

P.S. Да, виноват, под кат не заглянул.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77421

Интересно, может ли вот этот код привести к проблемам:


strncmp (xloc.file, "\1", 2)

Из-за того, что строка, с которой сравнивают, имеет длину 1, а длина указана как 2.

Таки длина 2. К строкам, полученным из литералов автоматически добавляется нулевой байт.

Да, я почему-то был под впечатлением, что 2 — это сколько символов сравнивать не считая нулевой байт (наверное из-за схожего параметра у strncpy, где надо вычитать единицу для нулевого байта и руками его доставлять).

Функция strncmp() сравнивает в лексикографическом порядке не более count символов из двух строк, заканчивающихся символом конца строки, и возвращает целое значение, зависящее от результата сравнения следующим образом. Если в какой-нибудь из заданных строк меньше count символов, сравнение заканчивается при обнаружении первого нулевого символа.

Я не вижу в стандарте ничего про «лексикографический порядок». Даже, наоборот:


The sign of a nonzero value returned by the comparison functions memcmp, strcmp, and strncmp is determined by the sign of the difference between the values of the first pair of characters (both interpreted as unsigned char) that differ in the objects being compared.

(C99, 7.21.4) — просто сравниваются байты. Для «лексикографического порядка» есть strcoll, правда, не знаю, насколько хорошо оно работает (в первую очередь, насколько хорошо оно работает с UTF-8, с однобайтовыми локалями всё обычно в порядке).

Ну подумаешь, скопировал неудачное описание с просторов интернета. :) Суть не меняется.
А если PVS Studio проверит PVS Studio, что будет? ))
Будет заминусованный коммент, так-то.
Не понятно только за что, ну да ладно.
Когда уже будет «Находим ошибки в коде анализаторе PVS-Studio с помощью анализатора PVS-Studio»?
Это последствия премодерации комментариев от «самых маленьких». Пока мой комментарий был на модерации — произошла накладка.
Я ждал этого момента!
Спасибо за интересную статью. Теперь знаю чего ждать от любимого компилятора.
А каким компилятором скомпилирован PVS-Studio for linux?
Тогда статью можно было назвать так: Проверяем GCC, скомпилированный GCC, анализатором PVC-Studio, скомпилированным GCC.
Рекурсивненько

Ошибки PVS-Studio, вызванные ошибками GCC, выявленными PVS-Studio, скомпилированной с помощью GCC, могут являться на самом деле не ошибками PVS-Studio, а ошибками GCC :))

Мне кажется, или в вашем примере кода лишняя скобка перед '?'?
Приоритет тернарного оператора ?: ниже, чем у оператора сравнения <=. Это значит, что мы имеем дело с условием вида:

(die_offset > 0 &&
  (die_offset <= (loc->dw_loc_opc == DW_OP_call2)) ?
    0xffff : 0xffffffff);
Поправлю. Прошу писать про замеченные недостатки в личку.
Было бы очень интересно узнавать, по мимо ошибок, как вызвать эти ошибки в самой программе
Например, что можно написать в программе и скомпилировать её GCC, чтобы была магия?
Это крайне сложная задача для меня, так как я не знаком с кодом проекта.

Это clang, GCC не знает -Weverything.

Sign up to leave a comment.