On Thursday 01 May 2003 06:57, Matthias Klose wrote: > Please can you check, if the behaviour is the same with g++-3.3? >
Yes, it is. Attached is a program which shows this problem. Normally it will work just fine however add -fno-rtti and it segfaults. Using -Wall -W -pedantic does not give any hints that -fno-rtti is a bad if dynamic_cast() is used. No special options need to be passed to build this program. I used 3.3.0-pre7 for this test. Hope the test program helps out. It was the smallest version I could come up with. This shows approximately what the C++ project that insprired this bug was doing.
#include <iostream> class EventHandler { public: virtual ~EventHandler(void) {} virtual void thisEvent(void) {} virtual void thatEvent(void) {} }; class MyMenu: public EventHandler { public: virtual void thisEvent(void) { std::cout << "this Menu handler\n"; } virtual void thatEvent(void) { std::cout << "that Menu handler\n"; } }; class OtherThing: public EventHandler { public: virtual void thisEvent(void) { std::cout << "this OtherThing handler\n"; } virtual void thatEvent(void) { std::cout << "that OtherThing handler\n"; } }; void do_event(EventHandler* handler) { if (dynamic_cast<MyMenu*>(handler)) { // also call thatHandler for menus handler->thatEvent(); } handler->thisEvent(); } int main(int argc, char* argv[]) { MyMenu menu; OtherThing thing; do_event(&menu); do_event(&thing); exit(0); }