~ubuntu-branches/ubuntu/raring/avr-libc/raring-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/stdlib/setjmp-1.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.2.1 upstream) (8 intrepid)
  • mto: (4.1.7 sid)
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: james.westby@ubuntu.com-20080810095916-7ku06pjsfia3hz16
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test of setjmp()/longjmp() functions: return value.
 
2
   $Id: setjmp-1.c,v 1.1.2.2 2008/03/24 11:29:54 dmix Exp $     */
 
3
 
 
4
#include <stdlib.h>
 
5
#include <setjmp.h>
 
6
 
 
7
jmp_buf env;
 
8
 
 
9
int main ()
 
10
{
 
11
    int (* volatile v_setjmp) (jmp_buf);
 
12
    void (* volatile v_longjmp) (jmp_buf, int);
 
13
 
 
14
    /* Return 0 from setjmp().  */
 
15
    if (setjmp (env))
 
16
        exit (__LINE__);
 
17
 
 
18
    /* Pass value throw longjmp().      */
 
19
    switch (setjmp (env)) {
 
20
        case 0:
 
21
            longjmp (env, 12345);
 
22
            exit (__LINE__);
 
23
        case 12345:
 
24
            break;
 
25
        default:
 
26
            exit (__LINE__);
 
27
    }
 
28
 
 
29
    /* Replace 0 arg of longjmp().      */
 
30
    switch (setjmp (env)) {
 
31
        case 0:
 
32
            longjmp (env, 0);
 
33
            exit (__LINE__);
 
34
        case 1:
 
35
            break;
 
36
        default:
 
37
            exit (__LINE__);
 
38
    }
 
39
 
 
40
    /* Check -1 value.  */
 
41
    switch (setjmp (env)) {
 
42
        case 0:
 
43
            longjmp (env, -1);
 
44
            exit (__LINE__);
 
45
        case -1:
 
46
            break;
 
47
        default:
 
48
            exit (__LINE__);
 
49
    }
 
50
 
 
51
    /* Repeat above with volatile function pointers: exclude
 
52
       posible compiler optimization.   */
 
53
    v_setjmp = setjmp;
 
54
    v_longjmp = longjmp;
 
55
 
 
56
    if (v_setjmp (env))
 
57
        exit (__LINE__);
 
58
 
 
59
    switch (v_setjmp (env)) {
 
60
        case 0:
 
61
            v_longjmp (env, 12345);
 
62
            exit (__LINE__);
 
63
        case 12345:
 
64
            break;
 
65
        default:
 
66
            exit (__LINE__);
 
67
    }
 
68
 
 
69
    switch (v_setjmp (env)) {
 
70
        case 0:
 
71
            v_longjmp (env, 0);
 
72
            exit (__LINE__);
 
73
        case 1:
 
74
            break;
 
75
        default:
 
76
            exit (__LINE__);
 
77
    }
 
78
    
 
79
    switch (v_setjmp (env)) {
 
80
        case 0:
 
81
            v_longjmp (env, -1);
 
82
            exit (__LINE__);
 
83
        case -1:
 
84
            break;
 
85
        default:
 
86
            exit (__LINE__);
 
87
    }
 
88
 
 
89
    return 0;
 
90
}