aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/R4475058.C
blob: 5454b16edc1b6564ae516c74839dd3c948dfb161 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* 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);  
}