LINUX.ORG.RU

Ошибка компиляции при огромном initializer_list

 ,


0

4
   const QHash<QString, float> idfs = {{"the", 0.0023450551861261},
    {"of", 0.00258603321106053},
    {"to", 0.00375511856396871},
    {"and", 0.0040408455383457}


..293060 подобных строк еще

Компиляция:

/usr/local/bin/mpic++   -DQT_CORE_LIB -DQT_NO_DEBUG --isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64  -Wall -Wextra -std=c++11 -O2 -fPIC   -fPIC -o CMakeFiles/antiplagiarism.dir/src/idfs.cc.o -c /home/user/newanalyzer/common/src/idfs.cc


Результат компиляции:


g++: internal compiler error: Segmentation fault (program cc1plus)

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 


internal compiler error

Это не обшибка компиляции, а баг в gcc

annulen ★★★★★
()

Segmentation fault

Как минимум, он падать не должен. А так - возможно у std::initializer_list<> какие-нибудь ограничения есть(типа максимального числа элементов)

Deleted
()

Попробуй последний релиз GCC, если конкретно эта ошибка будет повторяться — создавай баг в баг-трекере GCC.

Pravorskyi ★★★
()

К слову

Стандарт рекомендует поддерживать как минимум 16 384 элемента в листе http://eel.is/c draft/implimits#2.35

Не то, чтобы это много чего значило.

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

можно подробнее об идее с gperf? насколько я понял он генерирует исходники. чем это поможет если сгенерированные исходники так же нужно будет компилировать gcc?

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

чем это поможет если сгенерированные исходники так же нужно будет компилировать gcc?

Во-первых, вместо рантаймового QHash'а получится код идеальной хэш-функции со статической таблицей данных (работает быстрее и не занимате память), вот вторых сам процесс компиляции будет менее ресурсоемким

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.