]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/cleanup-12.c
Get rid of dg-skip-if etc. default args
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / cleanup-12.c
CommitLineData
541d3103
JJ
1/* PR middle-end/32758 */
2/* HP-UX libunwind.so doesn't provide _UA_END_OF_STACK */
3/* { dg-do run } */
4/* { dg-options "-O2 -fexceptions" } */
4f4b0ab8
RO
5/* { dg-skip-if "" { "ia64-*-hpux11.*" } } */
6/* { dg-skip-if "" { ! nonlocal_goto } } */
541d3103
JJ
7/* Verify unwind info in presence of alloca. */
8
9#include <unwind.h>
10#include <stdlib.h>
11#include <string.h>
12
13static _Unwind_Reason_Code
14force_unwind_stop (int version, _Unwind_Action actions,
15 _Unwind_Exception_Class exc_class,
16 struct _Unwind_Exception *exc_obj,
17 struct _Unwind_Context *context,
18 void *stop_parameter)
19{
20 if (actions & _UA_END_OF_STACK)
21 abort ();
22 return _URC_NO_REASON;
23}
24
25static void force_unwind (void)
26{
27 struct _Unwind_Exception *exc = malloc (sizeof (*exc));
28 memset (&exc->exception_class, 0, sizeof (exc->exception_class));
29 exc->exception_cleanup = 0;
30
31#ifndef __USING_SJLJ_EXCEPTIONS__
32 _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
33#else
34 _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0);
35#endif
36
37 abort ();
38}
39
40__attribute__((noinline))
41void foo (void *x __attribute__((unused)))
42{
43 force_unwind ();
44}
45
46__attribute__((noinline))
47int bar (unsigned int x)
48{
49 void *y = __builtin_alloca (x);
50 foo (y);
51 return 1;
52}
53
54static void handler (void *p __attribute__((unused)))
55{
56 exit (0);
57}
58
59__attribute__((noinline))
60static void doit ()
61{
62 char dummy __attribute__((cleanup (handler)));
63 bar (1024);
64}
65
66int main ()
67{
68 doit ();
69 abort ();
70}