// { dg-do assemble  }
// 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 {// { dg-error "" }  warning
};

