annotate gcc/testsuite/gcc.dg/Wrestrict-16.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
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/85753 - missing -Wrestrict on memcpy into a member
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 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 -Wall -ftrack-macro-expansion=0" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 #define memcpy __builtin_memcpy
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 char a[16];
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 struct { char a[16]; } x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 /* Exercise aggregate types. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 void test_aggr_idx_nowarn (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 memcpy (&a[i], &a[j], 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 memcpy (&x.a[i], &x.a[j], 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 void test_aggr_idx_warn (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 memcpy (&a[i], &a[j], 9); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 memcpy (&x.a[i], &x.a[j], 9); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 void test_aggr_off_nowarn (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 memcpy (a + i, a + j, 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 memcpy (x.a + i, x.a + j, 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 void test_aggr_off_warn (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 memcpy (a + i, a + j, 9); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 memcpy (x.a + i, x.a + j, 9); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 void sink (void*);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 #define T(call) sink (call)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 /* Also exercise basic types. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 #ifdef __UINT32_TYPE__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 __UINT32_TYPE__ i32;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 void test_basic_32 (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 char *p = (char*)&i32;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 T (memcpy (&p[i], &p[j], 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 T (memcpy (&p[i], &p[j], 2));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 T (memcpy (&p[i], &p[j], 3)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 T (memcpy (p + i, p + j, 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 T (memcpy (p + i, p + j, 2));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 T (memcpy (p + i, p + j, 3)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 #ifdef __UINT64_TYPE__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 __UINT64_TYPE__ i64;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 void test_basic_64 (int i, int j)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 char *p = (char*)&i64;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 T (memcpy (&p[i], &p[j], 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 T (memcpy (&p[i], &p[j], 2));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 T (memcpy (&p[i], &p[j], 3));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 T (memcpy (&p[i], &p[j], 5)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 T (memcpy (&p[i], &p[j], 6)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 T (memcpy (&p[i], &p[j], 7)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 T (memcpy (p + i, p + j, 1));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 T (memcpy (p + i, p + j, 2));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 T (memcpy (p + i, p + j, 3));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 T (memcpy (p + i, p + j, 5)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 T (memcpy (p + i, p + j, 6)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 T (memcpy (p + i, p + j, 7)); /* { dg-warning "\\\[-Wrestrict" } */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 #endif