// Build don't link: 
// GROUPS passed old-abort
//
// This one creates
//
// gcc2: Internal compiler error: program cc1plus got fatal signal 11
//
// when compiled with g++.
// The error goes away, if
// 1) int ClassInvariant() is not virtual or
// 2) GnObject has a virtual destructor or
// 3) GnWidget has no virtual destructor or
// 4) GnContracts has a virtual destructor
//


class GnContracts {
  public:
    virtual int ClassInvariant();
//    virtual ~GnContracts();
};

class GnObject : public GnContracts {
  public:
//    virtual ~GnObject();
};

class GnWidget : public GnObject {
  public:
    virtual ~GnWidget();
};

class GnOptionGroup : public GnObject, public GnWidget {
};// ERROR -  warning

