Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / gcc / testsuite / g++.old-deja / g++.other / pmf5.C
blob73fcedae060a54df4e318560fea390c882d58525
1 // { dg-do run  }
2 // Bug: g++ expanded b->member() multiple times, causing the optimizer to
3 // decide that things weren't related and optimize 'die' into an infinite
4 // loop.
6 struct A {
7   virtual ~A() { }
8   void f (bool) { }
9 };
11 typedef void (A::*pmf_void)();
12 typedef void (A::*pmf_bool)(bool);
14 struct B {
15   ~B() {}
16   pmf_void member() const { return mbr; }
17   pmf_void mbr;
20 A *a;
21 B *b;
23 void die (bool param) {
24   pmf_bool pmf = (pmf_bool)(b->member());
25   (a->*pmf)(param);
28 int main ()
30   A a2;
31   B b2;
33   b2.mbr = reinterpret_cast<pmf_void>(&A::f);
35   a = &a2;
36   b = &b2;
38   die (true);