source: EcnlProtoTool/trunk/tcc-0.9.26/tests/boundtest.c@ 279

Last change on this file since 279 was 279, checked in by coas-nagasima, 7 years ago

ファイルを追加、更新。

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 3.1 KB
RevLine 
[279]1#include <stdlib.h>
2#include <stdio.h>
3
4#define NB_ITS 1000000
5//#define NB_ITS 1
6#define TAB_SIZE 100
7
8int tab[TAB_SIZE];
9int ret_sum;
10char tab3[256];
11
12int test1(void)
13{
14 int i, sum = 0;
15 for(i=0;i<TAB_SIZE;i++) {
16 sum += tab[i];
17 }
18 return sum;
19}
20
21/* error */
22int test2(void)
23{
24 int i, sum = 0;
25 for(i=0;i<TAB_SIZE + 1;i++) {
26 sum += tab[i];
27 }
28 return sum;
29}
30
31/* actually, profiling test */
32int test3(void)
33{
34 int sum;
35 int i, it;
36
37 sum = 0;
38 for(it=0;it<NB_ITS;it++) {
39 for(i=0;i<TAB_SIZE;i++) {
40 sum += tab[i];
41 }
42 }
43 return sum;
44}
45
46/* ok */
47int test4(void)
48{
49 int i, sum = 0;
50 int *tab4;
51
52 tab4 = malloc(20 * sizeof(int));
53 for(i=0;i<20;i++) {
54 sum += tab4[i];
55 }
56 free(tab4);
57
58 return sum;
59}
60
61/* error */
62int test5(void)
63{
64 int i, sum = 0;
65 int *tab4;
66
67 tab4 = malloc(20 * sizeof(int));
68 for(i=0;i<21;i++) {
69 sum += tab4[i];
70 }
71 free(tab4);
72
73 return sum;
74}
75
76/* error */
77/* XXX: currently: bug */
78int test6(void)
79{
80 int i, sum = 0;
81 int *tab4;
82
83 tab4 = malloc(20 * sizeof(int));
84 free(tab4);
85 for(i=0;i<21;i++) {
86 sum += tab4[i];
87 }
88
89 return sum;
90}
91
92/* error */
93int test7(void)
94{
95 int i, sum = 0;
96 int *p;
97
98 for(i=0;i<TAB_SIZE + 1;i++) {
99 p = &tab[i];
100 if (i == TAB_SIZE)
101 printf("i=%d %x\n", i, p);
102 sum += *p;
103 }
104 return sum;
105}
106
107/* ok */
108int test8(void)
109{
110 int i, sum = 0;
111 int tab[10];
112
113 for(i=0;i<10;i++) {
114 sum += tab[i];
115 }
116 return sum;
117}
118
119/* error */
120int test9(void)
121{
122 int i, sum = 0;
123 char tab[10];
124
125 for(i=0;i<11;i++) {
126 sum += tab[i];
127 }
128 return sum;
129}
130
131/* ok */
132int test10(void)
133{
134 char tab[10];
135 char tab1[10];
136
137 memset(tab, 0, 10);
138 memcpy(tab, tab1, 10);
139 memmove(tab, tab1, 10);
140 return 0;
141}
142
143/* error */
144int test11(void)
145{
146 char tab[10];
147
148 memset(tab, 0, 11);
149 return 0;
150}
151
152/* error */
153int test12(void)
154{
155 void *ptr;
156 ptr = malloc(10);
157 free(ptr);
158 free(ptr);
159 return 0;
160}
161
162/* error */
163int test13(void)
164{
165 char pad1 = 0;
166 char tab[10];
167 char pad2 = 0;
168 memset(tab, 'a', sizeof(tab));
169 return strlen(tab);
170}
171
172int test14(void)
173{
174 char *p = alloca(TAB_SIZE);
175 memset(p, 'a', TAB_SIZE);
176 p[TAB_SIZE-1] = 0;
177 return strlen(p);
178}
179
180/* error */
181int test15(void)
182{
183 char *p = alloca(TAB_SIZE-1);
184 memset(p, 'a', TAB_SIZE);
185 p[TAB_SIZE-1] = 0;
186 return strlen(p);
187}
188
189int (*table_test[])(void) = {
190 test1,
191 test1,
192 test2,
193 test3,
194 test4,
195 test5,
196 test6,
197 test7,
198 test8,
199 test9,
200 test10,
201 test11,
202 test12,
203 test13,
204 test14,
205 test15,
206};
207
208int main(int argc, char **argv)
209{
210 int index;
211 int (*ftest)(void);
212
213 if (argc < 2) {
214 printf("usage: boundtest n\n"
215 "test TCC bound checking system\n"
216 );
217 exit(1);
218 }
219
220 index = 0;
221 if (argc >= 2)
222 index = atoi(argv[1]);
223 /* well, we also use bounds on this ! */
224 ftest = table_test[index];
225 ftest();
226
227 return 0;
228}
229
230/*
231 * without bound 0.77 s
232 * with bounds 4.73
233 */
Note: See TracBrowser for help on using the repository browser.