Критическая Ошибка Gcc

Еще одна ошибка была обнаружена в популярном компиляторе gcc, а точнее в его оптимизаторе, приводящая к ошибке Runtime во время выполнения программы.

При включении опции компилятора O2 оптимизатор некорректно обрабатывает определенный шаблон программы, что приводит к фатальным последствиям.

Баг разместил наш соотечественник Максим Иванов ( http://e-maxx.ru ), кстати, через месяц уезжаю на чемпионат мира по программированию ACM. :) Минимизированный тестовый код выглядит следующим образом:

for (int i=0; i<=1; i++) for (int j=0; j<=1; j++) { std::vector a[2]; a[i].

push_back (0); }

Ошибка появляется, если мы помещаем локальный массив векторов в двойной вложенный цикл — при первой попытке записи в вектор получаем Runtime. При этом оптимизация протекает нормально, если выполняется хотя бы одно из следующих условий: а) Размер массива векторов больше длины цикла б) Обращайтесь к вектору не через a[i], а через a[0], или a[1], или любое другое постоянное значение.

в) Перед записью в вектор выполните a = std::vector(); Стоит отметить, что этот код корректно компилируется в Visual Studio любой версии.

Ошибка была исправлена Ричардом Гюнтером, и сегодня исправление было загружено на репозиторий gcc .

Будьте осторожны при написании программ для АЭС и ядерных боеголовок с использованием gcc :) Отчет об ошибке .

Теги: #GCC #ошибка #критическая #ошибка выполнения #C++

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.