annotate gcc/testsuite/gcc.dg/torture/pr65077.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 extern void abort (void);
kono
parents:
diff changeset
4 extern void *memcpy(void *, const void *, __SIZE_TYPE__);
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 typedef struct {
kono
parents:
diff changeset
7 void *v1;
kono
parents:
diff changeset
8 void *v2;
kono
parents:
diff changeset
9 void *v3;
kono
parents:
diff changeset
10 union {
kono
parents:
diff changeset
11 void *f1;
kono
parents:
diff changeset
12 void *f2;
kono
parents:
diff changeset
13 } u;
kono
parents:
diff changeset
14 } S;
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 S *getS();
kono
parents:
diff changeset
18 void verify_p(void *p);
kono
parents:
diff changeset
19 double *getP(void *p);
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 void memcpy_bug()
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 S *s;
kono
parents:
diff changeset
24 double *p = getP(0);
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 if (p) {
kono
parents:
diff changeset
27 int intSptr[sizeof(S*)/sizeof(int)];
kono
parents:
diff changeset
28 unsigned i = 0;
kono
parents:
diff changeset
29 for (i = 0; i < sizeof(intSptr)/sizeof(*intSptr); ++i) {
kono
parents:
diff changeset
30 intSptr[i] = (int) p[i];
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32 memcpy(&s, intSptr, sizeof(intSptr));
kono
parents:
diff changeset
33 (s)->u.f1 = p;
kono
parents:
diff changeset
34 verify_p((s)->u.f1);
kono
parents:
diff changeset
35 } else {
kono
parents:
diff changeset
36 s = getS();
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38 verify_p(s->u.f1);
kono
parents:
diff changeset
39 }
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 double P[4];
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 double *getP(void *p) {
kono
parents:
diff changeset
44 union u {
kono
parents:
diff changeset
45 void *p;
kono
parents:
diff changeset
46 int i[2];
kono
parents:
diff changeset
47 } u;
kono
parents:
diff changeset
48 u.p = P;
kono
parents:
diff changeset
49 P[0] = u.i[0];
kono
parents:
diff changeset
50 P[1] = u.i[1];
kono
parents:
diff changeset
51 return P;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 S *getS()
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 return 0;
kono
parents:
diff changeset
57 }
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 void verify_p(void *p)
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 if (p != P)
kono
parents:
diff changeset
62 abort ();
kono
parents:
diff changeset
63 }
kono
parents:
diff changeset
64
kono
parents:
diff changeset
65 int main(int argc, char *argv[])
kono
parents:
diff changeset
66 {
kono
parents:
diff changeset
67 memcpy_bug();
kono
parents:
diff changeset
68 return 0;
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70