GCC 7 фиксировано с 7.3.0-16ubuntu3 (проверено на Ubuntu 18.04 ).Эта версия доступна, хотя Ubuntu Toolchain Test PPA (для 16.04.1 и 14.04).
Протестировано только с Make, но должно работать и с Ninja.Включены и Sanitizer, ASan и UBsan.
В changelog не так много общего с этой проблемой:
gcc-7 (7.3.0-16ubuntu3) бионический;срочность = средняя
- Обновление до SVN 20180415 (r259389) из gcc-7-branch.
- Fix PR libstdc ++ / 85222.
- Удалите наш собственный PR-каталог libstdc ++ / 85222.
Обновление:
GCC 7 ( 7.3.0-16ubuntu3 ) is все еще не работает в Ubuntu 16.04 и более ранних.
Что вы можете сделать, чтобы обойти это:
A.Обновление до Ubuntu 18.04
Проблема устранена на Ubuntu 18.04 (LTS) Gcc7.
B.Dockerize и обновление до Ubuntu 18.04
Если обновление невозможно, например.работающий в системе CI, все еще можно использовать Docker и новейшую Ubuntu.
C.Отключить UB Sanitizer
Проблема возникает только при использовании GCC7 с включенным UB Sanitizer.Как отмечено в комментариях Тобиас-Брюль : Выключение UB Sanitizer предотвращает ошибку.
D.Используйте Gold Linker
Другой обходной путь, опубликованный makerj : Использование Gold Linker не вызывает проблемы.
Например.на CMake передать его через CMAKE_EXE_LINKER_FLAGS
:
cmake -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=gold ..