]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.dg/Wrestrict-16.c
Update copyright years.
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / Wrestrict-16.c
1 /* PR tree-optimization/85753 - missing -Wrestrict on memcpy into a member
2 array
3 { dg-do compile }
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
5
6 #define memcpy __builtin_memcpy
7
8 char a[16];
9
10 struct { char a[16]; } x;
11
12 /* Exercise aggregate types. */
13
14 void test_aggr_idx_nowarn (int i, int j)
15 {
16 memcpy (&a[i], &a[j], 7);
17 memcpy (&x.a[i], &x.a[j], 7);
18 }
19
20 void test_aggr_idx_warn (int i, int j)
21 {
22 memcpy (&a[i], &a[j], 9); /* { dg-warning "\\\[-Wrestrict" } */
23 memcpy (&x.a[i], &x.a[j], 9); /* { dg-warning "\\\[-Wrestrict" } */
24 }
25
26 void test_aggr_off_nowarn (int i, int j)
27 {
28 memcpy (a + i, a + j, 5);
29 memcpy (x.a + i, x.a + j, 5);
30 }
31
32 void test_aggr_off_warn (int i, int j)
33 {
34 memcpy (a + i, a + j, 9); /* { dg-warning "\\\[-Wrestrict" } */
35 memcpy (x.a + i, x.a + j, 9); /* { dg-warning "\\\[-Wrestrict" } */
36 }
37
38
39 void sink (void*);
40
41 #define T(call) sink (call)
42
43
44 /* Also exercise basic types. */
45
46 #ifdef __UINT32_TYPE__
47
48 __UINT32_TYPE__ i32;
49
50 void test_basic_32 (int i, int j)
51 {
52 char *p = (char*)&i32;
53
54 T (memcpy (&p[i], &p[j], 1));
55 T (memcpy (&p[i], &p[j], 2));
56 T (memcpy (&p[i], &p[j], 3)); /* { dg-warning "\\\[-Wrestrict" } */
57
58 T (memcpy (p + i, p + j, 1));
59 T (memcpy (p + i, p + j, 2));
60 T (memcpy (p + i, p + j, 3)); /* { dg-warning "\\\[-Wrestrict" } */
61 }
62
63 #endif
64
65 #ifdef __UINT64_TYPE__
66
67 __UINT64_TYPE__ i64;
68
69 void test_basic_64 (int i, int j)
70 {
71 char *p = (char*)&i64;
72
73 T (memcpy (&p[i], &p[j], 1));
74 T (memcpy (&p[i], &p[j], 2));
75 T (memcpy (&p[i], &p[j], 3));
76 T (memcpy (&p[i], &p[j], 5)); /* { dg-warning "\\\[-Wrestrict" } */
77 T (memcpy (&p[i], &p[j], 6)); /* { dg-warning "\\\[-Wrestrict" } */
78 T (memcpy (&p[i], &p[j], 7)); /* { dg-warning "\\\[-Wrestrict" } */
79
80 T (memcpy (p + i, p + j, 1));
81 T (memcpy (p + i, p + j, 2));
82 T (memcpy (p + i, p + j, 3));
83 T (memcpy (p + i, p + j, 5)); /* { dg-warning "\\\[-Wrestrict" } */
84 T (memcpy (p + i, p + j, 6)); /* { dg-warning "\\\[-Wrestrict" } */
85 T (memcpy (p + i, p + j, 7)); /* { dg-warning "\\\[-Wrestrict" } */
86 }
87
88 #endif