Update copyright notices with scripts/update-copyrights
[glibc.git] / setjmp / bug269-setjmp.c
blobba4aa3591cc955544ba56c6c628ba6e0d9e916c3
1 /* Copyright (C) 2004-2014 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
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.
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.
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/>. */
18 /* Test case for Bugzilla # 269 */
20 #include <stdio.h>
21 #include <setjmp.h>
22 #include <stdlib.h>
24 jmp_buf buf1;
25 jmp_buf buf2;
26 int *p;
27 int n_x = 6;
29 static int g_counter = 0;
31 int
32 f (void)
34 static int counter = 0;
35 static int way_point1 = 3;
36 static int way_point2 = 2;
37 int lose = 0;
39 if (setjmp (buf1) != 101)
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
50 _setjmp (buf2);
51 _longjmp (buf1, 101);
55 way_point1--;
57 if (counter == 0)
59 counter++;
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
70 _setjmp (buf2);
71 _longjmp (buf1, 101);
76 way_point2--;
78 if (counter == 1)
80 counter++;
81 longjmp (buf2, 2);
84 lose = !(way_point1 == 0 && way_point2 == 0
85 && g_counter == 6 && counter == 2);
87 return lose;
90 static int
91 do_test (void)
93 int lose;
95 lose = f ();
97 if (lose)
98 puts ("Test FAILED!");
99 else
100 puts ("Test succeeded!");
102 return lose ? EXIT_FAILURE : EXIT_SUCCESS;
105 #define TEST_FUNCTION do_test ()
106 #include "../test-skeleton.c"