// PR target/30230
// This testcase failed on IA-64, where end of an EH region ended
// in the middle of a bundle (with br.call insn in first or second
// slot of .bbb/.mbb bundles and EH region end right after it).
// But br.call returns to the start of the next bundlem so during
// unwinding the call was considered to be outside of the EH region
// while it should have been inside.
// { dg-do run }
// { dg-require-weak "" }
// { dg-options "-O2" }

struct A {};
struct B { virtual ~B(); };
B::~B () {}
struct C { void foo (short &, B &); };
struct D { void *d1; C *d2; virtual void virt (void) {} };
struct E { D *e1; B *e2; };
struct F { void bar (void *, B &); };
F *p __attribute__((weak));
volatile int r;

void C::foo (short &x, B &)
{
  if (r)
    throw A ();
  x = 1;
}

void F::bar (void *, B &)
{
  throw A ();
}

void baz (E &x)
{
  short g = 0;
  B b = *x.e2;
  x.e1->d2->foo (g, b);
  if (g)
    p->bar(x.e1->d1, b);
}

int main ()
{
  F g;
  D s;
  E h;
  p = &g;
  h.e1 = &s;
  try
    {
      baz (h);
    }
  catch (A &)
    {
    }
  return 0;
}
