История изменений
Исправление SZT, (текущая версия) :
Честно говоря — не впечатлило. Ошибок там должно быть явно больше. Кроме того, те категории ошибок, с которыми в основном борются создатели компилятора, они совсем не из этой категории.
Самое плохое что может сделать компилятор, это в ответ на корректный исходник сгенерировать некорректный (не соответствующий по смыслу) машинный код. Подобные ситуации с довольно малой вероятностью можно выловить вашим статическим анализатором, это решается разве что тестированием(на реальном коде или fuzz-тестированием) или тщательным изучением самого кода компилятора. Или какими-нибудь формальными методами, типа как в CompCert C.
Забавно еще и то, что компиляторы очень хорошо оттестированы, и большинство ошибкок, которые мог бы выявить ваш анализатор, давным давно были выявлены тестированием. И это не тот случай, где можно было бы заявить, что дескать тестирование это значительно более дорогое и трудозатратное удовольствие, чем всевозможные статические анализаторы. Причина в том, что этим тестированием невольно занимается всякий, кто этот самый компилятор использует, притом бесплатно. И репортят баги.
Намного чаще встречается ситуация, где компилятор генерит вроде бы правильный код, но он неэффективен (нерационально используются регистры, лишние инструкции). И тут ваш анализатор вообще бессилен.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68027 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71343 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66152 - примеры таких багов, зарепорченных лично мной
Исходная версия SZT, :
Честно говоря — не впечатлило. Ошибок там должно быть явно больше. Кроме того, те категории ошибок, с которыми в основном борются создатели компилятора, они совсем не из этой категории.
Самое плохое что может сделать компилятор, это в ответ на корректный исходник сгенерировать некорректный (не соответствующий по смыслу) машинный код. Подобные ситуации с довольно малой вероятностью можно выловить вашим статическим анализатором, это решается разве что тестированием(на реальном коде или fuzz-тестированием) или тщательным изучением самого кода компилятора. Или какими-нибудь формальными методами, типа как в CompCert C.
Забавно еще и то, что компиляторы очень хорошо оттестированы, и большинство ошибкок, которые мог бы выявить ваш анализатор, давным давно были выявлены тестированием. И это не тот случай, где можно было бы заявить, что дескать тестирование это значительно более дорогое и трудозатратное удовольствие, чем всевозможные статические анализаторы. Причина в том, что этим тестированием невольно занимается всякий, кто этот самый компилятор использует, притом бесплатно. И репортят баги.