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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [cleanup-5.c] - Blame information for rev 801

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

Line No. Rev Author Line
1 689 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 <unwind.h>
8
#include <stdlib.h>
9
#include <string.h>
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 = malloc (sizeof (*exc));
26
  memset (&exc->exception_class, 0, sizeof (exc->exception_class));
27
  exc->exception_cleanup = 0;
28
 
29
#ifndef __USING_SJLJ_EXCEPTIONS__
30
  _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
31
#else
32
  _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0);
33
#endif
34
 
35
  abort ();
36
}
37
 
38
static void handler (void *p __attribute__((unused)))
39
{
40
  exit (0);
41
}
42
 
43
static void doit ()
44
{
45
  char dummy __attribute__((cleanup (handler)));
46
  force_unwind ();
47
}
48
 
49
int main()
50
{
51
  doit ();
52
  abort ();
53
}

powered by: WebSVN 2.1.0

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