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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [g++.dg/] [ext/] [cleanup-5.C] - Blame information for rev 301

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 301 jeremybenn
/* HP-UX libunwind.so doesn't provide _UA_END_OF_STACK */
2
/* { dg-do run } */
3
/* { dg-options "-fexceptions" } */
4
/* { dg-skip-if "" { "ia64-*-hpux11.*" }  { "*" } { "" } } */
5
/* Verify that cleanups work with exception handling.  */
6
 
7
#include 
8
#include 
9
#include 
10
 
11
static _Unwind_Reason_Code
12
force_unwind_stop (int version, _Unwind_Action actions,
13
                   _Unwind_Exception_Class exc_class,
14
                   struct _Unwind_Exception *exc_obj,
15
                   struct _Unwind_Context *context,
16
                   void *stop_parameter)
17
{
18
  if (actions & _UA_END_OF_STACK)
19
    abort ();
20
  return _URC_NO_REASON;
21
}
22
 
23
static void force_unwind ()
24
{
25
  struct _Unwind_Exception *exc
26
    = (struct _Unwind_Exception *) malloc (sizeof (*exc));
27
  memset (&exc->exception_class, 0, sizeof (exc->exception_class));
28
  exc->exception_cleanup = 0;
29
 
30
#ifndef __USING_SJLJ_EXCEPTIONS__
31
  _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
32
#else
33
  _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0);
34
#endif
35
 
36
  abort ();
37
}
38
 
39
static void handler (void *p __attribute__((unused)))
40
{
41
  exit (0);
42
}
43
 
44
static void doit ()
45
{
46
  char dummy __attribute__((cleanup (handler)));
47
  force_unwind ();
48
}
49
 
50
int main()
51
{
52
  doit ();
53
  abort ();
54
}

powered by: WebSVN 2.1.0

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