// { dg-do compile }
// { dg-options "-O1 -fdevirtualize -finline-small-functions -fipa-cp -fipa-cp-clone --param ipa-cp-eval-threshold=125 --param max-inline-insns-single=4" }

extern "C" int printf (const char *, ...);
enum E { vf_request, vf_event } want;

int errs = 0;

class ivResource {
public:
  virtual ~ivResource () { }
};

class ivHandler   : public ivResource   {
public:
  virtual void event() { }
};

class ivGlyph   : public ivResource   {
public:
  virtual ~ivGlyph  () { }
  virtual void request () {
    if (want!=vf_request)
      ++errs;
  }
};

class ItemView : public ivGlyph, public ivHandler {
public:
  virtual void event () {
    if (want!=vf_event)
      ++errs;
  }
} a;

ivGlyph *bar() {
  return &a;
}

ivHandler *bar2() {
  return &a;
}

int main() {
  want=vf_request;
  bar()->request();
  want=vf_event;
  bar2()->event();
  if (errs) {
    printf("FAIL\n");
    return 1;
  }
  printf("PASS\n");
  return 0;
}
