Компиляция кода приводит к internal compiler error
struct S {
const char arr[120];
};
S s = { (const unsigned char*)"aaa" };
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
c:\app_tmp\compiler_crash\compiler_crash\compiler_crash.cpp(10) : fatal error C1001: An internal error has occurred in the compiler.
1>(compiler file 'msc1.cpp', line 1411)
30.12.11 22:24: Перенесено модератором из 'C/C++. Прикладные вопросы'. Всё, что касается специфики компиляторов — это общие вопросы. — Кодт
N>c:\app_tmp\compiler_crash\compiler_crash\compiler_crash.cpp(10) : fatal error C1001: An internal error has occurred in the compiler.
1>>(compiler file 'msc1.cpp', line 1411)
Я не знаю, почему именно компилятор выдал фатальную ошибку, но, вообще-то, ваш код не корректный, так как вы пытаетесь инициализировать символьный массив значением константного указателя.
С>Я не знаю, почему именно компилятор выдал фатальную ошибку, но, вообще-то, ваш код не корректный, так как вы пытаетесь инициализировать символьный массив значением константного указателя.
Я не утверждал обратного. Это упрошенный вариант того что получилось в результате раскрытия макросов (точнее не корректного их применения).
А то что компилятор при этом падает это bad.
Здравствуйте, nen777w, Вы писали:
С>>Я не знаю, почему именно компилятор выдал фатальную ошибку, но, вообще-то, ваш код не корректный, так как вы пытаетесь инициализировать символьный массив значением константного указателя.
N>Я не утверждал обратного. Это упрошенный вариант того что получилось в результате раскрытия макросов (точнее не корректного их применения). N>А то что компилятор при этом падает это bad.
Дело в том, что он мог фатально упасть не из-за этого кода, а, напимер, из-за препроцессора. То есть хотелось бы знать, если вы вводите именно свой упрощеннный пример код, компилятор падает с фатальной ошибкой? Я не могу этого проверить, так как у меня VC++ 2010, и компилятор на вашем примере не генерирует фатальную ошибку.
С>Дело в том, что он мог фатально упасть не из-за этого кода, а, напимер, из-за препроцессора. То есть хотелось бы знать, если вы вводите именно свой С>упрощеннный пример код, компилятор падает с фатальной ошибкой?
Ну да
С>Я не могу этого проверить, так как у меня VC++ 2010, и компилятор на вашем примере не генерирует фатальную ошибку.
Ok. Давно пора переходить на 2010.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, nen777w, Вы писали:
N>>Ok. Давно пора переходить на 2010.
O>Не поможет. O>VS2010 на этом коде тоже падает (VS2010 + SP1).
Я думаю, вы что-то путаете. Никакой фатальной ошибки VC++ 2010 не генерирует.
N>c:\app_tmp\compiler_crash\compiler_crash\compiler_crash.cpp(10) : fatal error C1001: An internal error has occurred in the compiler.
1>>(compiler file 'msc1.cpp', line 1411)
struct S
{
const char arr[120];
};
S s = {'a', 'a', 'a'};
Остальные 117 элементов будут нулями и будет полноценная C-строка.
Здравствуйте, Сыроежка, Вы писали:
O>>VS2010 на этом коде тоже падает (VS2010 + SP1). С>Я думаю, вы что-то путаете. Никакой фатальной ошибки VC++ 2010 не генерирует.
Может быть, ice зависит от каких-то внешних факторов? 32/64, английская/русская студия, английская/русская винда, юзер/админ, ещё что-то.
Всё-таки это неопределённое поведение компилятора, на то оно и неопределённое, чтобы при случае оказаться гейзенбагом.
(Хотя чаще всего это шрёдинбаг).
NJ>struct S
NJ>{
NJ> const char arr[120];
NJ>};
NJ>S s = {'a', 'a', 'a'};
NJ>Остальные 117 элементов будут нулями и будет полноценная C-строка.
Да проще даже (с тем же результатом):
S s = { "aaa" };
Тут речь не о том, как писать правильно, а о наличии ошибки в компиляторе. Он не должен падать на ill-formed (и на well-formed тоже) программах, а писать варнинги и ерроры.
Кстати, okman или nen777w, вы в MS багрепорт послали?
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Сыроежка, Вы писали:
С>>Я думаю, вы что-то путаете. Никакой фатальной ошибки VC++ 2010 не генерирует.
O>То есть, я лгун, а вот это — результат Фотошопа ?
O>
O>Visual Studio 2010 Ultimate, Английская + Service Pack 1. O>Версия файла cl.exe — 16.0.30319.1.
У меня компилятор не генерирует фатальную ошибку, коогда я запускаю код из IDE.
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Сыроежка, Вы писали:
O>>>VS2010 на этом коде тоже падает (VS2010 + SP1). С>>Я думаю, вы что-то путаете. Никакой фатальной ошибки VC++ 2010 не генерирует.
К>Может быть, ice зависит от каких-то внешних факторов? 32/64, английская/русская студия, английская/русская винда, юзер/админ, ещё что-то. К>Всё-таки это неопределённое поведение компилятора, на то оно и неопределённое, чтобы при случае оказаться гейзенбагом. К>(Хотя чаще всего это шрёдинбаг).
К>А что пишет студия конкретно у тебя?
Забавно, сейчас после Нового года снова запустил пример, и компилятор вывалился. А до этого просто писал, что-то вроде неверного преобразование из одного типа в другой. Более того я даже делал замену приведение типов в стиле С на приведение типов в стиле С++, и компилятор ни разу не вываливался!
А сегодня своершенно другое поведение компилятора.