summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.other/pmf4.C
blob: cefb3616c67c9502a38b3694ace72ce579740d0e (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
// { dg-do run  }
// Bug: g++ doesn't compensate for finding a virtual function in a
// non-primary vtable when generating PMFs.
// Submitted by Jason Merrill <jason@cygnus.com>

struct A {
  virtual ~A() {}
};

struct B {
  virtual void f () = 0;
};

struct C : public A, public B {
  void f ();
};

void (C::* B_f)() = &B::f;	// this works
void (C::* C_f)() = &C::f;	// this breaks

C* p;

void C::f ()
{
  p = this;
}

int main()
{
  C c;

  (c.*B_f)();
  if (p != &c)
    return 1;

  (c.*C_f)();
  if (p != &c)
    return 1;
}