// PR c++/47873
// { dg-do run }
struct Base
{
    virtual ~Base(){}
    virtual Base& This() { return *this; }
};
struct Ent : virtual Base
{
    void *m_Body;
    Ent& This() { return *this; }
    virtual Ent& body()
    {
        return This();
    }
};
struct Msg : virtual Ent
{
    Msg()
    {
        body();
    }
    Msg& This() { return *this; }
};
int main()
{
    Msg m;
    return 0;
}