]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/l4re-core/uclibc/lib/contrib/uclibc/test/setjmp/bug269-setjmp.c
Update
[l4.git] / l4 / pkg / l4re-core / uclibc / lib / contrib / uclibc / test / setjmp / bug269-setjmp.c
1 /* Copyright (C) 2004 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; If not, see
16    <http://www.gnu.org/licenses/>.  */
17
18 /* Test case for Bugzilla # 269 */
19
20 #include <stdio.h>
21 #include <setjmp.h>
22 #include <stdlib.h>
23
24 jmp_buf buf1;
25 jmp_buf buf2;
26 int *p;
27 int n_x = 6;
28
29 static int g_counter = 0;
30
31 static int
32 f (void)
33 {
34   static int counter = 0;
35   static int way_point1 = 3;
36   static int way_point2 = 2;
37   int lose = 0;
38
39   if (setjmp (buf1) != 101)
40     {
41       int a[n_x];               /* reallocate stack space */
42       g_counter++;
43       p = &a[0];
44       if (g_counter < 5)
45         longjmp (buf1, 2);
46       else if (g_counter == 5)
47         longjmp (buf1, 101);
48       else
49         {
50           _setjmp (buf2);
51           _longjmp (buf1, 101);
52         }
53     }
54
55   way_point1--;
56
57   if (counter == 0)
58     {
59       counter++;
60       {
61         int a[n_x];             /* reallocate stack space */
62         g_counter++;
63         p = &a[0];
64         if (g_counter < 5)
65           longjmp (buf1, 2);
66         else if (g_counter == 5)
67           longjmp (buf1, 101);
68         else
69           {
70             _setjmp (buf2);
71             _longjmp (buf1, 101);
72           }
73       }
74     }
75
76   way_point2--;
77
78   if (counter == 1)
79     {
80       counter++;
81       longjmp (buf2, 2);
82     }
83
84   lose = !(way_point1 == 0 && way_point2 == 0
85            && g_counter == 6 && counter == 2);
86
87   return lose;
88 }
89
90 static int
91 do_test (void)
92 {
93   int lose;
94
95   lose = f ();
96
97   if (lose)
98     puts ("Test FAILED!");
99   else
100     puts ("Test succeeded!");
101
102   return lose ? EXIT_FAILURE : EXIT_SUCCESS;
103 }
104
105 #define TEST_FUNCTION do_test ()
106 #include "../test-skeleton.c"