При создании 64-битного кода Windows на ARM64EC компиляция завершается сбоем из-за сбоя компилятора.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 При создании 64-битного кода Windows на ARM64EC компиляция завершается сбоем из-за сбоя компилятора.

Сообщение Anonymous »

Я сталкиваюсь с внутренней ошибкой компилятора (ICE) с MSVC 19.44 при создании проекта C++, ориентированного на ARM64EC в Windows.
Среда
ОС: Windows на ARM
Компилятор: MSVC 19.44 (Visual Studio 2022)
Хост/цель: HostArm64 → Arm64
Стандарт языка: C++20
Система сборки: CMake + MSBuild
Флаги архитектуры: /arm64EC
PCH включен: /Yu + /Fp
Тип сборки: Release (оптимизации отключены: /Od)
Параллельный build: /MP
Характеристики сборки
Большая кодовая база C++
Компиляция нескольких файлов .cpp за один вызов cl.exe
Интенсивное использование сторонних заголовков (например, Qt, Boost, TBB)
/bigobj включен
Предупреждения рассматриваются как ошибки (/WX)
Сведения об ошибке

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

The compiler crashes with repeated INTERNAL COMPILER ERROR messages and eventually fails with:
cl : command line error D8040: error creating or communicating with child process

Трассировка стека неоднократно показывает внутренние функции MSVC, например:

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

    CL!strcpy()
CL!DllGetObjHandler()
CL!translate_cpfe_args()
CL!get_supports_arm32()
Сбой происходит во время компиляции, прежде чем будет выдана какая-либо диагностика из пользовательского кода.
Наблюдения
Те же исходные файлы успешно компилируются на x64
Ни один конкретный файл .cpp не сообщает о синтаксической или семантической ошибке
Снижение уровня оптимизации не позволяет избежать сбоя
Сбой происходит только для этой конкретной цели, когда он создан как группа
Указывает на возможную ошибку компилятора, связанную с вызовом ARM64EC + PCH + multi-TU.
Вопрос
Это известная проблема компилятора MSVC ARM64EC?
Существуют ли рекомендуемые обходные пути, такие как:
Отключение PCH для ARM64EC
Компиляция одной единицы перевода для каждого вызова cl.exe
Переключение версий набора инструментов MSVC
Использование Hostx64 вместо HostArm64
Избегание /MP или /bigobj для сборок ARM64EC (уже пробовал)
Любые рекомендации от других, которые использовали аналогичные ARM64EC ICE, будут оценил.

Подробнее здесь: https://stackoverflow.com/questions/798 ... a-compiler
Ответить

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

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

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

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

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