annotate CbC-examples/return_check/variable_return_type.c @ 42:9e4f9e20b8f1

add some examples.
author kent@teto.cr.ie.u-ryukyu.ac.jp
date Mon, 25 Jan 2010 17:13:59 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 #include<stdio.h>
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2 #include<assert.h>
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 #define dprint(f, args...) \
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 fprintf(stdout, "in %s\t: "f, __FUNCTION__, ## args)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8 /* for integer. */
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 int goodint = 33;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 int badint = 0;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 typedef void (*RETINT_FUNC)(int, void *);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12 void g_int(RETINT_FUNC func)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 func(goodint, NULL);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 int f_int()
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 void *ret;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 ret = _CbC_return;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 dprint("fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 dprint("__return_func = %p\n", ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 g_int(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 //goto g(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 dprint("not good\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 return badint;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 /* for double. */
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 double gooddouble = 333.3;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 double baddouble = 0.00;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 typedef void (*RETDOUBLE_FUNC)(double, void *);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 void g_double(RETDOUBLE_FUNC func)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 func(gooddouble, NULL);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 double f_double()
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 void *ret;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 ret = _CbC_return;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 dprint("fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 dprint("__return_func = %p\n", ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 g_double(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 //goto g_double(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 dprint("not good\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 return baddouble;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 /* for float. */
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 float goodfloat = 33.3f;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 float badfloat = 0.0f;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 typedef void (*RETFLOAT_FUNC)(float, void *);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 void g_float(RETFLOAT_FUNC func)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 func(goodfloat, NULL);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 float f_float()
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 void *ret;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 ret = _CbC_return;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 dprint("fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 dprint("__return_func = %p\n", ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
69 g_float(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70 //goto g_float(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
72 dprint("not good\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
73 return badfloat;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
74 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
75
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
76 /* for char. */
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
77 char goodchar = 33;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
78 char badchar = 0;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
79 typedef void (*RETCHAR_FUNC)(char, void *);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
80 void g_char(RETCHAR_FUNC func)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
81 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
82 func(goodchar, NULL);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
83 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
84 char f_char()
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
85 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
86 void *ret;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
87
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
88 ret = _CbC_return;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
89
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
90 dprint("fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
91 dprint("__return_func = %p\n", ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
92 g_char(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
93 //goto g(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
94
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
95 dprint("not good\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
96 return badchar;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
97 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
98
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
99
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
100 /* for struct. */
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
101 struct ifid {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
102 int a;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
103 float b;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
104 int c[4];
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
105 double d;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
106 };
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
107 struct ifid goodstruct = {33, 33.3, {4,4,4,4}, 333.333};
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
108 struct ifid badstruct = {0, 00.0, {0,0,0,0}, 0.0};
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
109 typedef void (*RETSTRUCT_FUNC)(struct ifid, void *);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
110 void g_struct(RETSTRUCT_FUNC func)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
111 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
112 func(goodstruct, NULL);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
113 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
114 struct ifid f_struct()
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
115 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
116 void *ret;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
117
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
118 ret = _CbC_return;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
119
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
120 dprint("fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
121 dprint("__return_func = %p\n", ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
122 g_struct(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
123 //goto g(ret);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
124
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
125 dprint("not good\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
126 return badstruct;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
127 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
128
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
129 int main(int argc, char **argv)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
130 {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
131 void *bptr;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
132 int rint;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
133 float rfloat;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
134 double rdouble;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
135 char rchar;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
136 struct ifid rstruct;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
137
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
138 bptr = __builtin_frame_address(0);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
139
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
140 dprint("before int: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
141 rint = f_int();
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
142 dprint("f_int = %d, good=%d,bad=%d\n", rint,goodint,badint);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
143
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
144 dprint("before float: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
145 rfloat = f_float();
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
146 dprint("f_float = %3.3f, good=%3.3f,bad=%3.3f\n", rfloat,goodfloat,badfloat);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
147 assert(bptr==__builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
148
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
149 dprint("before double: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
150 rdouble = f_double();
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
151 dprint("f_double = %3.3lf, good=%3.3lf,bad=%3.3lf\n", rdouble,gooddouble,baddouble);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
152 assert(bptr==__builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
153
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
154 dprint("before char: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
155 rchar = f_char();
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
156 dprint("f_char = %d, good=%d,bad=%d\n", rchar,goodchar,badchar);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
157 assert(bptr==__builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
158
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
159 dprint("before struct: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
160 rstruct = f_struct();
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
161 dprint( "return value = {\n"
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
162 " a = %d\n"
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
163 " b = %2.3f\n"
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
164 " c = { %d, %d, %d, %d }\n"
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
165 " d = %3.3f\n"
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
166 "}\n", rstruct.a, rstruct.b,
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
167 rstruct.c[0],rstruct.c[1],rstruct.c[2],rstruct.c[3], rstruct.d);
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
168
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
169
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
170
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
171 dprint("end: fp = %p\n", __builtin_frame_address(0));
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
172
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
173 if (bptr!=__builtin_frame_address(0)) {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
174 dprint("CbC_return failure!\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
175 return 1;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
176 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
177 if ( rint!=goodint
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
178 || rchar!=goodchar
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
179 || (rfloat < goodfloat-0.01 || goodfloat+0.01 < rfloat)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
180 || (rdouble < gooddouble-0.01 || gooddouble+0.01 < rdouble)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
181 || rstruct.a!=goodstruct.a
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
182 || (rstruct.b < goodstruct.b-0.01 || goodstruct.b+0.01 < rstruct.b)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
183 || (rstruct.d < goodstruct.d-0.01 || goodstruct.d+0.01 < rstruct.d)
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
184 || rstruct.c[0]!=goodstruct.c[0]
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
185 || rstruct.c[1]!=goodstruct.c[1]
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
186 || rstruct.c[2]!=goodstruct.c[2]
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
187 || rstruct.c[3]!=goodstruct.c[3] ) {
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
188 dprint("CbC_return failure!\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
189 return 1;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
190 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
191
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
192
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
193 dprint("CbC_return successful!\n");
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
194 return 0;
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
195 }
9e4f9e20b8f1 add some examples.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
196