LINUX.ORG.RU

Баг в gcc

 , ,


1

5

Привет, ЛОР. Нужна твоя помощь.

Я поймал баг в GCC и хочу найти в какой версии он появился. Соответственно, нужно скомпилировать кусок кода и запостить сюда результат.

Код здесь: https://bpaste.net/show/48d0da50fd14

Компилировать вот так: g++ bug.cc -std=c++1y -c -o bug.o

Мой результат:

> g++ bug.cc -std=c++1y -c -o bug.o
In file included from /usr/include/boost/functional/hash/hash.hpp:20:0,
                 from /usr/include/boost/functional/hash.hpp:6,
                 from /home/user/src/evernus/ExternalOrderImporter.h:20,
                 from /home/user/src/evernus/EveCentralExternalOrderImporter.h:19,
                 from /home/user/src/evernus/EveCentralExternalOrderImporter.cpp:17:
/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/include/g++-v5/functional: In constructor 'std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = Evernus::EveCentralExternalOrderImporter::fetchExternalOrders(const TypeLocationPairs&) const::<lambda(auto:1&&, const auto:2&)>; <template-parameter-2-2> = void; _Res = void; _ArgTypes = {std::vector<Evernus::ExternalOrder, std::allocator<Evernus::ExternalOrder> >&&, const QString&}]':
/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/include/g++-v5/functional:2250:7: internal compiler error: Segmentation fault
       function<_Res(_ArgTypes...)>::
       ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.gentoo.org/> for instructions.

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

А что за код такой странный?

У меня вообще не собирается. Пишет ошибки на sse и __is_trivially_copyable.

Возможно из-за того, что в сорцах хардкод на 5.3

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

А что за код такой странный?

Это результат g++ -E. Без этого тебе придётся все зависимости ставить, что несколько некруто, потому что там Qt5.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Я сначала подумал, что вручную сделано было.

Qt5 есть. Собственно на 4.9.3 segfault нету. Видимо до этого не дошло.

RazrFalcon ★★★★★
()

На 4.9.3 нет смысла смотреть:

$ grep is_trivially /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4/type_traits
...
// is_trivially_copyable (still unimplemented)
...
kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

А что есть?

Тонны ошибок о не найденных методах и то что выше написали.

Попробовал собрать из сорцов:

[ 32%] Building CXX object CMakeFiles/evernus.dir/CharacterCorporationCombinedMarketOrderProvider.cpp.o
/media/data/Programming/Sources/evernus/CachingEveDataProvider.cpp: In instantiation of 'Evernus::CachingEveDataProvider::getGenericName(quint64) const::<lambda(auto:3&&, const auto:4&)> [with auto:3 = QString; auto:4 = QString]':
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4/functional:2149:71:   required by substitution of 'template<class _Res, class ... _ArgTypes> template<class _Functor> using _Invoke = decltype (std::__callable_functor(declval<_Functor&>())((declval<_ArgTypes>)()...)) [with _Functor = Evernus::CachingEveDataProvider::getGenericName(quint64) const::<lambda(auto:3&&, const auto:4&)>; _Res = void; _ArgTypes = {QString&&, const QString&}]'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/include/g++-v4/functional:2225:9:   required by substitution of 'template<class _Functor, class> std::function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = Evernus::CachingEveDataProvider::getGenericName(quint64) const::<lambda(auto:3&&, const auto:4&)>; <template-parameter-1-2> = <missing>]'
/media/data/Programming/Sources/evernus/CachingEveDataProvider.cpp:178:14:   required from here
/media/data/Programming/Sources/evernus/CachingEveDataProvider.cpp:177:39: error: cannot call member function 'void Evernus::EveDataProvider::namesChanged() const' without object
                     emit namesChanged();
                                       ^
[ 32%] Building CXX object CMakeFiles/evernus.dir/CharacterDomParser.cpp.o
[ 32%] Building CXX object CMakeFiles/evernus.dir/CharacterImportPreferencesWidget.cpp.o
[ 32%] Building CXX object CMakeFiles/evernus.dir/CharacterListXmlReceiver.cpp.o
CMakeFiles/evernus.dir/build.make:1193: recipe for target 'CMakeFiles/evernus.dir/CachingEveDataProvider.cpp.o' failed
make[2]: *** [CMakeFiles/evernus.dir/CachingEveDataProvider.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/evernus.dir/all' failed
make[1]: *** [CMakeFiles/evernus.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

RazrFalcon ★★★★★
()

Вытягиваешь гитом trunk и пускаешь bisect со скриптом сборки, через часов 5 смотришь результат с коммитом.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

пускаешь bisect со скриптом сборки, через часов 5 смотришь результат с коммитом.

Ты же понимаешь, что я скорее просто забью и оставлю всех без нормального багрепорта?

hateyoufeel ★★★★★
() автор топика

5.3.0

Первым делом просто взять самое последнее из 5.3.x из доступного источника и проверить, вдруг уже исправили. Например, в Debian testing gcc-5.3 регулярно обновляется:

Update to SVN 20160509 (r236033, 5.3.1) from the gcc-5-branch

gag ★★★★★
()
Ответ на: комментарий от gag

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

В генте это самый последний gcc.

hateyoufeel ★★★★★
() автор топика

Дай ссылку на архив с пожатым исходным файлом. Я не дождался даже загрузки страницы.

// Мимо 5.3.0

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

куда более благородно, нежели попрошайничать на форумах.

t184256 ★★★★★
()
Ответ на: комментарий от mix_mix

Хотел потыкать немного delta (GCC доки) там же нашёл c-reduce. delta всё ещё работает, а c-reduce (учитывает структуру кода и поэтому нереально шустрый) выдал такой минимальный пример:

template <typename> int remove_reference;
template <> struct remove_reference<>:

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Чёрт, кажется, продвинутый c-reduce нашёл не тот баг :-)

С delta получилось такое:

template<typename _Tp> _Tp declval();
template<typename _Signature> class function;
template<typename _Res, typename... _ArgTypes>
struct function<_Res(_ArgTypes...)> {
    template<typename _Functor,
        typename = decltype(declval<_Functor&>()(declval<_ArgTypes>()...) )
    > function(_Functor);
};
class EveCentralExternalOrderImporter {
    virtual void fetchExternalOrders();
    void processResult(char errorText);
    int aggregateAndFetchMarketOrders(function<void (char error)> callback);
};
void EveCentralExternalOrderImporter::fetchExternalOrders() {
    aggregateAndFetchMarketOrders(
        [=](auto errorText) {
            processResult(errorText);
        });
}

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 4)

melpon.org/wandbox

Лень с телефона тыкать.

Kuzy ★★★
()
Ответ на: комментарий от xaizek

Чёрт, кажется, продвинутый c-reduce нашёл не тот баг :-)

Ух ты ж блин. Не знал про c-reduce. Спасибо.

P.S. У меня этот сниппет вообще не компилируется, потому что

> g++ gcc-bug1.cc -c -std=c++1y
gcc-bug1.cc:7:15: error: 'function<_Res(_ArgTypes ...)>::function(_Functor) [with _Functor = EveCentralExternalOrderImporter::fetchExternalOrders()::<lambda(auto:1)>; <template-parameter-2-2> = void; _Res = void; _ArgTypes = {char}]', declared using local type 'EveCentralExternalOrderImporter::fetchExternalOrders()::<lambda(auto:1)>', is used but never defined [-fpermissive]
             > function(_Functor);

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

У меня этот сниппет вообще не компилируется

Я с -fpermissive делал (для более быстрого сокращения), там на это не ругается (хотя и ошибку немного в другом месте показывает). Достаточно пустого тела того конструктора (тогда ошибка в конструкторе, как в первом посте):

template<typename _Tp> _Tp declval();
template<typename _Signature> class function;
template<typename _Res, typename... _ArgTypes>
struct function<_Res(_ArgTypes...)> {
    template<typename _Functor,
        typename = decltype(declval<_Functor&>()(declval<_ArgTypes>()...) )
    > function(_Functor) {}
};
class EveCentralExternalOrderImporter {
    virtual void fetchExternalOrders();
    void processResult(char errorText);
    int aggregateAndFetchMarketOrders(function<void (char error)> callback);
};
void EveCentralExternalOrderImporter::fetchExternalOrders() {
    aggregateAndFetchMarketOrders(
        [=](auto errorText) {
            processResult(errorText);
        });
}
xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.