OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc2/] [gcc/] [testsuite/] [g++.old-deja/] [g++.other/] [pmf5.C] - Diff between revs 305 and 384

Only display areas with differences | Details | Blame | View Log

Rev 305 Rev 384
// { dg-do run  }
// { dg-do run  }
// Bug: g++ expanded b->member() multiple times, causing the optimizer to
// Bug: g++ expanded b->member() multiple times, causing the optimizer to
// decide that things weren't related and optimize 'die' into an infinite
// decide that things weren't related and optimize 'die' into an infinite
// loop.
// loop.
struct A {
struct A {
  virtual ~A() { }
  virtual ~A() { }
  void f (bool) { }
  void f (bool) { }
};
};
typedef void (A::*pmf_void)();
typedef void (A::*pmf_void)();
typedef void (A::*pmf_bool)(bool);
typedef void (A::*pmf_bool)(bool);
struct B {
struct B {
  ~B() {}
  ~B() {}
  pmf_void member() const { return mbr; }
  pmf_void member() const { return mbr; }
  pmf_void mbr;
  pmf_void mbr;
};
};
A *a;
A *a;
B *b;
B *b;
void die (bool param) {
void die (bool param) {
  pmf_bool pmf = (pmf_bool)(b->member());
  pmf_bool pmf = (pmf_bool)(b->member());
  (a->*pmf)(param);
  (a->*pmf)(param);
}
}
int main ()
int main ()
{
{
  A a2;
  A a2;
  B b2;
  B b2;
  b2.mbr = reinterpret_cast(&A::f);
  b2.mbr = reinterpret_cast(&A::f);
  a = &a2;
  a = &a2;
  b = &b2;
  b = &b2;
  die (true);
  die (true);
}
}
 
 

powered by: WebSVN 2.1.0

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