// { dg-do assemble  }
// f() should be able to access B::j, as of FDIS [class.protected]/1

// Subject: Re: [bug] Inheritance and friend access control broken
// References: <199803032141.WAA09332@piano.dptmaths.ens-cachan.fr>
// <orhg5ff544.fsf@iguacu.dcc.unicamp.br>
// <199803041125.MAA06937@cor.dptmaths.ens-cachan.fr>
// <orn2f6ek92.fsf@iguacu.dcc.unicamp.br> <19980304102900.46897@dgii.com>
// From: Alexandre Oliva <oliva@dcc.unicamp.br>
// Date: 06 Mar 1998 01:43:18 -0300

template <int*>
class X {};

template <typename T>
void g();

struct S;

template <typename T>
struct R;

class B {
protected:
  int i; // { dg-message "" } protected
  static int j;
};

class D : public B {
  friend void f();
  template <typename T>
  friend void g();
  friend struct S;
  template <typename T>
  friend struct R;
};

struct S {
  void h();
  X<&B::j> x;
};

template <typename T>
struct R {
  void h();
  X<&B::j> x;
};

B b;
D d;

void f()
{
    b.i = 3; // { dg-error "" } in this context
    d.i = 4;
    B::j = 5;
    D::j = 6;
}

template <typename T>
void g()
{
    b.i = 3; // { dg-error "" } in this context
    d.i = 4;
    B::j = 5;
    D::j = 6;
}

template void g<int>();

void S::h()
{
  b.i = 3; // { dg-error "" } in this context
  d.i = 4;
  B::j = 5;
  D::j = 6;
}

template <typename T>
void R<T>::h() 
{
  b.i = 3; // { dg-error "" } in this context
  d.i = 4;
  B::j = 5;
  D::j = 6;
}

template struct R<double>;
