OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.old-deja/] [g++.mike/] [pmf2.C] - Blame information for rev 699

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 699 jeremybenn
// { dg-do run  }
2
extern "C" int printf(const char *, ...);
3
 
4
class A_table {
5
  int c;
6
public:
7
  A_table() { c = 3;}
8
  virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);}
9
};
10
 
11
class B_table : private A_table {
12
public:
13
  typedef void (B_table::* B_ti_fn) (int &item);
14
  B_table() { j = 0x4321;}
15
  virtual void call_fn_fn1(int &item, void *pfn1);
16
  void func1(int &item) { printf("func1(%d)\n",item);}
17
  virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);}
18
  int j;
19
};
20
 
21
class foo : public A_table {
22
public:
23
  int i;
24
  virtual ~foo();
25
  virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);}
26
};
27
foo::~foo() { i = 0;}
28
 
29
class bar :public foo,public B_table {
30
public:
31
  int w;
32
  virtual ~bar();
33
  virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);}
34
};
35
bar::~bar() { w = 0;}
36
 
37
void B_table::call_fn_fn1(int &item, void *pfn1) {
38
  (this->*(*(B_ti_fn*)pfn1))(item);
39
}
40
 
41
B_table b;
42
bar jar;
43
 
44
int main() {
45
  printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b);
46
  B_table::B_ti_fn z = &B_table::func1;
47
  int j = 1;
48
  jar.call_fn_fn1(j,(void *)&z);
49
  j++;
50
  z = &B_table::func2;
51
  b.call_fn_fn1(j,(void *)&z);
52
  j++;
53
  jar.call_fn_fn1(j,(void *)&z);
54
  return 0;
55
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.