Как правильно зафайлить баг в g++?

erotic

Есть довольно странный код, который вызывает падение компилятора g++ 4.6.3. Код использует c++11. В отличие от прошлых разов я не могу сделать минимальный тесткейс - сейчас это один .cpp с кучей инклюдов, если я убираю из любого инклюда любую строчку, код начинает собираться.
Кроме того, нет смысла предоставлять препроцессированный исходник, т.к. он отдельно собирается!
Т.е., опуская кучу флагов, g++ -std=c++0x code.cpp говорит
/home//programming/tests/gcc-4.6.3-crash/code.cpp:9:31: внутренняя ошибка компилятора: Ошибка сегментирования
Отправьте подробное сообщение об ошибке
с препроцессированным исходным кодом.
А вот g++ code.ii работает нормально, как и верхний вызов с опцией --save-temps.
Прикладывать к багу архив всех исходников и системных хедеров вроде не приветствуется.
Что можно сделать?

geja_03

Берешь исходники gcc, собираешь их c -g -O0 и надеешься чтобы ошибка воспроизвелась :D
Запускаешь компиляцию с -v, находишь строку запуска комилятора непосредственно, дальше смотришь в gdb контекст падения.
Ну это если хочется церебрального секса, конечно.

procenkotanya

1. Приложить архив исходников и написать объяснение, что препроцессированный исходник не демонстрирует баг, будет нормально. Выше написано очень хорошо, достаточно изложить это на английском :) Мейнтейнеры не роботы.
2. Очень желательно показать бектрейс падения cc1plus. Что-то типа

gdb --args g++ -std=c++0x code.cpp
(gdb) set follow-fork-mode child
(gdb) r
(gdb) bt

3. Я правильно понимаю, что g++ --save-temps -std=c++0x code.cpp не падает? Это довольно странно, будь готов, что мейнтейнеры не смогут воспроизвести баг.

erotic

3. Я правильно понимаю, что g++ --save-temps -std=c++0x code.cpp не падает? Это довольно странно, будь готов, что мейнтейнеры не смогут воспроизвести баг.
Да, именно так :(
С 4.7.2 такого не воспроизводится, там в любом случае не падает, так что может быть это уже не надо репортить.
В любом случае - спасибо, будет время и желание - повожусь еще.

apl13

С 4.7.2 такого не воспроизводится, там в любом случае не падает, так что может быть это уже не надо репортить.
4.6.3 еще лет пять будет в LTS-дистрибутивах.

erotic

Блин. Помогло собрать чистый gcc-4.6.3 без гентушных патчей :( Тогда все работает.
Попробую в генту зафайлить, получилось собрать шестиметровый препроцессированный файл, который стабильно валится.

procenkotanya

В таком случае, вполне вероятно, что это благодаря stack smashing protection, который генту по умолчанию включают (т.е. баг таки в гцц, а не в гентушных патчах).

erotic

т.е. баг таки в гцц, а не в гентушных патчах
Чорд. Еще поднакодил - стал и ванильный gcc падать. Все-таки в gcc, да.
Оставить комментарий
Имя или ник:
Комментарий: