Среда
ОС: 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
Код: Выделить всё
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 ... -with-comp
Мобильная версия