1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/* PR tree-optimization/83456 - -Wrestrict false positive on
a non-overlapping memcpy in an inline function
{ dg-do compile }
{ dg-options "-O2 -Wrestrict -ftrack-macro-expansion=0" } */
extern void* memcpy (void*, const void*, __SIZE_TYPE__);
/* Test case from comment #0. */
inline void pr83456_comment0 (void *d, void *s, unsigned N)
{
if (s != d)
memcpy (d, s, N);
}
void call_pr83456_comment0 (void* src)
{
pr83456_comment0 (src, src, 1);
}
/* Test case from comment #1. */
char a[4];
void pr83456_comment1 (unsigned n)
{
for (int i = 0; i < 1; i++)
{
if (!i)
continue;
memcpy (a, a, n);
}
}
/* Test case from comment #2. */
struct netdevice {
void *priv;
};
struct ip_tunnel {
struct netdevice *dev;
int ip6rd[3];
};
struct sit_net {
struct netdevice *fb_tunnel_dev;
};
void ipip6_tunnel_clone_6rd (struct netdevice *dev, struct sit_net *sitn)
{
struct ip_tunnel *t = dev->priv;
if (t->dev == sitn->fb_tunnel_dev)
return;
struct ip_tunnel *t0 = sitn->fb_tunnel_dev->priv;
memcpy(&t->ip6rd, &t0->ip6rd, sizeof(t->ip6rd));
}
void sit_init_net (struct sit_net *sitn, struct netdevice *fb_tunnel_dev)
{
sitn->fb_tunnel_dev = fb_tunnel_dev;
ipip6_tunnel_clone_6rd (sitn->fb_tunnel_dev, sitn);
}
|