| /* APPLE LOCAL file Radar 4475058 */ |
| /* { dg-compile } */ |
| /* { dg-options "-O" } */ |
| |
| struct C1 |
| { |
| }; |
| |
| template <class T> class T1 |
| { |
| private: |
| T * _p; |
| public: |
| T * operator -> () { return _p; } |
| }; |
| |
| class C2 : public C1 |
| { |
| }; |
| |
| class C3 |
| { |
| public: |
| C1 * _c3f1(C2 *k, C1 *v); |
| C2 * c3f1(C2 *k, C2 *v) { return (C2 *)_c3f1(k, v); } |
| }; |
| |
| typedef T1<C3> RC3; |
| class C4 |
| { |
| public: |
| void c4f1( C4 * p); |
| protected: |
| RC3 _pN; |
| }; |
| |
| C2 *foo (C2 **p) |
| { |
| return *p; |
| } |
| |
| class C5 : public C2 |
| { |
| }; |
| |
| void C4::c4f1( C4 * p) |
| { |
| C2 * k; |
| C5 * n; |
| |
| while ( ( n = (static_cast<C5*>(foo (&k))))) |
| _pN->c3f1( k, n); |
| } |
| |