Открыть список
Как стать автором
Обновить

Комментарии 27

По поводу «это все же С++ код а не С».

Могу ошибаться, но когда в 4.9 кажется? gcc стал использовать С++ в своих исходниках, в рассылке обсуждалось полиси для этого — что в основном будут использовать С++ для применения шаблонов для сокращения повторов кода и кодогенерации. Использовать все возможности языка вроде как не планировалось. Кто сейчас активно участвует в контрибьюте в проект, меня поправит. так что там даже не «С с классами» а какая-то странная разновидность «C with benefits».

Самое интересное — это багрепорт в GNU и реакция разработчиков GCC на найденные ошибки.

Я бы снизил ожидания насчёт реакции, а то разрабы не очень эмоциональный народ)
Возможная реакция

Кстати, оказывается даже proof есть!
Вот баг в GCC, отписанный коллегой в 2017. Баг подтверждён: gcc.gnu.org/bugzilla/show_bug.cgi?id=80051 И по ныне присутствует в коде. Вот и вся реакция. :)

Точнее уже закрыли.

Видимо кто-то читает Habr :)

В сухом остатке: всё пофиксили (вроде-бы, не вычитывал), поправили часть предупреждений от cppcheck, а затем решили немного улучшить собственный анализатор.

Какая-то у вас гну на КПДВ анорексичная.
Намекаете что в опен-сорсе денег нет?

На логотипе GNU она вполне себе упитанная.
www.gnu.org
Ну она же вылупляется из яйца, птенцы обычно щупленькие. Птенцы антилоп, да…
Вовсе не анорексичная, просто на фоне широко открытых глаз и нашего толстячка-добрячка единорога выглядит чуть худее, чем обычно :).
Ну давайте теперь CPython)
Я бы не стал подходить так критично, вы сами заметили, что разработчики «своего» продукта сами хорошо его знают. И это хорошо.
Но так же давно перестал читать мантры про макросы, goto и т.д. Это нормально, а тем более когда знаешь что ты делаешь. И это часто встречается в исходных кодах и известных крупных компаний.
А чего не в самой статье?

В чём состоит проблема со статическим анализом макросов? Они же раскрываются по простым правилам.

Проблема в том, что с точки зрения анализатора, раскрытый код не имеет смысла/аномален. Например, всегда истинные/ложные условия, неиспользуемые переменные и т.д.

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

По опыту, в PVS сравнительно больше проверок для выявление copy-paste ошибок.


Тем не менее, сам я пользуюсь Coverity Scan по ряду веских причин:


  • доступен для OpenSource бесплатно и без танцев с бубном;
  • есть workflow для сгенерированных предупреждений с хранением состояния в БД, тут стоит пояснить:
    • "fix submited" позволяет автоматически закрывать issue при их реальном исправлении.
    • предупреждения помеченные единожды как "false-positive" или "intentional" не будут больше мозолить глаза (но останутся в "облаке" и их можно пересмотреть).
    • игнорируемые предупреждения не будут всплывать в других проектах использующих этот (даже для git-subtree и амальгамированного кода).
  • анализ и результаты в облаке с web-интерфейсом, что идеально для opensource.
На всякий случай прокомментирую, чтобы была ясность и одинаковая трактовка вопросов.
доступен для OpenSource бесплатно и без танцев с бубном;
Мне кажется, «танцев с бубном» это преувеличение. Достаточно запросить ключ и можно пользоваться: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты".
Некоторый танец с бубном есть для закрытых проектов (добавление комментариев в код). Но так Coverity Scan для закрытых проектов вообще ничего не предоставляет.

есть workflow для сгенерированных предупреждений с хранением состояния в БД, тут стоит пояснить:
Похожее есть и в PVS-Studio. Можно использовать базу разметки предупреждений.

Короче, буду пробовать для libmdbx.
В любом случае лучше опираться на отечественного поставщика и сокращать уязвимые зависимости.

По моему личному опыту там ещё и качество предупреждений повыше, а их спектр — поинтереснее.


Эх, где-то в черновиках у меня валялась статья про лонгитюдное исследование и сравнение coverity/clang static-analyzer/pvs studio, дописать, что ли.

такой ключ можно использовать для CI в gitlab/github?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.