// { dg-do assemble } class A { public: int i; A(int j) : i(j){} }; class B : protected A { public: B(int j) : A(j){} void f(){ A k(*this); } }; class C : protected B { public: C(int j) : B(j){} void f(); void g(){ A k(i); } }; class D : public C { public: D(int w) : C(i) {} void j() { A k(*this); } void h() { i=3; } }; void C::f() { A k(*this); } B b(3); int main() { A *z = &b; // { dg-error "" } }