OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [eh/] [ia64-2.C] - Blame information for rev 749

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
// PR target/30230
2
// This testcase failed on IA-64, where end of an EH region ended
3
// in the middle of a bundle (with br.call insn in first or second
4
// slot of .bbb/.mbb bundles and EH region end right after it).
5
// But br.call returns to the start of the next bundlem so during
6
// unwinding the call was considered to be outside of the EH region
7
// while it should have been inside.
8
// { dg-do run }
9
// { dg-require-weak "" }
10
// { dg-options "-O2" }
11
 
12
struct A {};
13
struct B { virtual ~B(); };
14
B::~B () {}
15
struct C { void foo (short &, B &); };
16
struct D { void *d1; C *d2; virtual void virt (void) {} };
17
struct E { D *e1; B *e2; };
18
struct F { void bar (void *, B &); };
19
F *p __attribute__((weak));
20
volatile int r;
21
 
22
void C::foo (short &x, B &)
23
{
24
  if (r)
25
    throw A ();
26
  x = 1;
27
}
28
 
29
void F::bar (void *, B &)
30
{
31
  throw A ();
32
}
33
 
34
void baz (E &x)
35
{
36
  short g = 0;
37
  B b = *x.e2;
38
  x.e1->d2->foo (g, b);
39
  if (g)
40
    p->bar(x.e1->d1, b);
41
}
42
 
43
int main ()
44
{
45
  F g;
46
  D s;
47
  E h;
48
  p = &g;
49
  h.e1 = &s;
50
  try
51
    {
52
      baz (h);
53
    }
54
  catch (A &)
55
    {
56
    }
57
  return 0;
58
}

powered by: WebSVN 2.1.0

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