// Build don't link: 
// GROUPS passed visibility
// visibility file
// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin)
// Date:     Wed, 25 Aug 93 14:30:47 MDT
// Subject:  g++ bug
// Message-ID: <9308252030.AA02352@tnt.acsys.com>
class B {
protected:
    int i; // ERROR - protected
};

class D1 : public B {
};

class D2 : public B {
    friend void fr(B*,D1*,D2*);
    void mem(B*,D1*);
};

void fr(B* pb, D1* p1, D2* p2)
{
    pb->i = 1;  // illegal// ERROR - .*
    p1->i = 2;  // illegal// ERROR - .*
    p2->i = 3;  // ok (access through D2)
}

void D2::mem(B* pb, D1* p1)
{
    pb->i = 1;  // illegal// ERROR - .*
    p1->i = 2;  // illegal// ERROR - .*
    i = 3;      // ok (access through `this')
}

void g(B* pb, D1* p1, D2* p2)
{
    pb->i = 1;  // illegal// ERROR - .*
    p1->i = 2;  // illegal// ERROR - .*
    p2->i = 3;  // illegal// ERROR - .*
}
