annotate gcc/testsuite/gcc.dg/Wrestrict-8.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR tree-optimization/84095 - false-positive -Wrestrict warnings for
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 memcpy within array
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 { dg-do compile }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 { dg-options "-O2 -Wrestrict -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 typedef __SIZE_TYPE__ size_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 extern void* memcpy (void* restrict, const void* restrict, size_t);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 #define T(d, s, n) memcpy (d, s, n)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 struct S1 { char c; } a8_1[8];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 void test_1_dim_var (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 /* Variable destination index and constant source index. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 T (&a8_1[i], &a8_1[0], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 T (&a8_1[i], &a8_1[0], 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 T (&a8_1[i], &a8_1[0], 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 T (&a8_1[i], &a8_1[0], 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 T (&a8_1[i], &a8_1[0], 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and 0 overlaps between 2 and 5 bytes at offset \\\[0, 3\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 T (&a8_1[i], &a8_1[0], 6); /* { dg-warning "accessing 6 bytes at offsets \\\[0, 8] and 0 overlaps between 4 and 6 bytes at offset \\\[0, 2\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 T (&a8_1[i], &a8_1[0], 7); /* { dg-warning "accessing 7 bytes at offsets \\\[0, 8] and 0 overlaps between 6 and 7 bytes at offset \\\[0, 1\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 T (&a8_1[i], &a8_1[0], 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and 0 overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 /* The following is diagnosed by -Warray-bounds when it's enabled
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 rather than by -Wrestrict. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 T (&a8_1[i], &a8_1[0], 9); /* { dg-warning "accessing 9 bytes at offsets \\\[0, 8] and 0 overlaps 9 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 /* Same as above but with constant destination index and variable
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 source index. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 T (&a8_1[0], &a8_1[i], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 T (&a8_1[0], &a8_1[i], 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 T (&a8_1[0], &a8_1[i], 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 T (&a8_1[0], &a8_1[i], 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 T (&a8_1[0], &a8_1[i], 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[0, 8] overlaps between 2 and 5 bytes at offset \\\[0, 3\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 T (&a8_1[0], &a8_1[i], 6); /* { dg-warning "accessing 6 bytes at offsets 0 and \\\[0, 8] overlaps between 4 and 6 bytes at offset \\\[0, 2\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 T (&a8_1[0], &a8_1[i], 7); /* { dg-warning "accessing 7 bytes at offsets 0 and \\\[0, 8] overlaps between 6 and 7 bytes at offset \\\[0, 1\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 T (&a8_1[0], &a8_1[i], 8); /* { dg-warning "accessing 8 bytes at offsets 0 and \\\[0, 8] overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 T (&a8_1[0], &a8_1[i], 9); /* { dg-warning "accessing 9 bytes at offsets 0 and \\\[0, 8] overlaps 9 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 /* Variable destination and source indices. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 T (&a8_1[i], &a8_1[j], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 T (&a8_1[i], &a8_1[j], 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 T (&a8_1[i], &a8_1[j], 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 T (&a8_1[i], &a8_1[j], 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 T (&a8_1[i], &a8_1[j], 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps between 2 and 5 bytes at offset \\\[0, 3\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 T (&a8_1[i], &a8_1[j], 6); /* { dg-warning "accessing 6 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps between 4 and 6 bytes at offset \\\[0, 2\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 T (&a8_1[i], &a8_1[j], 7); /* { dg-warning "accessing 7 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps between 6 and 7 bytes at offset \\\[0, 1\\\]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 T (&a8_1[i], &a8_1[j], 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 /* The following is diagnosed by -Warray-bounds when it's enabled
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 rather than by -Wrestrict. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 T (&a8_1[i], &a8_1[j], 9); /* { dg-warning "accessing 9 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps 9 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 struct S4 { char a4[4]; } a2_4[2];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 void test_2_dim (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 T (&a2_4[i], &a2_4[0], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 T (&a2_4[i], &a2_4[0], 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 T (&a2_4[i], &a2_4[0], 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and 0 overlaps between 2 and 5 bytes at offset \\\[0, 3]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 T (&a2_4[i], &a2_4[0], 6); /* { dg-warning "accessing 6 bytes at offsets \\\[0, 8] and 0 overlaps between 4 and 6 bytes at offset \\\[0, 2]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 T (&a2_4[i], &a2_4[0], 7); /* { dg-warning "accessing 7 bytes at offsets \\\[0, 8] and 0 overlaps between 6 and 7 bytes at offset \\\[0, 1]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 T (&a2_4[i], &a2_4[0], 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and 0 overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 T (a2_4[i].a4, a2_4[0].a4, 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 T (a2_4[i].a4, a2_4[0].a4, 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 T (a2_4[i].a4, a2_4[0].a4, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and 0 overlaps between 2 and 5 bytes at offset \\\[0, 3]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 T (a2_4[i].a4, a2_4[0].a4, 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and 0 overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 T (a2_4[i].a4, a2_4[j].a4, 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 T (a2_4[i].a4, a2_4[j].a4, 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 /* The destination and source offsets printed below ignore the size
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 of the copy and only indicate the values that are valid for each
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 of the destination and source arguments on its own, without
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 considering the size of the overlapping access. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 T (a2_4[i].a4, a2_4[j].a4, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps between 2 and 5 bytes at offset \\\[0, 3]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 T (a2_4[i].a4, a2_4[j].a4, 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 /* Same as above but referencing the first elements of each array. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 T (&a2_4[i].a4[0], &a2_4[j].a4[0], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 T (&a2_4[i].a4[0], &a2_4[j].a4[0], 4);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 T (&a2_4[i].a4[0], &a2_4[j].a4[0], 5); /* { dg-warning "accessing 5 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps between 2 and 5 bytes at offset \\\[0, 3]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 T (&a2_4[i].a4[0], &a2_4[j].a4[0], 8); /* { dg-warning "accessing 8 bytes at offsets \\\[0, 8] and \\\[0, 8] overlaps 8 bytes at offset 0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 T (&a2_4[i].a4[0], &a2_4[j].a4[1], 3);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 T (&a2_4[i].a4[0], &a2_4[j].a4[2], 2);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 T (&a2_4[i].a4[0], &a2_4[j].a4[3], 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 struct { int i; } a2[2][8];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 void test_single_2_dim_major (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 memcpy (&a2[i], &a2[0], sizeof *a2); /* { dg-bogus "\\\[-Wrestrict]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 void test_single_2_dim_minor (int i)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 memcpy (&a2[i][0], &a2[0][0], sizeof a2[0][0]); /* { dg-bogus "\\\[-Wrestrict]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 void test_single_2_dim_major_minor (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 memcpy (&a2[i][j], &a2[0][0], sizeof a2[0][0]); /* { dg-bogus "\\\[-Wrestrict]" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 }