OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.dg/] [ext/] [builtin-object-size1.C] - Blame information for rev 338

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 301 jeremybenn
// { dg-do run }
2
// { dg-options "-O2" }
3
 
4
typedef __SIZE_TYPE__ size_t;
5
extern "C" void abort ();
6
extern "C" void exit (int);
7
extern "C" void *malloc (size_t);
8
extern "C" void free (void *);
9
 
10
struct A
11
{
12
  char a[10];
13
  int b;
14
  char c[10];
15
};
16
 
17
void
18
__attribute__ ((noinline))
19
test1 (A *p)
20
{
21
  char *c;
22
  if (__builtin_object_size (&p->a, 0) != (size_t) -1)
23
    abort ();
24
  if (__builtin_object_size (&p->a[0], 0) != (size_t) -1)
25
    abort ();
26
  if (__builtin_object_size (&p->a[3], 0) != (size_t) -1)
27
    abort ();
28
  if (__builtin_object_size (&p->b, 0) != (size_t) -1)
29
    abort ();
30
  if (__builtin_object_size (&p->c, 0) != (size_t) -1)
31
    abort ();
32
  c = p->a;
33
  if (__builtin_object_size (c, 0) != (size_t) -1)
34
    abort ();
35
  c = &p->a[0];
36
  if (__builtin_object_size (c, 0) != (size_t) -1)
37
    abort ();
38
  c = &p->a[3];
39
  if (__builtin_object_size (c, 0) != (size_t) -1)
40
    abort ();
41
  c = (char *) &p->b;
42
  if (__builtin_object_size (c, 0) != (size_t) -1)
43
    abort ();
44
  c = (char *) &p->c;
45
  if (__builtin_object_size (c, 0) != (size_t) -1)
46
    abort ();
47
  if (__builtin_object_size (&p->a, 1) != sizeof (p->a))
48
    abort ();
49
  if (__builtin_object_size (&p->a[0], 1) != sizeof (p->a))
50
    abort ();
51
  if (__builtin_object_size (&p->a[3], 1) != sizeof (p->a) - 3)
52
    abort ();
53
  if (__builtin_object_size (&p->b, 1) != sizeof (p->b))
54
    abort ();
55
  if (__builtin_object_size (&p->c, 1) != (size_t) -1)
56
    abort ();
57
  c = p->a;
58
  if (__builtin_object_size (c, 1) != sizeof (p->a))
59
    abort ();
60
  c = &p->a[0];
61
  if (__builtin_object_size (c, 1) != sizeof (p->a))
62
    abort ();
63
  c = &p->a[3];
64
  if (__builtin_object_size (c, 1) != sizeof (p->a) - 3)
65
    abort ();
66
  c = (char *) &p->b;
67
  if (__builtin_object_size (c, 1) != sizeof (p->b))
68
    abort ();
69
  c = (char *) &p->c;
70
  if (__builtin_object_size (c, 1) != (size_t) -1)
71
    abort ();
72
  if (__builtin_object_size (&p->a, 2) != 0)
73
    abort ();
74
  if (__builtin_object_size (&p->a[0], 2) != 0)
75
    abort ();
76
  if (__builtin_object_size (&p->a[3], 2) != 0)
77
    abort ();
78
  if (__builtin_object_size (&p->b, 2) != 0)
79
    abort ();
80
  if (__builtin_object_size (&p->c, 2) != 0)
81
    abort ();
82
  c = p->a;
83
  if (__builtin_object_size (c, 2) != 0)
84
    abort ();
85
  c = &p->a[0];
86
  if (__builtin_object_size (c, 2) != 0)
87
    abort ();
88
  c = &p->a[3];
89
  if (__builtin_object_size (c, 2) != 0)
90
    abort ();
91
  c = (char *) &p->b;
92
  if (__builtin_object_size (c, 2) != 0)
93
    abort ();
94
  c = (char *) &p->c;
95
  if (__builtin_object_size (c, 2) != 0)
96
    abort ();
97
  if (__builtin_object_size (&p->a, 3) != sizeof (p->a))
98
    abort ();
99
  if (__builtin_object_size (&p->a[0], 3) != sizeof (p->a))
100
    abort ();
101
  if (__builtin_object_size (&p->a[3], 3) != sizeof (p->a) - 3)
102
    abort ();
103
  if (__builtin_object_size (&p->b, 3) != sizeof (p->b))
104
    abort ();
105
  if (__builtin_object_size (&p->c, 3) != 0)
106
    abort ();
107
  c = p->a;
108
  if (__builtin_object_size (c, 3) != sizeof (p->a))
109
    abort ();
110
  c = &p->a[0];
111
  if (__builtin_object_size (c, 3) != sizeof (p->a))
112
    abort ();
113
  c = &p->a[3];
114
  if (__builtin_object_size (c, 3) != sizeof (p->a) - 3)
115
    abort ();
116
  c = (char *) &p->b;
117
  if (__builtin_object_size (c, 3) != sizeof (p->b))
118
    abort ();
119
  c = (char *) &p->c;
120
  if (__builtin_object_size (c, 3) != 0)
121
    abort ();
122
}
123
 
124
void
125
__attribute__ ((noinline))
126
test2 (void)
127
{
128
  char *c;
129
  size_t s = 2 * sizeof (A);
130
  A *p = (A *) malloc (2 * sizeof (A));
131
  if (__builtin_object_size (&p->a, 0) != s)
132
    abort ();
133
  if (__builtin_object_size (&p->a[0], 0) != s)
134
    abort ();
135
  if (__builtin_object_size (&p->a[3], 0) != s - 3)
136
    abort ();
137
  if (__builtin_object_size (&p->b, 0) != s - __builtin_offsetof (A, b))
138
    abort ();
139
  if (__builtin_object_size (&p->c, 0) != s - __builtin_offsetof (A, c))
140
    abort ();
141
  c = p->a;
142
  if (__builtin_object_size (c, 0) != s)
143
    abort ();
144
  c = &p->a[0];
145
  if (__builtin_object_size (c, 0) != s)
146
    abort ();
147
  c = &p->a[3];
148
  if (__builtin_object_size (c, 0) != s - 3)
149
    abort ();
150
  c = (char *) &p->b;
151
  if (__builtin_object_size (c, 0) != s - __builtin_offsetof (A, b))
152
    abort ();
153
  c = (char *) &p->c;
154
  if (__builtin_object_size (c, 0) != s - __builtin_offsetof (A, c))
155
    abort ();
156
  if (__builtin_object_size (&p->a, 1) != sizeof (p->a))
157
    abort ();
158
  if (__builtin_object_size (&p->a[0], 1) != sizeof (p->a))
159
    abort ();
160
  if (__builtin_object_size (&p->a[3], 1) != sizeof (p->a) - 3)
161
    abort ();
162
  if (__builtin_object_size (&p->b, 1) != sizeof (p->b))
163
    abort ();
164
  if (__builtin_object_size (&p->c, 1) != s - __builtin_offsetof (A, c))
165
    abort ();
166
  c = p->a;
167
  if (__builtin_object_size (c, 1) != sizeof (p->a))
168
    abort ();
169
  c = &p->a[0];
170
  if (__builtin_object_size (c, 1) != sizeof (p->a))
171
    abort ();
172
  c = &p->a[3];
173
  if (__builtin_object_size (c, 1) != sizeof (p->a) - 3)
174
    abort ();
175
  c = (char *) &p->b;
176
  if (__builtin_object_size (c, 1) != sizeof (p->b))
177
    abort ();
178
  c = (char *) &p->c;
179
  if (__builtin_object_size (c, 1) != s - __builtin_offsetof (A, c))
180
    abort ();
181
  if (__builtin_object_size (&p->a, 2) != s)
182
    abort ();
183
  if (__builtin_object_size (&p->a[0], 2) != s)
184
    abort ();
185
  if (__builtin_object_size (&p->a[3], 2) != s - 3)
186
    abort ();
187
  if (__builtin_object_size (&p->b, 2) != s - __builtin_offsetof (A, b))
188
    abort ();
189
  if (__builtin_object_size (&p->c, 2) != s - __builtin_offsetof (A, c))
190
    abort ();
191
  c = p->a;
192
  if (__builtin_object_size (c, 2) != s)
193
    abort ();
194
  c = &p->a[0];
195
  if (__builtin_object_size (c, 2) != s)
196
    abort ();
197
  c = &p->a[3];
198
  if (__builtin_object_size (c, 2) != s - 3)
199
    abort ();
200
  c = (char *) &p->b;
201
  if (__builtin_object_size (c, 2) != s - __builtin_offsetof (A, b))
202
    abort ();
203
  c = (char *) &p->c;
204
  if (__builtin_object_size (c, 2) != s - __builtin_offsetof (A, c))
205
    abort ();
206
  if (__builtin_object_size (&p->a, 3) != sizeof (p->a))
207
    abort ();
208
  if (__builtin_object_size (&p->a[0], 3) != sizeof (p->a))
209
    abort ();
210
  if (__builtin_object_size (&p->a[3], 3) != sizeof (p->a) - 3)
211
    abort ();
212
  if (__builtin_object_size (&p->b, 3) != sizeof (p->b))
213
    abort ();
214
  if (__builtin_object_size (&p->c, 3) != s - __builtin_offsetof (A, c))
215
    abort ();
216
  c = p->a;
217
  if (__builtin_object_size (c, 3) != sizeof (p->a))
218
    abort ();
219
  c = &p->a[0];
220
  if (__builtin_object_size (c, 3) != sizeof (p->a))
221
    abort ();
222
  c = &p->a[3];
223
  if (__builtin_object_size (c, 3) != sizeof (p->a) - 3)
224
    abort ();
225
  c = (char *) &p->b;
226
  if (__builtin_object_size (c, 3) != sizeof (p->b))
227
    abort ();
228
  c = (char *) &p->c;
229
  if (__builtin_object_size (c, 3) != s - __builtin_offsetof (A, c))
230
    abort ();
231
  free (p);
232
}
233
 
234
void
235
__attribute__ ((noinline))
236
test3 (void)
237
{
238
  char *c;
239
  size_t s;
240
  A *p = (A *) malloc (4);
241
  if (__builtin_object_size (&p->a, 0) != 4)
242
    abort ();
243
  if (__builtin_object_size (&p->a[0], 0) != 4)
244
    abort ();
245
  if (__builtin_object_size (&p->a[3], 0) != 1)
246
    abort ();
247
  if (__builtin_object_size (&p->b, 0) != 0)
248
    abort ();
249
  if (__builtin_object_size (&p->c, 0) != 0)
250
    abort ();
251
  if (__builtin_object_size (&p->a, 1) != 4)
252
    abort ();
253
  if (__builtin_object_size (&p->a[0], 1) != 4)
254
    abort ();
255
  if (__builtin_object_size (&p->a[3], 1) != 1)
256
    abort ();
257
  if (__builtin_object_size (&p->b, 1) != 0)
258
    abort ();
259
  if (__builtin_object_size (&p->c, 1) != 0)
260
    abort ();
261
  free (p);
262
  s = __builtin_offsetof (A, c) + 4;
263
  p = (A *) malloc (s);
264
  if (__builtin_object_size (&p->a, 0) != s)
265
    abort ();
266
  if (__builtin_object_size (&p->a[0], 0) != s)
267
    abort ();
268
  if (__builtin_object_size (&p->a[3], 0) != s - 3)
269
    abort ();
270
  if (__builtin_object_size (&p->b, 0) != s - __builtin_offsetof (A, b))
271
    abort ();
272
  if (__builtin_object_size (&p->c, 0) != 4)
273
    abort ();
274
  if (__builtin_object_size (&p->a, 1) != sizeof (p->a))
275
    abort ();
276
  if (__builtin_object_size (&p->a[0], 1) != sizeof (p->a))
277
    abort ();
278
  if (__builtin_object_size (&p->a[3], 1) != sizeof (p->a) - 3)
279
    abort ();
280
  if (__builtin_object_size (&p->b, 1) != sizeof (p->b))
281
    abort ();
282
  if (__builtin_object_size (&p->c, 1) != 4)
283
    abort ();
284
  free (p);
285
}
286
 
287
struct B
288
{
289
  A a[4];
290
};
291
 
292
void
293
__attribute__ ((noinline))
294
test4 (struct B *q, int i)
295
{
296
  if (__builtin_object_size (&q->a[2].a[2], 1) != sizeof (q->a[0].a) - 2)
297
    abort ();
298
  if (__builtin_object_size (&q->a[2].c[2], 1) != sizeof (q->a[0].c) - 2)
299
    abort ();
300
  if (__builtin_object_size (&q->a[3].a[2], 1) != sizeof (q->a[0].a) - 2)
301
    abort ();
302
  if (__builtin_object_size (&q->a[3].c[2], 1) != sizeof (q->a[0].c) - 2)
303
    abort ();
304
  if (__builtin_object_size (&q->a[i].a[2], 1) != sizeof (q->a[0].a) - 2)
305
    abort ();
306
  if (__builtin_object_size (&q->a[i].c[2], 1) != sizeof (q->a[0].c) - 2)
307
    abort ();
308
}
309
 
310
struct C
311
{
312
  char a[10];
313
  char b;
314
};
315
 
316
void
317
__attribute__ ((noinline))
318
test5 (struct C *c)
319
{
320
  if (__builtin_object_size (&c->b, 0) != (size_t) -1)
321
    abort ();
322
  if (__builtin_object_size (&c->b, 1) != 1)
323
    abort ();
324
  if (__builtin_object_size (&c->b, 2) != 0)
325
    abort ();
326
  if (__builtin_object_size (&c->b, 3) != 1)
327
    abort ();
328
}
329
 
330
struct D
331
{
332
  int i;
333
  struct D1
334
  {
335
    char b;
336
    char a[10];
337
  } j;
338
};
339
 
340
void
341
__attribute__ ((noinline))
342
test6 (struct D *d)
343
{
344
  if (__builtin_object_size (&d->j.a[3], 0) != (size_t) -1)
345
    abort ();
346
  if (__builtin_object_size (&d->j.a[3], 1) != sizeof (d->j.a) - 3)
347
    abort ();
348
  if (__builtin_object_size (&d->j.a[3], 2) != 0)
349
    abort ();
350
  if (__builtin_object_size (&d->j.a[3], 3) != sizeof (d->j.a) - 3)
351
    abort ();
352
}
353
 
354
struct E
355
{
356
  int i;
357
  struct E1
358
  {
359
    char b;
360
    char a[10];
361
  } j[1];
362
};
363
 
364
void
365
__attribute__ ((noinline))
366
test7 (struct E *e)
367
{
368
  if (__builtin_object_size (&e->j[0].a[3], 0) != (size_t) -1)
369
    abort ();
370
  if (__builtin_object_size (&e->j[0].a[3], 1) != sizeof (e->j[0].a) - 3)
371
    abort ();
372
  if (__builtin_object_size (&e->j[0].a[3], 2) != 0)
373
    abort ();
374
  if (__builtin_object_size (&e->j[0].a[3], 3) != sizeof (e->j[0].a) - 3)
375
    abort ();
376
  if (__builtin_object_size ((char *) &e->j[0], 0) != (size_t) -1)
377
    abort ();
378
  if (__builtin_object_size ((char *) &e->j[0], 1) != (size_t) -1)
379
    abort ();
380
  if (__builtin_object_size ((char *) &e->j[0], 2) != 0)
381
    abort ();
382
  if (__builtin_object_size ((char *) &e->j[0], 3) != 0)
383
    abort ();
384
}
385
 
386
union F
387
{
388
  char a[1];
389
  struct F1
390
  {
391
    char b;
392
    char c[10];
393
  } d;
394
};
395
 
396
void
397
__attribute__ ((noinline))
398
test8 (union F *f)
399
{
400
  if (__builtin_object_size (&f->d.c[3], 0) != (size_t) -1)
401
    abort ();
402
  if (__builtin_object_size (&f->d.c[3], 1) != (size_t) -1)
403
    abort ();
404
  if (__builtin_object_size (&f->d.c[3], 2) != 0)
405
    abort ();
406
  if (__builtin_object_size (&f->d.c[3], 3) != 0)
407
    abort ();
408
}
409
 
410
int
411
main (void)
412
{
413
  A a, *p = &a;
414
  int i = 1;
415
  __asm ("" : "+r" (p));
416
  test1 (p);
417
  test2 ();
418
  test3 ();
419
  struct B b, *q = &b;
420
  __asm ("" : "+r" (q), "+r" (i));
421
  test4 (q, i);
422
  struct C c, *cp = &c;
423
  __asm ("" : "+r" (cp));
424
  test5 (cp);
425
  struct D d, *dp = &d;
426
  __asm ("" : "+r" (dp));
427
  test6 (dp);
428
  struct E e, *ep = &e;
429
  __asm ("" : "+r" (ep));
430
  test7 (ep);
431
  union F f, *fp = &f;
432
  __asm ("" : "+r" (fp));
433
  test8 (fp);
434
  exit (0);
435
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.