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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [ext/] [builtin-object-size2.C] - Blame information for rev 715

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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