non-virtual + virtual inheritance bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have found what I believe to be a bug in g++ 2.91.60 on NetBSD 1.4.1. It
appears to have been solved in g++ 3.3.3 which is the other version I am
using. I was wondering if this is a known problem -  a google search
revealed a few posts around this topic but nothing which matched exactly:

Basically a combination of non-virtual and virtual inheritance is resulting
in some funnies and ultimately a segmentation fault. I have narrowed it down
to the following case :

>>>
class B; // non-virtual base
class V; // virtual base

class Base: public B, public V;
class Child: public Base;

Base* b=new Child();
Child* c=dynamic_cast<Base*>(b);
passInAsBase(c);

void passInAsBase(Base* b)
{
  Child* c=dynamic_cast<Child*>(b);
}
>>>

This compiles fine but causes problems when it runs (I have attached a short
compileable source file), in particular the dynamic cast in passInAsBase
segmentation faults the program. If I declare Base as follows... (virtual
class inherited first)
  class Base: public V, public B;
... the problem goes away. As I mentioned this all works in 3.3.3. but
unfortunately I am tied to using my existing OS/compiler for historical
reasons.

Any pointers would be appreciated...

Thanks
 Stuart



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux