1 /* PR tree-optimization/85753 - missing -Wrestrict on memcpy into a member
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
6 #define memcpy __builtin_memcpy
10 struct { char a
[16]; } x
;
12 /* Exercise aggregate types. */
14 void test_aggr_idx_nowarn (int i
, int j
)
16 memcpy (&a
[i
], &a
[j
], 7);
17 memcpy (&x
.a
[i
], &x
.a
[j
], 7);
20 void test_aggr_idx_warn (int i
, int j
)
22 memcpy (&a
[i
], &a
[j
], 9); /* { dg-warning "\\\[-Wrestrict" } */
23 memcpy (&x
.a
[i
], &x
.a
[j
], 9); /* { dg-warning "\\\[-Wrestrict" } */
26 void test_aggr_off_nowarn (int i
, int j
)
28 memcpy (a
+ i
, a
+ j
, 5);
29 memcpy (x
.a
+ i
, x
.a
+ j
, 5);
32 void test_aggr_off_warn (int i
, int j
)
34 memcpy (a
+ i
, a
+ j
, 9); /* { dg-warning "\\\[-Wrestrict" } */
35 memcpy (x
.a
+ i
, x
.a
+ j
, 9); /* { dg-warning "\\\[-Wrestrict" } */
41 #define T(call) sink (call)
44 /* Also exercise basic types. */
46 #ifdef __UINT32_TYPE__
50 void test_basic_32 (int i
, int j
)
52 char *p
= (char*)&i32
;
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" } */
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" } */
65 #ifdef __UINT64_TYPE__
69 void test_basic_64 (int i
, int j
)
71 char *p
= (char*)&i64
;
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" } */
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" } */