1 // Bug: g++ expanded b->member() multiple times, causing the optimizer to
2 // decide that things weren't related and optimize 'die' into an infinite
3 // loop.
4 
5 struct A {
~AA6   virtual ~A() { }
fA7   void f (bool) { }
8 };
9 
10 typedef void (A::*pmf_void)();
11 typedef void (A::*pmf_bool)(bool);
12 
13 struct B {
~BB14   ~B() {}
memberB15   pmf_void member() const { return mbr; }
16   pmf_void mbr;
17 };
18 
19 A *a;
20 B *b;
21 
die(bool param)22 void die (bool param) {
23   pmf_bool pmf = (pmf_bool)(b->member());
24   (a->*pmf)(param);
25 }
26 
main()27 int main ()
28 {
29   A a2;
30   B b2;
31 
32   b2.mbr = reinterpret_cast<pmf_void>(&A::f);
33 
34   a = &a2;
35   b = &b2;
36 
37   die (true);
38 }
39