annotate gcc/testsuite/gcc.dg/builtin-alloc-size.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR c/78668 - aligned_alloc, realloc, et al. missing attribute alloc_size
kono
parents:
diff changeset
2 Test to verify that memory allocation built-ins are decorated with
kono
parents:
diff changeset
3 attribute alloc_size that __builtin_object_size can make use of (or
kono
parents:
diff changeset
4 are treated as if they were for that purpose)..
kono
parents:
diff changeset
5 { dg-do compile }
kono
parents:
diff changeset
6 { dg-require-effective-target alloca }
kono
parents:
diff changeset
7 { dg-additional-options "-O2 -fdump-tree-optimized" } */
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 void sink (void*);
kono
parents:
diff changeset
10
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
11 static unsigned size (unsigned n)
111
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 return n;
kono
parents:
diff changeset
14 }
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 void test_aligned_alloc (unsigned a)
kono
parents:
diff changeset
17 {
kono
parents:
diff changeset
18 unsigned n = size (7);
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 void *p = __builtin_aligned_alloc (a, n);
kono
parents:
diff changeset
21 if (__builtin_object_size (p, 0) != n)
kono
parents:
diff changeset
22 __builtin_abort ();
kono
parents:
diff changeset
23 sink (p);
kono
parents:
diff changeset
24 }
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 void test_alloca (void)
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 unsigned n = size (13);
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 void *p = __builtin_alloca (n);
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 /* Also verify that alloca is declared with attribute returns_nonnull
kono
parents:
diff changeset
33 (or treated as it were as the case may be). */
kono
parents:
diff changeset
34 if (!p)
kono
parents:
diff changeset
35 __builtin_abort ();
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 if (__builtin_object_size (p, 0) != n)
kono
parents:
diff changeset
38 __builtin_abort ();
kono
parents:
diff changeset
39 sink (p);
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 void test_calloc (void)
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 unsigned m = size (19);
kono
parents:
diff changeset
45 unsigned n = size (23);
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 void *p = __builtin_calloc (m, n);
kono
parents:
diff changeset
48 if (__builtin_object_size (p, 0) != m * n)
kono
parents:
diff changeset
49 __builtin_abort ();
kono
parents:
diff changeset
50 sink (p);
kono
parents:
diff changeset
51 }
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 void test_malloc (void)
kono
parents:
diff changeset
54 {
kono
parents:
diff changeset
55 unsigned n = size (17);
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 void *p = __builtin_malloc (n);
kono
parents:
diff changeset
58 if (__builtin_object_size (p, 0) != n)
kono
parents:
diff changeset
59 __builtin_abort ();
kono
parents:
diff changeset
60 sink (p);
kono
parents:
diff changeset
61 }
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 void test_realloc (void *p)
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 unsigned n = size (31);
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 p = __builtin_realloc (p, n);
kono
parents:
diff changeset
68 if (__builtin_object_size (p, 0) != n)
kono
parents:
diff changeset
69 __builtin_abort ();
kono
parents:
diff changeset
70 sink (p);
kono
parents:
diff changeset
71 }
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 /* { dg-final { scan-tree-dump-not "abort" "optimized" } } */