При компиляции с MinGW-w64 этого простого кода:
#include
template
выдаётся ошибка:
доступ по указателю с приведением типа нарушает правила перекрытия
объектов в памяти [-Werror=strict-aliasing]
while(std::getline(sLine, line)){
Компилирую так:
i686-w64-mingw32-g++ -std=c++17 -W -Wall -Wextra -pedantic -Werror -O3
file.cpp
Почему возникает эта ошибка и как её исправить? Здесь же вроде никаких преобразований типов не происходит. Странно, что g++ это компилирует без ошибок (с теми же флагами)
Полный вывод компилятора:
file.cpp: В функции «void readWithSep()»:
file.cpp:10:35: ошибка:
доступ по указателю с приведением типа нарушает правила перекрытия
объектов в памяти [-Werror=strict-aliasing]
while(std::getline(sLine, line)){
cc1plus: все предупреждения считаются ошибками
Ответ
Похоже, это бага (точнее регресия) в gcc. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80633
Воспроисводится только при включенном -O2/-O3, потому что на этом уровне включается -ftrict-aliasing. Если компилятор менять не получается или уровень оптимизации, то можно просто добавить -fno-strict-aliasing
Комментариев нет:
Отправить комментарий