Возможно ли появление внутренней ошибки компилятора GCC (ICE) в зависимости от включенных заголовков?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Возможно ли появление внутренней ошибки компилятора GCC (ICE) в зависимости от включенных заголовков?

Сообщение Anonymous »

Я разрабатываю два несколько разных проекта IOT, использующих большую часть общей кодовой базы, и мы используем GCC 6.3.0 из-за требований совместимости. Чтобы облегчить часть кода, я включил библиотеку fmt в предложенный метод CMake:

Код: Выделить всё

include(FetchContent)

FetchContent_Declare(
fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt
GIT_TAG        11.0.2)
FetchContent_MakeAvailable(fmt)

# later ...

target_link_libraries( PRIVATE fmt)
Однако в одном проекте компиляция завершается успешно, а в другом — неудачно.

Код: Выделить всё

[8/17] Building CXX object _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o
FAILED: _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o
/opt/cross/bin/arm-linux-gnueabihf-g++ --sysroot=/opt/box-root-fs  -I/opt/box-root-fs/usr/include -I/opt/box-root-fs/usr/local/include -I/home/abertulli/
/build/_deps/fmt-src/include -fdiagnostics-color=always -pthread -g -MD -MT _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o -MF _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o.d -o _deps/fmt-build/CMakeFiles/fmt.dir/src/format.cc.o -c /home/abertulli//build/_deps/fmt-src/src/format.cc
In file included from /home/abertulli//build/_deps/fmt-src/include/fmt/format.h:41:0,
from /home/abertulli//build/_deps/fmt-src/include/fmt/format-inl.h:27,
from /home/abertulli//build/_deps/fmt-src/src/format.cc:8:
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h: In instantiation of ‘void fmt::v11::detail::check_format_string(S) [with Args = {unsigned int&}; S = fmt::v11::formatter::format(const fmt::v11::detail::bigint&, fmt::v11::format_context&) const::::FMT_COMPILE_STRING; typename std::enable_if::type  = 0]’:
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2887:41:   required from ‘fmt::v11::basic_format_string::basic_format_string(const S&) [with S = fmt::v11::formatter::format(const fmt::v11::detail::bigint&, fmt::v11::format_context&) const::::FMT_COMPILE_STRING; typename std::enable_if::type  = 0; Char = char; Args = {unsigned int&}]’
/home/abertulli//build/_deps/fmt-src/include/fmt/format-inl.h:1391:60:   required from here
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2792:56:   in constexpr expansion of ‘fmt::v11::detail::parse_format_string(s, fmt::v11::detail::format_string_checker(s))’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2613:44:   in constexpr expansion of ‘fmt::v11::detail::parse_replacement_field((p + 4294967295u), end, ((fmt::v11::detail::format_string_checker&)handler))’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2591:13:   in constexpr expansion of ‘(& handler)->fmt::v11::detail::format_string_checker::on_format_specs(adapter.fmt::v11::detail::parse_replacement_field(const Char*, const Char*, Handler&&) [with Char = char; Handler = fmt::v11::detail::format_string_checker&]::id_adapter::arg_id, (begin + 1u), end)’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2763:51:   in constexpr expansion of ‘((fmt::v11::detail::format_string_checker*)this)->fmt::v11::detail::format_string_checker::parse_funcs_[id](((fmt::v11::detail::format_string_checker*)this)->fmt::v11::detail::format_string_checker::context_)’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2677:55:   in constexpr expansion of ‘fmt::v11::formatter().fmt::v11::formatter::.fmt::v11::detail::native_formatter::parse(ctx)’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2829:34:   in constexpr expansion of ‘fmt::v11::detail::parse_format_specs((& ctx)->fmt::v11::detail::compile_parse_context::.fmt::v11::basic_format_parse_context::begin(), (& ctx)->fmt::v11::detail::compile_parse_context::.fmt::v11::basic_format_parse_context::end(), ((fmt::v11::detail::native_formatter*)this)->fmt::v11::detail::native_formatter::specs_, (& ctx)->fmt::v11::detail::compile_parse_context::, (fmt::v11::detail::type)2)’
/home/abertulli//build/_deps/fmt-src/include/fmt/base.h:2792:77: internal compiler error: in cxx_eval_bit_field_ref, at cp/constexpr.c:2360
FMT_CONSTEXPR bool error = (parse_format_string(s, checker(s)), true);
^
Два файла CMakeLists.txt идентичны при включении fmt, они лишь незначительно изменяются при его использовании (например, при использовании двух версий target_link_libraries), но это компилируется нормально, если я делаю собственную сборку (которая использует GCC 11.4), и судя по сообщению об ошибке, она не связана с моим исходным файлом, который ее использует (который в любом случае идентичен). Я понимаю, что ICE — это, по сути, ошибки, которых не должно быть, поскольку они проявляются при компиляции корректного кода, но меня озадачивает, почему в одном случае это проявляется, а в другом — нет. Мне жаль, что я не могу предоставить полную версию MWE, не нарушив соглашение о неразглашении (и компилятор, поскольку его больше нет в репозитории, был скомпилирован с нуля, адаптировав это (благословенное!) Руководство


Подробнее здесь: https://stackoverflow.com/questions/793 ... nding-on-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»