|
|
1.1 root 1: /* The Plum Hall Validation Suite for C
2: * Unpublished copyright (c) 1986-1991, Chiron Systems Inc and Plum Hall Inc.
3: * VERSION: 4
4: * DATE: 1993-01-01
5: * The "ANSI" mode of this suite corresponds to official ANSI C, X3.159-1989.
6: * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site
7: * without specific permission from Plum Hall Inc.
8: */
9:
10:
11: #include "flags.h"
12: #ifndef SKIP46
13: #define LIB_TEST 1
14: #include "defs.h"
15:
16: /*
17: * 4.6 - Non-Local jumps
18: */
19:
20: #include <setjmp.h>
21: void d4_6x();
22:
23: static jmp_buf buffer;
24: static int count = 0;
25: void d4_6()
26: {
27: #if ANSI
28: volatile int i;
29: #else
30: int i;
31: #endif
32:
33: Filename = "d46.c";
34:
35: /* 4.6.1.1 setjmp
36: */
37:
38: /* test in the context of an if */
39: if (setjmp(buffer) == 0)
40: {
41: /* first time through */
42: iequals(__LINE__, count, 0);
43: d4_6x();
44: }
45: else
46: iequals(__LINE__, count, 1);
47:
48:
49:
50:
51:
52:
53: /* now make sure that it works in the context of a switch */
54: count = 0;
55: switch (setjmp(buffer))
56: {
57: case 0: /* initial call, no longjmp */
58: iequals(__LINE__, count, 0);
59: break;
60: case 2: /* after first longjmp call */
61: iequals(__LINE__, count, 1);
62: #if ANSI
63: iequals(__LINE__, i++, 17);
64: #else
65: iequals(-__LINE__, i++, 17);
66: #endif
67: d4_6x();
68: break;
69: case 1: /* after second longjmp call */
70: /* longjmp with arg of 0 makes setjmp return non-zero */
71: iequals(__LINE__, count, 2);
72: #if ANSI
73: iequals(__LINE__, i, 18);
74: #else
75: iequals(-__LINE__, i, 18);
76: #endif
77: return;
78: }
79:
80: i = 17;
81: d4_6x();
82: }
83:
84: void d4_6x()
85: {
86: /* 4.6.1.2 longjmp
87: */
88: if (count++ == 0)
89: longjmp(buffer, 2);
90: else
91: longjmp(buffer, 0);
92:
93: /* this statement never reached */
94: complain(__LINE__);
95: }
96:
97:
98: #else /* if SKIP46 */
99: void d4_6() { pr_skip("d4_6: SKIPPED ENTIRELY\n"); }
100: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.