Внутренняя ошибка компилятора (версия CL: 14.27.29110)

#c #visual-c

#c #visual-c

Вопрос:

Есть код

 #include <array>

struct Foo {
  int bar;
};

int main() {
  constexpr auto v = std::array{Foo{}};
  return 0;
}
  

При компиляции с C 17:

фатальная ошибка C1001: внутренняя ошибка компилятора. … (файл компилятора ‘msc1.cpp ‘, строка 1591)
ВНУТРЕННЯЯ ОШИБКА КОМПИЛЯТОРА в ‘C:Program Файлы (x86)Microsoft Visual Studio2019EnterpriseVCToolsMSVC14.27.29110binHostX86x86CL.exe ‘

Но это — компилирует

 #include <array>

struct Foo {
  int bar;
};

int main() {
  constexpr std::array<Foo, 1> v{Foo{}};
  return 0;
}
  

Все оптимизации отключены, как описано здесь

Это ошибка компилятора?

Комментарии:

1. Я бы сказал, что внутренняя ошибка компилятора всегда является ошибкой, даже если код, который приводит к ней, недействителен.

Ответ №1:

Это похоже на ту же ошибку, о которой сообщалось developercommunity.visualstudio.com при регрессии: внутренняя ошибка компилятора c в версии 16.7.0 с /std: c 17 (файл компилятора ‘msc1.cpp ‘, строка 1591). Я предлагаю вам проголосовать за это сообщение об ошибке и следить за ним для возможных решений.

Проблема была введена в обновлении 16.7.0 и не исправлена по состоянию на последнюю версию 16.7.5. Промежуточные обходные пути — вернуться к 16.6.5 или удалить /std:c 17 и /std:default /std:c 14 вместо этого использовать or .

Комментарии:

1. Возможно, они заменят msvc на clang)

2. @АлександрТрушин Этого не произойдет 😉 но я вижу в тикете, что MS наконец-то признала ошибку и пообещала исправить.

3. Есть прогресс: developercommunity.visualstudio.com/content/problem/1139953 /…

4. @АлександрТрушин Приятно знать, спасибо за доработку. Я обновлю ответ, когда исправление будет опубликовано публично.