Тривиальный пример (
bcc32_5.93_cast_bug.cpp):
class A {};
class C {};
A* a;
A* b = static_cast<C*>(a);
Компилируем в
bcc32.exe
(версия 5.93) из
Codegear RAD Studion 2007
:
bcc32 -c bcc32_5.93_cast_bug.cpp
Падает c
internal compiler error
:
CodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear
bcc32_5.93_cast_bug.cpp:
Fatal F1004 bcc32_5.93_cast_bug.cpp 4: Internal compiler error at 0x44b34e with base 0x400000
Fatal F1004 bcc32_5.93_cast_bug.cpp 4: Internal compiler error
Люблю собирать падения компиляторов на стадии компиляции. А у вас есть что-нибудь подобное в загашнике?
Если напсать шаблонную рекурсию:
ОтветитьУдалитьtemplate <int N>
struct Recursion
{
enum {value = N+Recursion<N-1>::value};
};
void main()
{
cout << Recursion<5>::value << endl;
}
То компилятор Visual Studio 2008 вылетит с ошибкой:
"Microsoft C/C++ Optimizing Compiler has stopped working." Это конечно не баг компилятора, но все равно интересный случай.
Пробывал на Visual studio 2010 beta, показывает "fatal error: recursive type ..."
Другие компиляторы пока не пробывал.
угу, пару месяцев назад зафайлил баг в районе биндингов функций в компиляторе JavaFX. Кто-то из тамошних подтвердил, словами вида "текущая версия тоже падает", но вроде еще не зафиксили :))
ОтветитьУдалитьНа рекурсивном темплейте Borland множественно, но однообразно ругается, но не падает. ;-)
ОтветитьУдалитьCodeGear C++ 5.93 for Win32 Copyright (c) 1993, 2007 CodeGear
r.cpp:
Error E2489 r.cpp 3: Maximum option context replay depth exceeded; check for recursion in function main()
Error E2489 r.cpp 3: Maximum option context replay depth exceeded; check for recursion in function main()
Error E2489 r.cpp 3: Maximum option context replay depth exceeded; check for recursion in function main()
[поскипано 48 раз]
Error E2228 r.cpp 5: Too many error or warning messages in function main()
*** 51 errors in Compile ***
Этот комментарий был удален автором.
ОтветитьУдалитьДавно читаю ваш блог, много чего интересного узнал и попробовал (статический анализ, google test, google code style и т.д.). Спасибо!
ОтветитьУдалитьПокопался в архивах. Первые в моей жизни (без шуток) строки на Си++ оказались крайне неудачными :-)
template < class foo > class bar
{
public:
bar();
bar::bar (char* baz){};
};
Падает Visual C++ из студий: 2003, 2005, 2008 -- все, что протестировал.
зараза, так и не понял как выделить список аргументов шаблона в угловые скобки :-(
ОтветитьУдалитьОтличный пример, спасибо. Студия успешно валится на:
ОтветитьУдалитьtemplate <typename T> class C {
C();
C::C(char* p) {}
};
Борланд нормально съел.
Обнаружил еще один способ завалить студию (проверено на 2005):
ОтветитьУдалитьclass Foo : ::std {};
Нарвался случайно, когда при использовании google test (спасибо, кстати, за заразительные посты) унаследовал ::testing вместо ::testing::Environment.